目标:使用BlueZ和蓝牙4LE加密狗创建一个外围设备,宣传蓝牙相当于" Hello World"。
我在的位置:我目前已经安装并下载了BlueZ堆栈,我可以使用hci工具识别并查看蓝牙适配器。我已经使用了hciconfig leadv,但我还没有完全了解它/了解正在发生的事情。
我认为需要什么帮助:我需要进入下一步。如果有人能指出我对一个好的资源,请指导我,或任何事情,非常感谢。如果我需要做额外的支线(搜索)工作,我可以,但我已经用我能想到的这个问题的许多不同衍生物来搜索Google和SO。
*我将此标记为CoreBluetooth,希望可能是iOS开发者在某些时候对此进行了修改。
编辑:在回应评论时,谨慎地陈述我的最终目标是什么。我最终喜欢通过加密狗广告最简单的简单消息/信号,并在iOS设备(CoreBluetooth)上进行选择。我已经能够让iOS方面运行良好(与Linux方面相比,大量的文档),但对我来说,困难的部分是将此适配器设置为外围设备。 BlueZ堆栈对我来说是一个可怕的谜。 编辑:经过多次挖掘,我最终偶然发现了这篇文章:Raspberry Pi Bluetooth 4.0 Connection。 这使我走向GATT服务器的主题,我将继续追求这个话题。 编辑:好的,所以我继续学习。在过去的几天里,我深入研究了hci *,sdptool和gatttool工具。我已经到了能够设置适配器进行广告的程度," hciconfig hci0 leadv"。在这一点上,我可以成功地看到"适配器,但我实际上无法读取任何东西。我甚至没有看到友好的名字。我会继续保持卡车运输,但一如既往,任何帮助/建议都非常受欢迎。编辑:相关链接,关于iOS的蓝牙LE的可靠概述。 https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html#//apple_ref/doc/uid/TP40013257-CH1-SW1
最后编辑:嘿所有,这个链接涵盖了如何使用Raspberry Pi + BlueZ创建iBeacon ... http://www.wadewegner.com/2014/05/create-an-ibeacon-transmitter-with-the-raspberry-pi/
答案 0 :(得分:41)
插入蓝牙适配器后,运行以下命令会告诉您设备名称并说明其状态:
$ hciconfig
输出应该如下所示:
hci0: Type: BR/EDR Bus: USB
BD Address: 00:01:02:aa:bb:cc ACL MTU: 1021:8 SCO MTU: 64:1
DOWN
RX bytes:1000 acl:0 sco:0 events:47 errors:0
TX bytes:1072 acl:0 sco:0 commands:47 errors:0
这表示设备被称为hci0处于关闭状态。发出以下命令以启动它:
$ sudo hciconfig hci0 up
现在看起来应该是这样的:
$ hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 00:01:02:aa:bb:cc ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:1000 acl:0 sco:0 events:47 errors:0
TX bytes:1072 acl:0 sco:0 commands:47 errors:0
接下来,执行以下示例命令以配置要发送的广告数据。
$ sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00
您可以更改十六进制字节(从1e开始)为您的广告发送不同的字节序列。实际上发送“HELLO WORLD”的ASCII代码的人会使用:48 45 4c 4c 4f 57 4f 52 4c 44
(编辑:但是您还必须在此邮件的前面加上有效的标头,请参阅here. )
现在,使用以下命令激活加密狗上的广告,这将开始发送“Helo World”数据包。
$ sudo hciconfig hci0 leadv 0
编辑:上述命令使广告服务可连接。如果您不想允许连接,请将其更改为$ sudo hciconfig hci0 leadv 3
您还可以使用以下命令禁用广告:
$ sudo hciconfig hci0 noleadv
答案 1 :(得分:6)
在此处添加更多信息(参考BlueZ5.x):
bluez没有公开DBUS api用于gatt服务器注册;您有一些配置文件实现可用,但您需要使用--enable-experimental选项配置和编译它,或者在插件文件夹下启用gatt-example,例如以某些gatt服务器为例
当您做广告时,请执行hciconfig hci0 leadv注意广告数据。 在以下示例中为iBeacon
sudo hcitool -i hci0 cmd 0x08 0x0008 1e **02 01 1a** ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00
粗体部分用于AD结构,该结构与标志字段相关(在蓝牙规范下检查广告数据格式)。通过此标志设置,设备将自己宣传为同时LE和BR-EDR。
根据我的经验,当以这种方式进行广告时,扫描bluez设备充当BLE外围设备的Android设备将触发经典蓝牙连接(由于标记设置)而不是BLE(请注意连接程序对于LE和经典)。不确定Apple中央设备在这种情况下的行为方式。无论如何要避免它,你可以设置06而不是1A,这样就不会宣传BR-EDR支持。通过这种方式,您将看到通过BLE的连接。
如果您想使用中央Android设备进行测试,可以使用免费的Nordic应用程序。