感謝鋼鐵人實作聯盟阿立的帶領.
這篇筆記純就記錄每次研究會的進展或心得, 萊恩大兵對 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 上找到的一些專案原始碼, 像是 AirLocate 或 iBeacon 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)
自動報球速的棒球
* 自動報球速的棒球, (1) 概念與雛形 (Arduino, MPU-6050, HC-06)
* 自動報球速的棒球, (2) 第一版試作品 (Arduino, NanoWii, microSD, MPU6050)
* 自動報球速的棒球, (3) 拋接實驗的數據分析 (Arduino, NanoWii, microSD, MPU6050)
* 自動報球速的棒球, (2) 第一版試作品 (Arduino, NanoWii, microSD, MPU6050)
* 自動報球速的棒球, (3) 拋接實驗的數據分析 (Arduino, NanoWii, microSD, MPU6050)
* 做實驗, 寫入 EEPROM 的速度能否跟得上 MPU6050 的數據產出? (Arduino, MPU-6050, EEPROM)
* 筆記, NanoWii, 一些經驗分享 (Arduino, NanoWii, MPU6050)
* Murmur, 很小很強大的穿戴式裝置模組 (Realtag, Bluetooth, CC2540, MPU6050, BMP180)
* 筆記, NanoWii, 一些經驗分享 (Arduino, NanoWii, MPU6050)
* Murmur, 很小很強大的穿戴式裝置模組 (Realtag, Bluetooth, CC2540, MPU6050, BMP180)
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)
* 筆記, 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)
小惡魔 無線溫度感測器
* 小惡魔, (1) 溫度感測 + 物聯網 (Electric Imp, Xively, LM35, Internet of Things)
* 小惡魔, (2) 溫度感測 + 物聯網 + 事件觸發 (Electric Imp, Xively, LM35, Internet of Things)
* 小惡魔, (2) 溫度感測 + 物聯網 + 事件觸發 (Electric Imp, Xively, LM35, Internet of Things)
108 大眼仔
Plot Clock
* 實作, 電容感應音樂樹
* 修理, 樂高馬達 8883 (LEGO 8883 Power Functions M-Motor)
* 修理, (part 2) 樂高馬達 8883 (LEGO 8883 Power Functions M-Motor)
* 修理, 液晶螢幕 (LCD)
* 108 大眼仔, 初登場 (Arduino, SG-90, Maker Faire Taipei 2014, Animatronic Eye)
* 108 大眼仔, 進化, (1) 專屬程式庫 (Arduino, SG90, Animatronic Eye)
* 108 大眼仔, 進化, (2) 當我們串在一起 (Arduino, SG90, Animatronic Eye, I2C)
* 108 大眼仔, 進化, (3) 檢查 Gmail 信箱 (Arduino, SG90, Animatronic Eye, Temboo)
* 108 大眼仔, 進化, (4) 看著我的臉 (Arduino, SG90, Animatronic Eye, OpenCV, Processing, I2C)
* 108 大眼仔, 進化, (5) 迎著人來人往 (Arduino, SG90, Animatronic Eye, OpenCV, Processing, I2C)
* 108 大眼仔, 檢討筆記, 我要一個打十個 (Arduino, SG90, Animatronic Eye)
* 108 大眼仔, 進化, (1) 專屬程式庫 (Arduino, SG90, Animatronic Eye)
* 108 大眼仔, 進化, (2) 當我們串在一起 (Arduino, SG90, Animatronic Eye, I2C)
* 108 大眼仔, 進化, (3) 檢查 Gmail 信箱 (Arduino, SG90, Animatronic Eye, Temboo)
* 108 大眼仔, 進化, (4) 看著我的臉 (Arduino, SG90, Animatronic Eye, OpenCV, Processing, I2C)
* 108 大眼仔, 進化, (5) 迎著人來人往 (Arduino, SG90, Animatronic Eye, OpenCV, Processing, I2C)
* 108 大眼仔, 檢討筆記, 我要一個打十個 (Arduino, SG90, Animatronic Eye)
* Murmur, 有趣的零件售價
* Murmur, Arduino 保險桿 (Arduino, bumper, 3D printing)
* Murmur, 許一個 maker 分享網站
* Murmur, 物聯網新概念- The Physical Web (Internet of Things, The Physical Web)
* Murmur, 關於 HP Sprout 的一點想法
* Murmur, 說中文很難嗎? (Toy, Reed Switch, Voice Recorder Module)
* Murmur, 停車場自動繳費機的兩三事 (Kiosk)
* Murmur, 為什麼是 WiFi? 關於小米空氣清淨器的一點看法.. (Internet of Things)
* Murmur, 機器人是時尚元素? (Robot, Fashion)
* Murmur, Arduino 保險桿 (Arduino, bumper, 3D printing)
* Murmur, 許一個 maker 分享網站
* Murmur, 物聯網新概念- The Physical Web (Internet of Things, The Physical Web)
* Murmur, 關於 HP Sprout 的一點想法
* Murmur, 說中文很難嗎? (Toy, Reed Switch, Voice Recorder Module)
* Murmur, 停車場自動繳費機的兩三事 (Kiosk)
* Murmur, 為什麼是 WiFi? 關於小米空氣清淨器的一點看法.. (Internet of Things)
* Murmur, 機器人是時尚元素? (Robot, Fashion)
* 開箱, 鋼彈小劇場 (Pepper's Ghost, GUNDAM)
* 開箱, 偉力控二號機, 小四軸飛行器 (CG022, Quadcopter)
* 偉力控二號機, 修理防護罩與飛行心得 (CG022, Quadcopter)
* 偉力控二號機, 我想有個家 (CG022, Quadcopter)
* 偉控力二號機, 換馬達 (CG022, Quadcopter)
* 偉力控二號機, 盒子上的洞 (CG022, Quadcopter)
* 開箱, 偉力控二號機, 小四軸飛行器 (CG022, Quadcopter)
* 偉力控二號機, 修理防護罩與飛行心得 (CG022, Quadcopter)
* 偉力控二號機, 我想有個家 (CG022, Quadcopter)
* 偉控力二號機, 換馬達 (CG022, Quadcopter)
* 偉力控二號機, 盒子上的洞 (CG022, Quadcopter)
* 修理, 樂高馬達 8883 (LEGO 8883 Power Functions M-Motor)
* 修理, (part 2) 樂高馬達 8883 (LEGO 8883 Power Functions M-Motor)
* 修理, 液晶螢幕 (LCD)

是的.
回覆刪除