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

Is it possible to send data with BLE broadcast mode?

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

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

我对这个话题做了很多研究,但我只能找到关于信标的答案,这些对象不能为我的项目发送有用的数据(比如字符串),或者 BLE 设备必须相互连接到 send/receive数据。

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

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

  • Broadcaster - 一种只发布数据的设备。
  • 外设 - 一种广播数据但也可以被远程设备连接的设备。
  • Observer - 一种只扫描数据的设备。
  • Central - 可以扫描数据并连接到数据的设备。

当 BLE 刚推出时,beacons/sensors(例如心率、温度计)占据了前两个类别,phones/computers 占据了另外两个类别。但是,BLE 此后不断发展,现在许多设备都支持所有四种角色,并且一台设备可以同时以一种或多种角色运行。

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

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

在broadcaster/peripheral

#bluetoothctl
[bluetooth]menu advertise
[bluetooth]advertise data 00 00 00 00
[bluetooth]back
[bluetooth]advertise on

在observer/central

#bluetoothctl
[bluetooth]scan on

我正在使用 BlueZ version 5.50,我建议您也这样做。

一旦您可以播发数据并正确地从另一端读取数据,您就可以浏览源代码并查看可以对您的 C 应用程序利用的内容。对于 bluetoothctl 功能,您希望从以下两个文件开始:-

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

希望对您有所帮助。

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