使用 BLE 低功耗藍牙

概觀

開發者可以透過 LBLE 程式庫來存取 LinkIt 7697 上面的低功耗藍牙功能,並將 LinkIt 7697 作為周邊裝置或主控裝置來使用。要注意的是,LinkIt 7697 並不支援傳統 Bluetooth 的相關 Profile 功能,比如 SPP、A2DP、AVRCP 等 Profile。

低功耗藍牙簡述

低功耗藍牙裝置可以區分為「主控(Central)」與「周邊(Peripheral)」兩種類型。比如說,像是電腦、或是手機這種主控裝置,會搜索附近的周邊裝置,並且視使用者的需求,連線到該周邊裝置,並進一步取得周邊裝置上面的各種資料。相對的,像心跳偵測器這種周邊裝置,則會發出廣播(Advertisement),好讓鄰近的主控裝置知道心跳偵測器的存在。

在周邊裝置上面所提供的資訊,統稱為屬性(attribute)。為了提供這些屬性,周邊裝置上面會運行一個支援 GATT(Generic Attribute) Profile 的伺服器(Server)。也就是說,周邊裝置是 GATT 伺服器,而主控裝置是 GATT 客戶端,由主控裝置去連接周邊裝置,就等同於是一個 GATT客戶端去連接 GATT 伺服器。

屬性可以再區分為:服務(services)資料特性(characteristics)特性描述(descriptors)。簡單的來說,一個 GATT 伺服器會提供多個服務,而每一個服務都有許多資料特性可供存取。而特性描述,則是用於描述資料特性的額外資訊。舉例來說,一個心跳偵測器上面的 GATT 伺服器,應該要提供一個「心率」服務,這個服務會提供許多資料特性,其中之一便是「心跳速率測量值」這個資料特性,而「心跳速率測量值」又有一個相關的特性描述,可讓主控裝置存取,以決定周邊裝置是否要主動通知心跳速率的變化。

為了識別不同的屬性,所有的屬性都會用 UUID(通用唯一識別碼)來識別。Bluetooth 官方有定義好一組服務的 UUID,如體重計、電池狀態、時間等,可參考此連結以及官方指定碼的列表。當然,也可以自行決定自訂服務所要使用的 UUID,在這種情況下,需要自己生成所有屬性的 UUID,並自行管理這些 UUID。

在LinkIt 7697 Arduino 安裝包裡面提供的 LBLE 程式庫,提供了下列的類別供開發者使用:

  • LBLE 類別用於初始化低功耗藍牙系統。
  • LBLECentral 類別提供了基本的主控裝置功能,比如掃描附近的周邊裝置。可接著使用 LBLEClient 類別來連接到周邊裝置。
  • LBLEPeripheral 類別提供了基本的周邊裝置功能:
    • 設定周邊裝置發出的廣播內容
    • 設定周邊裝置本身的服務與資料特性

初始化藍牙功能

要在 LinkIt 7697 上面使用藍牙之前,必須先初始化藍牙子系統。首先,需要呼叫 LBLE.begin() 來啟動藍牙子系統,然後不斷的呼叫 LBLE.ready() 來確認子系統的初始化是否已經完成。

LBLE.begin();
while(!LBLE.ready())
{
    delay(50);
}

在 LBLE 尚未初始化完成之前,不能夠使用其他的 LBLE 功能,包含主控與周邊的相關功能。

當 LBLE 初始化完成之後,開發者可以依照需求,進行下面三個操作的其中一個: