使用BlueZ堆栈作为外设(广告客户)

  • 目标 :使用BlueZ和蓝牙4LEencryption狗创build一个外设,宣传蓝牙等价物“Hello World”。

  • 我在哪里 :目前我已经获得BlueZ堆栈设置并下载了,我可以使用hci工具来识别并查看蓝牙适配器。 我已经用hviconfig leadv修饰过,但是我只是不太明白/理解发生了什么。

  • 我认为我需要什么帮助 :我需要把它带到下一步。 如果任何人都可以指向我一个很好的资源,走过这个,或任何东西,这将不胜感激。 如果我需要做额外的行程(search)工作,我可以,但是我已经用Google和Googlesearch了这个问题的许多不同衍生物。

*我把它标记为CoreBluetooth,希望iOS开发者可以在某个时候修正它。

编辑:在回应评论时,陈述我的最终目标是什么是审慎的。 我最终希望通过encryption狗广告最简单的简单消息/信号,并在iOS设备(CoreBluetooth)上select。 我已经能够使iOS的一切运行良好(与Linux的一面相比文件吨),但对我来说,困难的部分是作为一个外设得到这个适配器设置。 BlueZ堆栈对我来说是一个可怕的谜团。

编辑:经过更多的挖掘,我最终偶然发现了这个职位: 树莓派蓝牙4.0连接 。 这导致我走向了GATT服务器的主题,我将继续追求这个话题。

编辑:好,所以我的学习继续下去。 在过去的几天里,我深入了解了hci *,sdptool和gattool工具。 我已经到了能够设置适配器来宣传“hciconfig hci0 leadv”的地步。 在这一点上,我可以成功地“看”适配器,但是我实际上无法读取任何东西。 我甚至没有看到友好的名字。 我会继续卡车,但一如既往,任何帮助/build议都比欢迎。

编辑:相关链接,蓝牙LE关于iOS的全面概述。 https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html#//apple_ref/doc/uid/TP40013257-CH1-SW1

最后编辑:嘿所有,这个链接涵盖了如何使用Raspberry Pi + BlueZ创build一个iBeacon … http://www.wadewegner.com/2014/05/create-an-ibeacon-transmitter-with-the-rasberry -pi /

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

$ 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处于closures状态。 发出以下命令将其显示出来:

$ 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 

接下来,执行以下示例命令来configuration要发送的广告数据。

 $ 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 

您可以更改hex字节(从1e开始)为您的广告发送不同的字节序列。 一个字面上发送“HELLO WORLD”的ASCII代码将使用: 48 45 4c 4c 4f 57 4f 52 4c 44编辑:但是你也必须在这个消息前加一个有效的头部,见这里 )

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

$ sudo hciconfig hci0 leadv 0

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

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

$ sudo hciconfig hci0 noleadv

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

  • bluez没有公开DBUS api的gatt服务器注册; 你有一些configuration文件的实现可用,但你需要使用–enable-experimental选项来configuration和编译它,或者在插件文件夹下启用gatt-example,以tregister一些gatt服务器为例

  • 当你做广告做广告的时候要注意广告的数据。 在下面的示例中为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。

    根据我的经验,当以这种方式进行广告时,扫描蓝牙设备充当BLE外围设备的Android设备将通过经典蓝牙(由于标志设置)触发连接,而​​不是通过BLE(请注意,LE和Classic的连接过程不同)。 不确定苹果中央设备如何在这种情况下行事。 无论如何,为了避免它,你可以设置06而不是1A,以便BR-EDR支持不被广告。 通过这种方式,您将看到通过BLE的连接。

如果您想使用中央Android设备进行testing,则可以使用免费的北欧应用。

Interesting Posts