首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用bluez从C语言中的ble设备访问电池服务的示例代码

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

Stack Overflow用户
提问于 2017-03-15 23:16:02
回答 2查看 3.7K关注 0票数 2

我有一个ble设备,它提供电池状态作为电池服务。我需要从我的ble设备读取电池信息,使用C编程语言从linux使用bluez。我在任何地方都找不到一个合适的例子来实现这一目的,即使有经典蓝牙的例子。我可以使用示例代码here来检测我的ble设备。如何连接到我的设备(扫描后获得设备地址)?如何向我的设备请求电池服务(我知道电池服务的服务句柄)?需要示例代码。

EN

回答 2

Stack Overflow用户

发布于 2017-03-22 04:53:09

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

  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. 您需要执行characteristic discovery来查找特征句柄,因为您知道UUID。如果您的设备使用采用的电池服务,则您要查找的特征是2A19。特征发现的代码可以在gatttool.c上找到,网址是:-

指针静态gboolean特征(

user_data) {...}

知道了该句柄后,您可以继续读取特征值。此操作的代码可在gatttool.c中找到,网址为:-

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

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

静态无效char_read_by_uuid_cb(guint8状态,常量guint8 *pdu,guint16 plen,gpointer user_data)

如果您是BlueZ的新手,我建议您从BlueZ command line tools开始。这将帮助您更多地了解源代码中发生的事情。要通过命令行工具实现您想要的功能,您只需:-

代码语言:javascript
运行
复制
- 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应替换为电池服务的设备地址。

我希望这能帮到你。

票数 3
EN

Stack Overflow用户

发布于 2019-03-06 01:26:28

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42813790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档