簡體   English   中英

使用bluez從C中的ble設備訪問電池服務的示例代碼

[英]Example code to access battery service from ble device in C using bluez

我有一個可以將電池狀態作為電池服務的ble設備。我需要使用bluez從Linux使用C編程語言從ble設備讀取電池信息。 盡管有經典藍牙的示例,但我在任何地方都看不到合適的示例。 我可以使用此處的示例代碼檢測ble設備。 如何連接到我的設備(掃描后便擁有設備地址)? 我如何向設備請求電池服務(我知道電池服務的服務句柄)? 期待示例代碼。

我沒有示例代碼,但是我可以指出與您類似的源代碼。 要閱讀電池服務,您需要執行以下步驟:-

  1. 如前所述, 掃描並檢測所需的地址。 也可以在hcitool.c中找到:

靜態無效cmd_lescan(int dev_id,int argc,char ** argv){...}

  1. 找到設備后, 連接到設備。 可以在hcitool.c上找到其來源:

靜態無效cmd_lecc(int dev_id,int argc,char ** argv){...}

  1. 由於您知道UUID,因此您需要進行特征發現以查找特征句柄。 如果您的設備正在使用采用的電池服務,那么您要尋找的特性是2A19 可在gatttool.c處找到特征發現的代碼,該地址為:-

靜態gboolean特征(gpointer user_data){...}

  1. 了解了手柄后,您便可以讀取特征值 可以在gatttool.c中找到此代碼:

靜態無效char_read_cb(guint8狀態,const guint8 * pdu,guint16 plen,gpointer user_data){...}

另外,如果您已經知道特性數據,則可以使用特性UUID讀取特性數據。 可以在gatttool.c中找到:

靜態無效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庫)不需要您這樣做,它是基於Bluez構建的。

該庫有兩個示例可用於讀取電池電量。

您可以使用訂閱電池電量通知的notification示例 或者,您可以使用read_write示例讀取電池電量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM