是否可以使用 BLE 广播模式发送数据?

Enr*_*ssi 6 c broadcast bluetooth-lowenergy

我想问您是否可以以广播模式将数据(字符串)从 BLE 设备(例如 Raspberry Pi、Onion 或带有蓝牙加密狗的 Arduino)发送到另一个设备(例如电话或另一个 Raspberry Pi) ,这将在屏幕上显示数据。

老实说,没有必要在屏幕上显示数据,但其他设备必须能够用我将创建的 C 程序详细说明接收到的数据。

我对这个主题进行了大量研究,但我只能找到有关信标的答案,这些对象无法为我的项目发送有用的数据(如字符串),或者必须相互连接才能发送/接收数据的 BLE 设备。

我想用 C 创建一个程序,以实现这个结果。我在 BlueZ 库中搜索了一些有用的东西,但我找不到任何东西,因为它们没有解释其函数的含义。如果可能的话,我不想创建一个 android/iOS 应用程序。

You*_*eed 9

是的,这是可能的。您可能已经知道,低功耗蓝牙 (BLE) 中有四个角色:-

  • 广播器 - 只发布数据的设备。
  • 外围设备 - 一种设备,用于通告数据但也可以通过远程设备连接。
  • Observer - 只扫描数据的设备。
  • Central - 可以扫描数据并连接到数据的设备。

当 BLE 首次被引入时,信标/传感器(例如心率、温度计)占据了前两个类别,而手机/计算机则占据了另外两个类别。然而,BLE 已经发展,现在很多设备都支持所有四种角色,并且一个设备可以同时以一种或多种角色运行。

关于你的问题,正如 Lee Daniel Crocker 所提到的,数据就是数据,你在广告中放置的只是另一端必须理解的字节。您只能在广告报告*中放入 31 个字节的数据,这就是面向连接的数据传输效率更高的原因。

关于可编程性,我建议从用于广播的设备和读取数据的设备上的 BlueZ 命令开始。您可以使用 Bluetoothctl 命令执行此操作,如下所示:-

在广播公司/外围设备上

#bluetoothctl
[bluetooth]menu advertise
[bluetooth]advertise data 00 00 00 00
[bluetooth]back
[bluetooth]advertise on
Run Code Online (Sandbox Code Playgroud)

在观察员/中央

#bluetoothctl
[bluetooth]scan on
Run Code Online (Sandbox Code Playgroud)

我使用的是BlueZ 5.50 版,我建议您也这样做。

一旦您可以公布数据并正确地从另一端读取数据,您就可以浏览源代码,看看您可以利用哪些 C 应用程序。对于 bluetoothctl 函数,您希望从以下两个文件开始:-

  • bluez-5.50/client/main.c
  • bluez-5.50/client/advertising.c

我希望这有帮助。

(*) 从蓝牙 5 开始,您可以向广告报告添加更多数据,但这是一项非常新的功能,在撰写本文时,很少有堆栈支持它。