我有一个BLE设备,该设备可作为电池服务提供电池状态。我需要使用Bluez的Linux使用C编程语言从我的BLE设备中读取电池信息。即使有经典蓝牙的例子,我也无法在任何地方看到一个适当的示例。我可以在此处使用示例代码检测BLE设备。如何连接到设备(扫描后我具有设备地址)?如何向设备请求电池服务(我知道电池服务的服务手柄)?期望示例代码。
我没有示例代码,但我可以指向您的源代码类似于您所做的。要阅读电池服务,您需要以下步骤: -
- 如您所提到的,扫描并检测您要寻找的地址。这也可以在hcitool.c中找到: -
静态void cmd_lescan(int dev_id,int argc,char ** argv){...}
- 找到设备后,连接到设备。可以在hcitool.c上找到它的来源: -
静态void cmd_lecc(int dev_id,int argc,char ** argv) {...}
- 您需要进行特征发现以寻找特征手柄,因为您知道UUID。如果您的设备正在使用采用的电池服务,则您正在寻找的特征为2A19。特征发现的代码可以在gatttool.c上找到: -
静态gboolean特性(gpointer user_data){...}
- 知道句柄,然后进行读取特征值。该代码可以在gatttool.c中找到: -
静态void char_read_cb(guint8状态,const guint8 *pdu,guint16 plen,gpointer user_data){...}
另外,如果您已经知道,则可以使用特征UUID读取特征数据。这可以在gatttool.c中找到: -
静态void char_read_by_uuid_cb(guint8状态,const guint8 *pdu, guint16 plen,gpointer user_data)
如果您是Bluez的新手,我建议您从Bluez命令行工具开始。这将有助于您更多地了解源头中发生的事情。通过只需要的命令行工具来实现所需的目标: -
- hcitool lescan
- gatttool -b 00:11:22:33:44:55 --characteristics
- gatttool -b 00:11:22:33:44:55 --char-read --uuid=0x2A19
其中00:11:22:33:44:55应用电池服务代替设备地址。
我希望这会有所帮助。
大多数示例建议您从Bluez提取源代码以读取GATT特征。gattlib(C-library)不需要您这样做,而是在Bluez的顶部建造的。
库有两个示例,您可以用于读取电池级别。
您可以使用订阅电池级通知的notification
示例。或者,您可以使用read_write
示例读取电池级别。