使用堆栈的BlueZ作为外设(广告)(Use BlueZ Stack As A Peripheral

2019-08-31 18:47发布

  • 目标 :使用和的BlueZ蓝牙一个加密狗4LE创建通告蓝牙等同的“Hello World”的外围。

  • 我在哪里 :我目前得到了堆栈的BlueZ设置和下载,我可以使用HCI工具来认识,看到了蓝牙适配器。 我修修补补与hciconfig leadv但我只是不太得到它/理解发生了什么事情。

  • 我想帮助我需要的是 :我需要得到它的下一个步骤。 如果任何人都可以点我朝着一个很好的资源,走我通过这个或者其他什么,这将是非常赞赏。 如果我需要做额外的支柱(搜索)的工作,我可以,但我已经冲刷谷歌和SO这个问题,我能想到的许多不同的衍生物。

*我的,也许在iOS开发已经在某些时候这种修修补补的希望标记这是CoreBluetooth为好。

编辑:在回应评论,这似乎谨慎地说出我的最终目标是什么。 我最终喜欢经过加密狗做广告简单消息/信号的最简单和挑选了一个iOS装置(CoreBluetooth)上。 我已经能够得到的东西的工作以及iOS的侧(吨文档,而不是对事物的Linux端),但对我来说最难的是让这个适配器设置为外设。 该堆栈的BlueZ对我来说是一个可怕的谜。

编辑:更多挖后,我最终偶然发现了这个帖子: 树莓派蓝牙4.0连接 。 这导致我走向GATT服务器的话题,我将继续奉行这一话题。

编辑:好了,所以我对学习的追求下去。 在过去的几天我一直潜入更深的HCI *,sdptool可以和gatttool工具。 我已经得到了中能设置适配器做广告,“hciconfig hci0 leadv”的地步。 在这一点上,我可以成功地“看到”适配器,但我实际上并不能读取任何关闭它。 我还没有看到友好名称。 我会继续卡车上,但一如既往,任何帮助/建议是欢迎。

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

最后编辑时间:嘿,这个链接介绍了如何利用树莓派+向的BlueZ创建iBeacon显示... http://www.wadewegner.com/2014/05/create-an-ibeacon-transmitter-with-the-raspberry -pi /

Answer 1:

有了您的蓝牙适配器插上电源,运行以下命令将告诉您的设备名称,并给它的状态:

$ 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)发送不同的字节序列为您的广告。 一,从字面上发送ASCII码为“HELLO WORLD”将使用: 48 45 4c 4c 4f 57 4f 52 4c 44编辑:但你也必须前缀一个有效的头这条消息,请参见这里 )

现在,使用下面的命令来激活加密狗上的广告,这将开始发送“直升机世界”的数据包。

$ sudo hciconfig hci0 leadv 0

编辑:上面的命令,使广告的服务连接。 如果你不希望允许的连接,将其更改为$ sudo hciconfig hci0 leadv 3

您也可以使用以下命令禁止的广告:

$ sudo hciconfig hci0 noleadv



Answer 2:

在这里添加一些更多的信息(REF BlueZ5.x):

  • 的bluez不暴露DBUS API为复关服务器registeration; 你有一些可用的配置文件实现,但你需要配置和使用--enable-实验选项编译或启用下插件文件夹THA关贸总协定例如tregister一些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

    粗体的部分是对于被相关型号到flags字段的AD结构(下蓝牙规范检查advertisgin数据格式)。 有了这个标志设置的设备是广告本身的同时LE和BR-EDR。

    在我的经验,这样的广告是扫描的bluez设备充当BLE周边设备将触发了经典的蓝牙连接(由于标志设置),而不是在BLE(注意,连接程序是LE和经典不同)的Android设备时。 在这种情况下,不知道苹果如何中心设备的行为。 无论如何,以避免它可能会设置06,而不是1A使BR-EDR支持状态并没有公布。 这样一来,你会看到在BLE的连接。

如果你想使用中央Android设备来测试它存在于一个自由的北欧应用程序。



文章来源: Use BlueZ Stack As A Peripheral (Advertiser)