Проводное подключение от iPhone до малины Pi

Я хотел бы создать приложение на своем iPhone, которое соединяется с моей малиной Pi. Поскольку они будут находиться в непосредственной близости (рядом друг с другом), я бы хотел использовать проводное соединение (порт молнии на USB) для связи. Возможно ли это, или я должен использовать беспроводные технологии? Мое предположение заключается в том, что проводной будет лучше, поскольку он обеспечивает соединение и будет быстрее, однако я открыт для исправления.

Это связано с проектом хобби, где я хочу получить доступ к датчику малины pi на моем iphone. Датчик (и Pi) будет рядом с iphone. Я создаю необычный случай, чтобы объединить их.

Любые мысли очень ценятся.

Спасибо Иэн

Ответ 1

Для связи с периферийными устройствами (например, с малиной Pi) у вас есть несколько альтернатив.

UART через 30-контактный или разъем молнии (требуется MFi)

USB через 30-контактный или молниевой разъем (требуется MFi)

Быстрый старт: Наборы для разработки микрочипов. Этот модуль может продлить связь с RPi, или вы можете попытаться реализовать стек аксессуаров (и связь с чипом аутентификации) с самим RPi.

FSK или аналогичная модулированная аудиосвязь через аудиоразъем (не требуется MFi)

Вам нужно будет реализовать аппаратный модем FSK на стороне RPi и программный, который будет на стороне iOS. Это немного сложно, но отнюдь не невозможно.

Конечно, вы также можете реализовать программный модем на стороне RPi. Но так как RPi не имеет аудиовхода, вам придется использовать звуковую карту USB или что-то в этом роде. Или усложняйте вашу жизнь, пытаясь пробовать аналоговый вывод достаточно быстро.

Пользователь не очень Джейк сделал довольно впечатляющий список ссылок на эту тему здесь, на SO.

Bluetooth как внешний аксессуар (требуется MFi)

Быстрый старт: RN-41/42-APL

Простой в использовании стек Bluetooth. Связь с чипом аутентификации обрабатывается модулем BT. Обратите внимание, что при общении с устройствами ввода данных iOS не намного лучше, чем при использовании модулей BLE.

Bluetooth как BLE модуль (не требуется MFI)

Пропуск данных не намного хуже старого ВТ. Реализация коммуникации может быть немного сложнее по коду. Этот модуль кажется интересным.

Связь с WiFi (не требуется MFI)

Wi-Fi может быть хорошим выбором. Но для устройства и устройства iOS вы можете найти друг друга, вам потребуется либо статический IP-адрес (для серверного устройства), либо минимальный Zeroconf (Bonjour).

При использовании WiFi вы можете пойти либо с инфраструктурной сетью (используя внешнюю точку доступа), либо с помощью AdHoc (созданного вашим устройством). Позже кажется многообещающим, но будьте осторожны - сети iOS7 и AdHoc пока не работают хорошо.

С WiFi у вас есть много модулей на выбор. Более простым в использовании был бы модуль, например модуль RN-XV WiFly. TCP-стек уже реализован в модуле - вы можете использовать простое соединение UART. Я не уверен, как реализовать Zeroconf на этом.

Или есть необработанные модули WiFi, такие как MRF24WG0MA/MB. Они стабильны и надежны, и их можно использовать на печатной плате с домашним травлением. Недостатком для пользователя RPi было бы то, что вам почти наверняка понадобится PIC24 или что-то среднее между RPi и MRF24W. Microchip предоставляет бесплатный стек TCP/IP для своих микроконтроллеров, и этот стек включает Zeroconf.

И самый простой способ: вы могли бы просто использовать Wi-Fi-ключ (с RPi) для связи. Zeroconf должен быть достаточно простым для реализации на RPi - и это даже не нужно в начале, если вы в порядке с назначением статического IP-адреса RPi (если он действует как сервер).

Ответ 2

Это невозможно без регистрации программы MFI для яблок. Вы должны заплатить и подписать кучу NDA.

https://developer.apple.com/programs/mfi/

Вы можете использовать другие методы, такие как bluetooth и соединение через аудиопорт.

Ответ 3

В то время как ответ @RokJarc довольно завершен, у меня также был успех как с проводной (молнией на USB), так и с беспроводными подключениями с использованием личной точки доступа iOS. Вот шаги:

Для проводной связи на Pi установите ipheth-utils:

sudo apt-get install ipheth-utils

И добавьте сетевой интерфейс eth1, отредактировав /etc/network/interfaces, чтобы включить:

allow-hotplug eth1
iface eth1 inet manual

Для беспроводной связи убедитесь, что /etc/network/interfaces имеет запись беспроводной сети, например:

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Если вы используете wpa_supplicant и добавляете сетевую запись для точки доступа iPhone в /etc/wpa_supplicant/wpa_supplicant.conf:

network={
    ssid="Banana Phone"
    psk="ring ring ring"
    key_mgmt=WPA-PSK
    id_str="banana"
    priority=3
}

ssid должно быть именем телефона от Settings -> General -> About -> Name, а пароль должен появляться на экране личных горячих точек.

Теперь запустите персональную точку доступа на своем телефоне. Pi должен автоматически подключаться при подключении USB-кабелем к осветительному кабелю или использованию Wi-Fi. После подключения pi должен быть назначен ip где-то в 172.20.10.x. Вы можете запустить ifconfig на pi, чтобы выяснить, какой из них. (Я считаю, что вы должны быть в состоянии определить статический ip здесь, но еще не испортили это)

Оттуда вы можете подключить другой компьютер к hotspot и ssh в pi, используя 172.20.10.x ip или даже ssh непосредственно с телефона.


В моем личном тестировании латентность над молнией неизменно низка, и я использовал это как для малины Pi Two, так и для малины Pi Zero для потоковой передачи в реальном времени mjpeg видео с двух камер на гарнитуру VR. В этой схеме сеть представляет собой довольно небольшой источник задержки в 100 мс или около того. Разумеется, опыт не является качеством Vive, но он по-прежнему применим, и iPhone + Pi combo предоставляет массу интересных возможностей для взлома.

Ответ 4

Это можно сделать с помощью Mfi. Вы можете запустить службу usbmuxd на Raspberry Pi. Usbmuxd будет передавать данные USB в пакеты сокетов. В вашем iOS-приложении также должен быть реализован тот же протокол для передачи данных из/в Raspberry Pi. Дэвид Хаус уже сделал эту работу. https://github.com/davidahouse/PiTalk