Многоранговое Bluetooth-соединение с устройством, отличным от iOS

В настоящее время я пытаюсь подключить Raspberry Pi и устройство iOS через Bluetooth. Используя BTLE и CBCentralManager, я могу это сделать — я могу подключиться к Pi и обмениваться данными.

Моя проблема в том, что для моей цели мне нужно, чтобы устройства имели IP-адрес, что, насколько мне известно, возможно только с использованием профиля bluetooth PAN (Personal Area Network). iOS поддерживает это с помощью новой Multipeer Connectivity Framework, и это работает при подключении двух устройств iOS, одно из которых использует MCNearbyServiceBrowser, а другое — MCNearbyServiceAdvertiser. После подключения оба устройства имеют сетевой интерфейс с IP. Но теперь мне нужно включить Rasperry Pi в этот сценарий, и я не могу найти способ заставить Pi присоединиться к PAN.

Есть ли у кого-нибудь какие-либо подсказки, возможно ли это как-то, с чего начать поиск, есть ли хорошее объяснение связи в PAN или что-то подобное? Может быть, даже существует фреймворк, который делает что-то подобное? Буду рад любым наводкам и советам.


person BlackWolf    schedule 18.03.2014    source источник


Ответы (1)


Multipeer Connectivity Framework, вероятно, основан на проприетарном протоколе, поскольку я нигде не видел, чтобы он реализовывал PAN. Это только похоже на это. Как вы упомянули, список поддерживаемых профилей также содержит PAN со следующим примечанием:

В зависимости от аксессуара Bluetooth функциональные возможности профиля могут немного различаться. Эти варианты регулируются производителем аксессуара, а не устройством iOS.

Таким образом, теоретически PAN поддерживается как есть, и вы сможете подключиться к произвольному устройству, которое поддерживает этот профиль. Я подключил свой телефон Android к своему iPhone с помощью персональной точки доступа на iPhone, и Android мог без проблем использовать общее подключение к Интернету.

Я нашел руководство по Bluetooth iPhone Tethering на Raspberry Pi, которое точно описывает, что вы пытаетесь сделать. Для дальнейшего использования я копирую шаги здесь:

Установите пакеты Bluetooth

sudo aptitude install bluetooth bluez-utils bluez-compat

Сопряжение устройств, это сложная часть

pi@raspberrypi ~ $ hcitool scan
Scanning ...
    18:34:51:55:B0:D8   Fanboy ][
pi@raspberrypi ~ $
pi@raspberrypi ~ $ grep KeyboardDisplay /usr/bin/bluez-simple-agent 
    capability = "KeyboardDisplay"
pi@raspberrypi ~ $ sudo perl -i -pe 's/KeyboardDisplay/DisplayYesNo/' /usr/bin/bluez-simple-agent
pi@raspberrypi ~ $ grep DisplayYesNo /usr/bin/bluez-simple-agent
    capability = "DisplayYesNo"
pi@raspberrypi ~ $ 
pi@raspberrypi ~ $ sudo bluez-simple-agent hci0 18:34:51:55:B0:D8
RequestConfirmation (/org/bluez/18868/hci0/dev_18_34_51_55_B0_D8, 160178)
Confirm passkey (yes/no): yes
Release
New device (/org/bluez/18868/hci0/dev_18_34_51_55_B0_D8)
pi@raspberrypi ~ $
pi@raspberrypi ~ $ sudo bluez-test-device trusted 18:34:51:55:B0:D8 yes

Включить личную точку доступа

pi@raspberrypi ~ $ echo "echo 'iface bnep0 inet dhcp' >> /etc/network/interfaces" | sudo sh
pi@raspberrypi ~ 

$ sudo pand -c 18:34:51:55:B0:D8 -role PANU --persist 30

Наслаждайтесь

pi@raspberrypi ~ $ ifconfig bnep0
bnep0     Link encap:Ethernet  HWaddr e0:91:53:61:0f:74  
          inet addr:172.20.10.10  Bcast:172.20.10.15  Mask:255.255.255.240
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:14 errors:0 dropped:0 overruns:0 frame:0
      TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:4426 (4.3 KiB)  TX bytes:802 (802.0 B)

Все кредиты относятся к http://www.wolfteck.com/ за предоставление этих подробных инструкций.

person allprog    schedule 18.03.2014
comment
большое спасибо. к сожалению, я не могу проверить это до начала следующей недели, но я отчитаюсь, как только это сделаю. - person BlackWolf; 20.03.2014
comment
Обратите внимание, что на iOS (в отличие от Android) вам необходимо включить мобильные данные, чтобы активировать личную точку доступа. - person Etan; 21.03.2014
comment
Что ж, я, наконец, приступил к тестированию: это действительно работает (более или менее), но проблема, с которой я столкнулся, заключается в том, что я хочу программно подключиться к Bluez PAN с устройства iOS и Я до сих пор не понимаю, как я могу это сделать? Фактически, использование t MCNearbyServiceBrowser, похоже, вообще не замечается пи. Могу ли я как-то понюхать пакеты BT, отправленные iphone, чтобы, возможно, узнать больше об этом? - person BlackWolf; 25.03.2014
comment
Вы не сможете этого сделать. Только пользователь может изменять любые сетевые настройки. - person allprog; 25.03.2014
comment
Multipeer Framework — это проприетарный протокол с закрытым исходным кодом. Кроме того, для установления такого соединения требуется микросхема аутентификатора MFi (поэтому можно подключать только устройства iOS). Таким образом, даже если бы вы могли перепроектировать протокол, вы не смогли бы установить какие-либо соединения. На не взломанном iOS-устройстве описанный мной способ — единственное, что вы можете сделать, для всего остального с bluetooth требуется MFi. - person allprog; 25.03.2014
comment
Это очень плохо... учитывая, что я разрабатываю внутреннее приложение и могу использовать частные API, такие как BluetoothManager, есть ли хороший способ сделать это? Альтернативой может быть ручное открытие специальной сети Wi-Fi с использованием частных API, но я пока не нашел ничего полезного о том, как это сделать... - person BlackWolf; 25.03.2014
comment
Я не смотрел на частные API. Возможно, это удастся сделать. Вы должны задать это в другом вопросе, мне тоже интересно узнать что-то новое. Кстати, как вы думаете, я ответил на этот вопрос? Если это так, пожалуйста, примите это. Спасибо. - person allprog; 25.03.2014
comment
@allprog Откуда вы знаете, что для Multipeer Framework требуется чип MFi? Применяется ли это также в режиме работы только Wi-Fi (т. е. без Bluetooth)? - person flo von der uni; 21.04.2015
comment
Только поддерживаемые профили Bluetooth не требуют чипа аутентификации support.apple.com/hu-hu/HT204387. МК, к сожалению, там не указан. - person allprog; 22.04.2015