多点蓝牙连接到非iOS设备

5
我目前正在尝试通过蓝牙将树莓派和iOS设备连接起来。使用BTLE和CBCentralManager,我能够做到这一点——可以连接到树莓派并共享数据。
我的问题是,为了我的目的,我需要设备拥有IP地址-据我所知,只有使用PAN(个人局域网)蓝牙配置文件才可能实现这一点。iOS通过新的Multipeer Connectivity Framework支持此功能,并且在连接两个iOS设备时可以使用MCNearbyServiceBrowserMCNearbyServiceAdvertiser。连接建立后,两个设备都会具有带有IP的网络接口。但现在,我必须让树莓派加入到这种情况中-我找不到任何方法让树莓派加入到PAN中。
是否有人知道是否可能实现这一点,从哪里开始寻找,是否有关于PAN通信或类似内容的良好解释?甚至可能会有一个框架可以完成这样的事情吗?我很高兴听取任何线索和建议。
1个回答

5
多点连接框架(Multipeer Connectivity Framework)可能基于专有协议,因为我从未见过它实现PAN。它只是类似于它。正如您提到的,支持的配置文件列表也包含PAN,并带有以下说明:

根据蓝牙配件的不同,您可能会遇到轻微的配置文件功能差异。这些差异由配件制造商而非iOS设备控制。

理论上,PAN被支持,您应该能够连接支持此配置文件的任意设备。我使用iPhone上的个人热点将我的Android手机连接到了iPhone上,并且Android可以毫无问题地使用共享的互联网连接。
我发现 树莓派蓝牙iPhone网络共享(Raspberry Pi Bluetooth iPhone Tethering) 教程似乎描述了您正在尝试做的事情。供以后参考,我在此复制步骤: 安装蓝牙软件包
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/ 提供这些详细的指导。


1
非常感谢。不幸的是,我要等到下周开始才能测试,但我会在测试后尽快报告。 - BlackWolf
1
请注意,在iOS上(与Android不同),您需要启用移动数据才能激活个人热点。 - Etan
好的,我终于开始测试了:它确实可以工作(或多或少),但我遇到的问题是,我想从iOS设备以编程方式连接到蓝牙PAN,但我仍然不知道如何做到这一点?事实上,使用MCNearbyServiceBrowser似乎根本没有被树莓派注意到。我能否通过嗅探iPhone发送的BT数据包来了解更多信息? - BlackWolf
你无法这样做。只有用户可以修改任何网络设置。 - allprog
1
Multipeer Framework是一种专有的、闭源的协议。此外,它需要MFi认证芯片才能建立这样的连接(因此只有iOS设备可连接)。因此,即使您可以反向工程该协议,也无法建立任何连接。在非越狱的iOS设备上,我描述的方法是您唯一能做的事情,使用蓝牙进行其他操作需要MFi。 - allprog
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接