iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0
Modern Web

Web Bluetooth API 實戰:30 天打造通用 BLE 偵錯工具系列 第 3

DAY3:揭開藍芽的神秘面紗:GATT 協議與我們的第一個虛擬裝置(二)

  • 分享至 

  • xImage
  •  

昨天我們已經簡單的認識了 GATT 的基本內容,然而在後續的內容中,我們需要一個實體的 BLE裝置讓我們能夠進行操作和控制,但是市面上的 BLE裝置千百種,加上還可能會遇上不同廠家因為硬體等因素導致的各種問題,我們需要一款可以由我們隨意設定,改變的藍芽裝置。

為此我要先介紹一款好用的工具。nRF Connect for Mobile 是由藍牙晶片大廠 Nordic Semiconductor 推出的開發工具。這款免費 App 能讓你的手機化身為強大的 BLE 工具,既能作為「掃描端(Central)」去探索、連接其他裝置,也能扮演「被連端(Peripheral)」,我們今天就是要透過 nRF Connect for Mobile 來建立能自由更改設定的「被連端(Peripheral)」。

🛠️ 實作 Phase 1: 進入 GATT 伺服器設定

  1. 打開 nRF Connect App,點擊底部導覽列的「Advertiser」分頁。

  2. 點擊進入一個廣告配置 (例如 "Sample configuration"),或點擊右上角「+」新增。

  3. 在配置頁面中,向下滑動找到「Server」區塊。這裡就是我們要打造 GATT 服務的地方。

🛠️ 實作 Phase 2: 創建自定義服務

  1. 在 Server 區塊點擊「ADD SERVICE」,在彈出視窗中確認下拉選單為「Custom service」。

  2. Name: 輸入 My Iron Man Service

  3. UUID (手動生成與貼上):

    • a. 在瀏覽器打開 Online UUID Generator 並複製生成好的 UUID。

    • b. 回到 App,將這串 UUID 貼入 UUID 欄位

  4. 點擊「OK」。

  5. 點擊 My Iron Man Service 進入其內部,點擊「ADD CHARACTERISTIC」,選擇「Custom Characteristic」,並重複此步驟三次:

  • 特徵 A (唯讀):

    • Description: Read-Only Info

    • Properties: 只勾選 Read

    • Permissions: 只勾選 Read

    • Initial value: 選擇 Text (e.g. My value),並在欄位中輸入 Hello Iron Man!

    • 點擊「OK」。

  • 特徵 B (可讀寫):

    • Description: Remote Control Switch

    • Properties: 勾選 ReadWrite

    • Permissions: 勾選 ReadWrite

    • Initial value: 選擇 0x Bytes (e.g. 0300FA),並在欄位中輸入 00 (代表數值 0)。

    • 點擊「OK」。

  • 特徵 C (可訂閱):

    • Description: Live Sensor

    • Properties: 勾選 ReadNotify

    • Permissions: 勾選 Read。(Notify 通常不需要額外的寫入權限,除非需要客戶端寫入特定描述符來啟用)。

    • Initial value: 選擇 0x Bytes (e.g. 0300FA),並在欄位中輸入 19。(因為 25 的十六進位就是 19)。

    • 點擊「OK」。

這樣就建立了我們的第一個虛擬 BLE 裝置,但是看到這邊,不知道你會不會想一個問題,UUID 有著 128 位元碼的長度,如果每家廠家都根據自己的喜好,隨意設定 UUID的話,豈不是每看到一家廠商就要去查詢他的 UUID 所代表的定義了呢?

其實這個問題已有解了,不知道你還記不記得,我們昨天介紹 UUID 時,有提到 UUID 分為兩種,除了上面我們實作的自定義 UUID,還有另一種由藍芽聯盟定義的標準 UUID

沒錯!為了解決這個混亂問題,藍牙技術聯盟 (SIG) 制定了一系列「官方標準 UUID」。這些 UUID 用於所有通用的功能(如心率、血壓、電池電量等),確保不同廠牌的裝置能互相溝通。

它們通常是以 16 位元短碼來表示,例如「電池服務」的 UUID 就是 0x180F。這個短碼會被自動代入一組共用的「藍牙基礎 UUID」(0000xxxx-0000-1000-8000-00805f9b34fb) 中,從而形成一個完整的 128 位元位址。

因此,任何 App 只要看到 0x180F 這個 UUID,就能立刻辨識出「啊!這是標準的電池服務」,並知道該如何與它互動。

🛠️ 實作 Phase 3: 手動創建標準電池服務

  1. 回到 Server 設定的主畫面,再次點擊「ADD SERVICE」。

  2. 在彈出的視窗中,下拉選單依然選擇「Custom service」。

  3. Name: 輸入 Battery Service

  4. UUID: 複製貼上官方的電池服務 UUID: 0000180F-0000-1000-8000-00805f9b34fb

  5. 點擊「OK」。

  6. **新增標準特徵:

    • 點擊剛建立的 Battery Service 進入其內部。

    • 點擊「ADD CHARACTERISTIC」,選擇「Custom Characteristic」。

    • Description: 輸入 Battery Level

    • UUID: 複製貼上電池電量的官方 UUID: 00002A19-0000-1000-8000-00805f9b34fb

    • Properties: 根據官方規範,手動勾選 ReadNotify

    • Permissions: 對應 Properties,手動勾選 Read

    • Initial value:

      • 選擇 0x Bytes (e.g. 0300FA)

      • 在欄位中輸入 62。(因為我們設定的電量是 98,而 98 的十六進位就是 62)。

    • 點擊「OK」。

後話

今天我們透過使用nRF Connect for Mobile來實際建立一個GATT服務,後續等到實際需要連接藍芽的時候我們就可以啟用這個BLE裝置來進行模擬,明天我們會先來講解簡單的JS語法入門。
文章的最後,感謝能看到這裡的你,在這邊祝你早安、午安、晚安,我們明天見。


上一篇
DAY2:揭開藍芽的神秘面紗:GATT 協議與我們的第一個虛擬裝置(一)
系列文
Web Bluetooth API 實戰:30 天打造通用 BLE 偵錯工具3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言