示例代码使用Bluez从C中的BLE设备访问电池服务



我有一个BLE设备,该设备可作为电池服务提供电池状态。我需要使用Bluez的Linux使用C编程语言从我的BLE设备中读取电池信息。即使有经典蓝牙的例子,我也无法在任何地方看到一个适当的示例。我可以在此处使用示例代码检测BLE设备。如何连接到设备(扫描后我具有设备地址)?如何向设备请求电池服务(我知道电池服务的服务手柄)?期望示例代码。

我没有示例代码,但我可以指向您的源代码类似于您所做的。要阅读电池服务,您需要以下步骤: -

  1. 如您所提到的,扫描并检测您要寻找的地址。这也可以在hcitool.c中找到: -

静态void cmd_lescan(int dev_id,int argc,char ** argv){...}

  1. 找到设备后,连接到设备。可以在hcitool.c上找到它的来源: -

静态void cmd_lecc(int dev_id,int argc,char ** argv) {...}

  1. 您需要进行特征发现以寻找特征手柄,因为您知道UUID。如果您的设备正在使用采用的电池服务,则您正在寻找的特征为2A19。特征发现的代码可以在gatttool.c上找到: -

静态gboolean特性(gpointer user_data){...}

  1. 知道句柄,然后进行读取特征值。该代码可以在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示例读取电池级别。

最新更新