前言

Beacon 是具有藍芽連線的小裝置,通常裡面的格式為 Apple 的 iBeacon 或是 Google 的 Eddystone . 一般而言,要開發 Beacon 的話比較好的方式就是架設一個 Raspberry Pi 然後在裡面灌起來相關的藍芽模擬.但是如果你想要在 MacOSX 上面寫 Beacon 模擬程式的話,大部分的人都會使用 Bleno 一套由 nodejs 開發出來的藍芽套件. 支援夠好又熱門.

Golang 是很方便的語言,不論是寫在後端或是系統上來說.當然我也會想說來寫寫一些測試 beacon 範例的. 三年前,我曾經寫了這篇文章 Golang BLE Eddystone 初體驗(包含Beacon模擬器) 的文章.但是事隔三年之後,由於 Mac OSX 的系統更新,整個部分已經無法正常運行,需要做修改.

在 Golang 上面要使用藍牙的相關工具,大部分人都是使用 paypal 所開源的 PayPal/gatt ,但是那個套件兩年沒有維護了.以下會簡單記錄一下出了哪些問題.

tldr: PayPal/gatt 已經沒有在維護這個軟體.. Golang 要寫藍牙請用 https://github.com/go-ble/ble

Mac OSX 改了什麼

首先 Mac 在 High Sierra 上面將藍牙設備名稱改名字(為何要這樣做?) 原本的名字是 com.apple.blued 但是到了 High Sierra 就改成 com.apple.bluetoothd

這樣導致了 PayPal/gatt 的 golang 套件無法順利運行.其實在 nodejs 的套件上面馬上就跟上了這個部分( nodejs bleno fixed )

Paypal/GATT 已經沒有在維護

回過頭來的老問題,這些問題其實不能解決也不難維護.但是 PayPal/gatt 由於沒有在維護了.其實相當的困難繼續開發,而且許多 fork 出來的專案似乎也沒有比較解決大部分的問題.

換 go-ble/ble

換過去整個流程還算簡單, go-ble 提供 Advertisement 跟 iBeaconAdvertisement.方便提供相關的轉換.

參考

  1. paypal/gatt issue: Examples issue “Go pointer to Go pointer”
    1. ` GODEBUG=cgocheck=0 ./server`
  2. currantlabs/ble issue: Not working on macOS High Sierra
    1. Unhandled event: xpc.Dict{"kCBMsgId":4, "kCBMsgArgs":xpc.Dict{"kCBMsgArgState":5}}
  3. Tracking macOS High Sierra Support

Buy Me A Coffee

Evan

Attitude is everything