[筆記] 藍牙模組 設定 iBeacon 功能

從網路上採買了含有 TI CC2541 晶片的藍牙模組 (HM-10),它整合了 iBeacon 的功能 (是不是只要 Bluetooth Low Energy 的藍牙晶片,就一定會提供有 iBeacon 的功能,差別只在於模組是否有提供設定指令)

這塊簡便的藍牙模組打算拿來實作防丟器,Ex: 放在鑰匙圈上、放在小孩身上、放在車子上 (對停車場陌生,忘了停在哪裡?)

需要準備的工具:

  1. 藍牙模組 (我用的是 HM-10,還可以選用 HM-11 體積更小)
  2. Arduino UNO Rev.3 (或是 USB to TTL)
  3. 杜邦線
  4. 焊接工具

首先把接腳 (傳送、接收、電源、接地等四個接腳)都焊上杜邦線。IMG_20160407_153711

這個過程真的很折磨人,焊接點間距非常的小,又很怕被燙到,手就一直抖。焊完之後覺得,如果真的有常常要動手做的話,倒是可以考慮買個焊接平台。

[簡中版] Bluetooth 4.0 規格及指令說明 V540 (706 downloads) [英文版] Bluetooth 4.0 規格及指令說明 V540 (210 downloads)

焊接完成後就直接再接上 Ardunio (分別是 Pin 10 – 接收, Pin 9 – 傳送, 3.3V 電源供應, GND 地線)

IMG_20160407_153431

利用 Arduino IDE 來做參數設定 (如果有 USB to TTL 的話,也可以直接使用,但因為手邊沒有 USB to TTL,只有 Arduino 所以就直接利用它來設定參數)。

要利用 Software Series Monitor 的功能來進行設定,所以得要讓 Arduino 具有轉收、轉發的功能。程式碼很簡短:

啟用 Arduino 提供的 Software Series Monitor。先設定要監控的 COM Port (如果沒有出現相對應的 COM Port,就需要安裝驅動程式;在 Arduino 的安裝目錄下,可以找到驅動程式)

HM_10_beacon_setting_Arduino_01

開啟「序列埠監控視窗」

HM_10_beacon_setting_Arduino_02

開啟後就會看到 BT is Ready 的訊息 (這個是程式裡面的設定 Serial.print(“BT is Ready”);)

直接在最上面輸入 AT (然後按下 Enter 或是 「傳送」) 指令就會送到模牙模組上;接線沒有任何錯誤的狀況下,應該會收到 OK 的回應訊息。

順便看一下這個模組的版本

AT+VERR?

回應是 HMSoft V540,表示我的韌體版本是 540;是目前最新的。

HM_10_beacon_setting_Arduino_03

開始設定 iBeacon 功能

相關的設定可以參考這篇文章

Using HM-10 BLE Modules as Low-Cost iBeacons (943 downloads)

(一) 設回原廠初始值

如果都沒有使用過,這行可以忽略

AT+RENEW

(二) 重開藍牙模組

重開後,才會將最新的設定結果啟用

AT+RESET

(三) 啟用 iBeacon 功能

AT+IBEA1

(四) 設定 UUID

HM-10 預設的 UUID 是 74278BDAB64445208F0C720EAF059935,設定的指令分成 4 個部份 (UUID 則是可以讓使用者自行定義):

AT+IBE074278BDA

AT+IBE1B6444520

AT+IBE28F0C720E

AT+IBE3AF059935

(五) 設定 Major

AT+MARJ0x4134

(六) 設定 Minor

AT+MINO0x4134

(七) 設定 iBeacon 廣播訊息的間隔時間

間隔時間是固定的,廠商依照 Apple 制定的規格,再加上一些額外可以挑選的規格。我們就依照需求設定間隔時間。

0 – 100ms,       1 – 152.5 ms,   2 – 211.25 ms, 3 – 318.75 ms
4 – 417.5 ms,   5 – 546.25 ms, 6 – 760 ms , 7 – 852.5 ms
8 – 1022.5 ms,  9 – 1285 ms,   A – 2000ms , B – 3000ms
C – 4000ms,     D – 5000ms,    E – 6000ms , F – 7000ms

AT+ADVI0

間隔時間越短,也越耗費電力;但訊號會接收的比較即時。我在猜想許多網路上使用防丟器產品沒有覺得很棒,可能跟間隔時間有些關係。但要取得平衡真的不太容易。

(八) 設定它的名稱

AT+NAMEhomekeys

(九) 部署模式

設定成 broadcast-only 可以節省電力

AT+DELO2

(十) 設定廣播模式

設定成 Advertising-Only 可以節省電力

AT+ADTY3

(十一) 設定自動睡眠

自動睡眠可以節省更多電力,但是如果要持續監控的狀態下就不適用。

0 – 自動睡眠, 1 – 永續開啟

AT+PWRM0

(十二) 重開藍牙模組

重開後,才會將最新的設定結果啟用

AT+RESET

測試 iBeacon 囉 ~

手邊只有 Android 手機,版本是 4.4,到 play 商店裡面找 Locate Beacon 並且安裝。

HM_10_beacon_setting_Android_02

使用前記得先把藍牙功能打開。

HM_10_beacon_setting_Android_01

畫面很簡單,直接下 Locate Beacons

HM_10_beacon_setting_Android_03

App 開始掃描附近的 Beacon

HM_10_beacon_setting_Android_04

抓到了 ~ distance 的地方就是表示預估設備間的距離

HM_10_beacon_setting_Android_05 HM_10_beacon_setting_Android_06 HM_10_beacon_setting_Android_07

接下來還有好多工作需要完成:

  • Android App 開發
  • 電池模組 (3V 鈕扣電池, 電池座)
  • 外殼 (LEGO ?)
  • 參數設定測試
    • TxPower
    • Power Save Setting …

 

17 comments

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *