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

时间:2018-11-16 16:45:50

标签: c bluetooth-lowenergy broadcast

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

  • Broadcaster-一种仅发布数据的设备。
  • 外围设备-一种可以发布数据但也可以通过远程设备连接的设备。
  • 观察者-一种仅扫描数据的设备。
  • 中央-可以扫描数据并连接到它们的设备。

首次引入BLE时,信标/传感器(例如心率,温度计)占据了前两个类别,而电话/计算机占据了另外两个类别。但是,BLE从此发展起来,现在许多设备都支持这四个角色,并且一个设备可以同时以一个或多个角色运行。

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

关于可编程性,我建议在将要发布的设备和将要读取数据的设备上均以BlueZ命令开头。您可以使用Bluetoothctl命令执行以下操作:-

在广播公司/外围设备上

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

在观察者/中央

#bluetoothctl
[bluetooth]scan on

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

一旦您可以公布数据并正确地从另一端读取数据,就可以遍历源代码,并查看可以对C应用程序使用的内容。对于bluetoothctl函数,您要从以下两个文件开始:-

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

我希望这会有所帮助。

(*)从Bluetooth 5开始,您可以添加更多数据来发布报告,但是,这是一项非常新的功能,截至撰写本文时,很少有堆栈支持该功能。