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

时间:2017-03-15 15:16:02

标签: c bluetooth-lowenergy bluez gatt hci

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

2 个答案:

答案 0 :(得分:3)

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

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

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

    1. 找到您的设备后,连接即可。可以在hcitool.c,在: -
    2. 找到此源
        

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

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

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

        1. 了解句柄,然后继续读取特征值。可以在gatttool.c中找到此代码: -
        2.   

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

          我希望这会有所帮助。

答案 1 :(得分:0)

大多数示例建议您从Bluez中提取源代码以读取GATT特征。 gattlib(C库)不需要您这样做,它是基于Bluez构建的。

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

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