2014-12-27

如何存取 Bluetooth Low Energy 週邊設備

阿舍有跟朋友買了一支二手全新的 CC2541 ( SensorTag),因為它有一堆的感應器在上面,一支可以搞定好幾支,可以讓阿舍不用在麵包板上插上一堆的感應器,算是滿方便的,不過,為什麼會這滿方便和省事呢?就因為這個 SensorTag 是利用藍牙的 BLE ( Bluetooth Low Energy) 技術來傳資料的,所以,當然不用插在麵包板囉 !


 一台手機可同時連結多個 BLE 週邊 ( figure libelium.com )

其實,阿舍拿到這個 SensorTag 之後,並沒有馬上拿來玩玩,是因為最近有要用到地磁感應器( Magnetometer ) 來當指南針用的時候才當到這個 SensorTag 的, 阿舍是要用 Raspberry Pi 來讀取 SensorTag 的資料的,所以,就不像寫 Android 或 iOS 的 App 那麼方便,可以直接用 Ti 提供的 API 和範例來寫哩 ! 因此,阿舍就花時間來研究了一下囉 !

原來,像 SnesorTag 這類有支援 GATT Profile 的 BLE 週邊,本身就會有一個 GATT Server 在裡面,所以,只要連線成功後,也就可以利用 GATT Client 來向 GATT Server 下指令,進行資料讀寫與設定的動作哩 ! 而在 Raspberry Pi 上安裝的 BlueZ 就有內含一個叫做 gatttool 的GATT Client 工具可用。

不過,阿舍是要讀取這些資料來做反應的,因此,阿舍不想要是透過 gatttool 這個工具來讀取之後再處理 ( 實際上,是有人採用這種做法的哩 ! 請參考這個專案),所以,阿舍就去找了一下,有沒有現成的 GATT Client 程式庫可以用哩 !

結果,還不錯,阿舍以 Node.js 、Golang 和 Python 這三種比較常被用在 Raspberry PI 來控制硬體的語言來搜尋,分別找到下面這幾套,不過,除了 node.js 的版本之外,其它二種語言的版本都有提到目前都還不是穩定版哩 !

  • Node.js 的 noble  - 這個在安裝時會需要用 BlueZ 和相關的程式庫
  • Golang 的 Gatt - PayPal 開發中,還不是穩定版本
  • Python 的 Bluepy - 直接用 Python 來使用 BlueZ 5.4 的功能,但是,還有些功能沒實作出來 

所以,如果你有想要用 PC 或像 Raspberry Pi 的開發板來存取 BLE 的週邊設備的話,就可以考慮用上面這三套來開發哩 !  疑 .... ?  阿舍,你是不是忘了 C 語言了哩 ! 寫這類的程式,怎麼會沒有人用 C 呢 ?  .... 喔 ! 因為 C 當然就是直接參考或引用 BluZ 裡的 gatttool 來用就可以囉 !

BLE 的技術讓一台主控端 (Central Role ) 的設備可以不需配對就可以連接多台 BLE 週邊設備,而且,這些 BLE 設備通常都是用一顆水銀電池就可以撐一年的,在物聯網的領域裡,很適合用在感應器設備上哩 !

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

4 則留言 :

Roy Lee 提到...

Go gatt 部份做了不小的更新,目前已支援 Server (peripheral) 以及 Client (central)
基本的 API 同時支援 Linux / OS X,不過要進一步開發基於 Linux 平台的專案或產品,一定會用到 Linux-specific 的API 或 Option。

有空的話可以再試試,有發現問題,歡迎開 issues 或送 patch :-)

Arthur 提到...

Hello,

收到,多謝 !
阿舍有空再來試試囉 ! ... ^^=

Unknown 提到...

不好意思,請問一下,因為本人有在做android ble app,需要同時連結多個Ti 的晶片(使用cc2541),但是一直失敗,也就是gattconnect()只能連接一個,不能同時兩個,後來我發現很多人反映似乎google android 4.0 目前還無法支援一對多以及當slave用,不知道您這篇所說的一對多詳細情況是如何?

Arthur 提到...

Hello,

阿舍這篇提的是用 PC 端來當主控端,關於 Android 的部份,阿舍就不熟了哩 ....

張貼留言

歡迎留言提問和討論 .... 😁