Home Articles

使用BlueZ堆栈作为外围设备(广告商)

Asked
Viewed 205 times
45
  • Goal :使用BlueZ和蓝牙4LE加密狗创建一个外围设备,宣传相当于"Hello World"的蓝牙 .

  • Where I'm At :我已经用hciconfig leadv进行了修改,但是我正在进行 .

  • What Help I Think I Need :我需要进入下一步 . 如果有人能指出我对一个好的资源,请指导我,或任何事情,非常感谢 . 如果我需要做额外的腿(搜索)工作,我可以,但我已经用我能想到的这个问题的许多不同衍生物来搜索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/

2 Answers

  • 39

    插入蓝牙适配器后,运行以下命令将告诉您设备名称并说明其状态:

    $ 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 44EDIT: 但是您还必须使用有效的标头为此消息添加前缀,请参阅here.

    现在,使用以下命令激活加密狗上的广告,这将开始发送“Helo World”数据包 .

    $ sudo hciconfig hci0 leadv 0

    EDIT: 以上命令使广告服务可连接 . 如果您不想允许连接,请将其更改为 $ sudo hciconfig hci0 leadv 3

    您还可以使用以下命令禁用广告:

    $ sudo hciconfig hci0 noleadv

  • 5

    在这里添加更多信息(参考BlueZ5.x):

    • bluez没有暴露DBUS api用于gatt服务器注册;您有一些配置文件实现可用,但您需要使用--enable-experimental选项配置和编译它,或者在插件文件夹下启用gatt-example,以tregister some gatt server为例

    • 当你做广告时做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和Classic的连接过程不同) . 不确定Apple中央设备在这种情况下的行为方式 . 无论如何要避免它,你可以设置06而不是1A,这样就不会宣传BR-EDR支持 . 通过这种方式,您将看到通过BLE的连接 .

    如果您想使用中央Android设备进行测试,可以使用免费的Nordic应用程序 .

Related