2014/10/06


感謝鋼鐵人實作聯盟阿立的帶領.

這篇筆記純就記錄每次研究會的進展或心得, 萊恩大兵對 BLE 4.0 還所知不多, 寫出來的東西可能會比較沒系統一點. XD.



前幾回沒跟上的, 可以看這幾篇文來知道大概.

筆記, CC2540 Bluetooth Low Energy, (1) IAR 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (3) SimpleBLEPeripheral 簡單介紹 (Bluetooth, CC2540)
* 筆記, CC2540 Bluetooth Low Energy, (4) 在智慧手機上執行範例程式 (Bluetooth, CC2540)

總之, 萊恩大兵決定拿 iBeacon 當第一個題目, 就往這方向鑽研進去了.

[什麼是 iBeacon?]

網路上有很多文章, 例如這篇, 有說明 iBeacon 的概念與應用. 不過, 最快有感的方法, 萊恩大兵認為, 就是找一些現成的 app 來摸一摸用一用, 保證馬上熟悉 iBeacon 到底是什麼東東.

Locate Beacon 的執行畫面


推薦 Locate Beacon (iOS app), 它可以偵測預設名單裡的 iBeacon 訊號, 也可以把 iDevice 變成 iBeacon 訊號發送器.






從 Locate Beacon 擷圖可以看出來, iBeacon 訊號裡面包含的資訊主要有:





* UUID
這是一個 32 碼的字串, 會被記錄在對應的 app 裡, 也就是所謂 app "認得的" iBeacon 識別資訊. 像是 "E2C56DB5-DFFB-4802-B060-D0F5A71096E0" 就是蘋果本家的 iBeacon UUID.

* Major 和 Minor
Major 和 Minor 是用來做虛擬分類的. 想像一個場景, 例如百貨公司, 全部樓層, 甚至各專櫃, 全部都裝設有 iBeacon 發訊器. 這些 iBeacon 發訊器都會發射一樣的 UUID, 訊號滿天飛. 那 app 要怎麼區別誰是誰呢? 這時 Major 與 Minor 兩個值就派上用場了. 可以先約定好, Major 代表樓層, Minor 代表專櫃. (Major=5, Minor=3) 就代表五樓第3號專櫃發送出來的 iBeacon 訊號.

* TX Power
iBeacon 是用訊號強弱 (RSSI) 來判斷距離的遠近. TX Power 值是指, 在一公尺的距離, 偵測到的訊號強度值. 話說, 由 RSSI 值來推斷距離, 會受很多外力影響. iBeacon 規格是把距離分為遠(Far), 中(Near), 近(Immediate) 三個層級的概念, 比較實際一點. 那些能很精確抓距離的 app, 準不準就僅供參考了.

UUID, Major, Minor, TX Power 的詳細說明, 可以參考這篇文章.

[自己動手 build 一組來]

* iBeacon 訊號發送器
用 CC2540 開發板, 搭配無錫谷雨的 SimpleBLEPeripheral_ibeacon 專案來編譯, 燒錄軔體之後, 就是一個 iBeacon 訊號發送器了. 頂多改一下 struct advertData[] 裡面的 UUID, Major, Minor 預設值即可.

* 可偵測 iBeacon 訊號的 iOS app 
iOS app 這邊比較麻煩一點. 萊恩大兵找到一個 iBeacon Template 示範專案 (Tutorial: iBeacon App Development with CoreLocation on Apple iOS 7/8, Github: ibeacon-tutorial), 照著步驟依樣畫葫蘆是可以生出一個能偵測 iBeacon 訊號的 iOS app.

但是, 它有個嚴重缺陷~ 它不會送出 iDevice 的通知訊息. 萊恩大兵花了一些時間 debug ( XCode 的 log 裡面, 一直會有這句 user info = (null)} with an alert but haven't received permission from the user to display alerts), 才在 Stack Overflow 找到解, 得再加上一段碼式碼去啟用 local notification 的功能. 詳細可參考這兩篇文章 (Ask for User Permission to Receive UILocalNotifications in iOS 8 和 Notifications in iOS 8 Part 1 (Using Swift) - What is new?).

這邊萊恩大兵就不貼專案程式碼了. 



到這邊就有個雛形了. 讓 CC2540 做 iBeacon 發訊器, iPhone app 來收訊, 真的會收到 iBeacon 的通知吔.




這週的進度差不多到這, 雖然有些成果, 但也遇到一些問題. 如果路過的朋友有人知道解答或線索, 歡迎再回饋給萊恩大兵.

(1) UUID 這串字碼, 是自行手動叫用 API 產製一份, 就直接可以拿來用嗎? 需不需要去什麼地方註冊並公開? 會不會和別人重覆呢?

(2) 在 iOS 裡, init 一個 CLBeaconRegion 物件時, 還需要給定一個 identifier 字串. 這字串到底有什麼用途? 尤其萊恩大兵從 Github 上找到的一些專案原始碼, 像是 AirLocateiBeacon Demo (iOS 7 Tutorial Series: Core Location Beacons), 似乎都是用 identifier 來做 iBeacon 識別. 萊恩大兵還沒成功使用這些 app 來偵測 iBeacon 訊號.


[萊恩大兵的其它文章]

自製大四軸

自製大四軸, 零組件篇, (1) 遙控器 (Drone, Quadcopter, Futaba, Maker, Arduino, Animatronic Eye)
自製大四軸, 零組件篇, (2) 飛控板 (Drone, Quadcopter, MultiWii, Arduino, Futaba, Maker)
自製大四軸, 零組件篇, (3) 自行雷切木質機架 (Drone, Quadcopter, Maker, Laser Cut)

自動報球速的棒球


CC2540 Bluetooth Low Energy
筆記, CC2540 Bluetooth Low Energy, (1) 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (3) SimpleBLEPeripheral 簡單介紹 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (4) 在智慧手機上執行範例程式 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (5) 偵測與發送 iBeacon 訊號 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 發訊器 x 防丟器 (Bluetooth, CC2540, iBeacon)
實作, iBeacon 尋寶遊戲 (Bluetooth, CC2540, iBeacon, iOS app)
實作, BLE + iOS app, 遙控燈泡君 (Bluetooth, CC2540, iOS app)
做實驗, 用 iBeacon 做自動控制的可行性 (Bluetooth, iBeacon, CC2540, Automation, URL Scheme, iOS app)

藍色小鋪一起來做

藍色小鋪一起來做, 用 beacon 控制開關的枱燈
藍色小鋪一起來做, 講解 BLE CC2540 UART 通訊範例程式 (Bluetooth, CC2540, UART)
藍色小鋪一起來做, 藍牙枱燈專案實作 (上) (Bluetooth, CC2540)

小惡魔 無線溫度感測器

108 大眼仔
Plot Clock


實作, 電容感應音樂樹

1 意見:

張貼留言