使用bluez从C语言中的ble设备访问电池服务的示例代码

问题描述 投票:2回答:2

我有一个设备,它提供电池状态作为电池服务。我需要使用bluez使用Linux编程语言从我的设备中读取电池信息。即使有经典蓝牙的例子,我也无法在任何地方找到适当的例子。我能够使用示例代码here检测我的ble设备。如何连接到我的设备(扫描后我有设备地址)?如何向我的设备请求电池服务(我知道电池服务的服务句柄)?期待示例代码。

c bluetooth-lowenergy bluez gatt hci
2个回答
3
投票

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

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

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

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

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

  1. 然后,您需要执行特征发现以查找特征句柄,因为您知道UUID。如果您的设备使用所采用的电池服务,那么您正在寻找的特性是2A19。特色发现的代码可以在gatttool.c找到,在: -

static gboolean characteristics(gpointer user_data){...}

  1. 知道了句柄,然后继续阅读特征值。这个代码可以在gatttool.c找到,在: -

static void char_read_cb(guint8 status,const guint8 * pdu,guint16 plen,gpointer user_data){...}

或者,如果您已经知道,则可以使用特征UUID读取特征数据。这可以在gatttool.c找到,在: -

static void char_read_by_uuid_cb(guint8 status,const guint8 * pdu,guint16 plen,gpointer user_data)

如果您是BlueZ的新手,我建议从BlueZ command line tools开始。这将有助于您更深入地了解源代码中的内容。要通过命令行工具实现您想要的功能,您只需: -

- 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应使用电池服务替换为设备地址。

我希望这有帮助。


0
投票

大多数示例都建议您从Bluez中提取源代码以读取GATT特征。 gattlib(C库)不要求你这样做,并建立在Bluez之上。

该库有两个可用于读取电池电量的示例。

您可以使用订阅电池级别通知的notification example。或者您可以使用read_write example来读取电池电量。

© www.soinside.com 2019 - 2024. All rights reserved.