2015/01/26


<藍色小鋪一起來做> 是個免費的研究聚會, 目前的聚會主題是 Bluetooth LE 的技術研究, 會用 TI 的 CC254x 開發板來做些有趣的計畫.


聚會的第一個目標, 是要做一台能用 beacon 控制開關的枱燈. 萊恩大兵打算在六次的聚會中完成作品, 規劃的進度為:

[1/6] 準備好 CC2540 的開發環境
- 這場聚會已在 2014/12/16 舉行, 聚會的進展與整理, 請參考: 藍色小鋪一起來做, 用 beacon 控制開關的枱燈 (Bluetooth, CC2540, iBeacon)

[2/6] 知道怎麼在 OSAL 的架構下改程式或加功能
- 這場聚會已在 2015/1/6 舉行. 聚會的進展與整理, 請參考: 藍色小鋪一起來做, 講解 BLE CC2540 UART 通訊範例程式 (Bluetooth, CC2540, UART)

[3/6] 將枱燈連接在 CC254x 開發板上, 並能用 app 控制開關.
- 這場聚會已在 2015/1/13 舉行. 聚會的進展與整理, 請參考: 藍色小鋪一起來做, 藍牙枱燈専案實作 (上) (Bluetooth, CC2540)

[4/6] 講解藍牙枱燈的專案程式碼與 debug 示範.
- 這場聚會已在 2015/1/20 舉行, 本篇文章即是聚會的進展與整理.



[5/6] 以 SimpleBLECentral 專案為基礎, 增加偵測 beacon 訊號的功能.
- 預訂在 2015/1/27 舉行.

[6/6] 以 SimpleBLECentral 專案為基礎, 完成用 beacon 控制枱燈開關的功能.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
前言說完, 來說說 [4/6] 的聚會進度吧.

(1) 上週聚會已經做到能用 LightBlue 遙控開發板開/關枱燈. 今天的聚會, 萊恩大兵以藍牙裝置四種角色的差異比較做為開場.

- Broadcaster: an advertiser that is non-connectable. (不會被連線, 單純只廣播資訊出來的裝置)



- Observer: scans for advertisements, but cannot initiate connections. (不會建立連線, 單純只聽廣播資訊的裝置)



- Peripheral: an advertiser that is connectable and can operate as a slave in a single link layer connection. (可被連線的廣播裝置)



- Central: scans for advertisements and initiates connections; operates as a master in a single or multiple link layer connections. (會聽廣播資訊, 也能建立連線的裝置)




因此, 在 LightBlue 是扮演 Central 的角色, 而開發板是扮演 Peripheral 的角色.



(2) 再來談到 device, profile, service 與 characteristic 的概念.

- 藍牙裝置彼此之間用 UUID 做識別.

- Profile 是一些預先定義好的規範, 可確保藍牙裝置之間的互通性. 一個 profile 會包含一個以上的 service.

- Service 則可想成是 profile 的功能子集, 例如, 一個藍牙血壓計會有 BLS (Blood Pressure Service) 與 BAS (Battery Service) 等兩種 services. 一個 service 會包含一個以上的 characteristic values.

- Characteristic value 則可想成是 service 的實作, 例如, BAS 有一個叫做 Battery Level 的 characteristic, 藉由這個欄位來取得電池電量的資訊.


萊恩大兵拿 LightBlue 的畫面說明:

- 搜尋裝置 (UUID), 建立連線


- 找到 service "FFF0", 底下有五個 characteristics



- 找到 characteristic 1 "0xFFF1"



- 對 Characteristic 1 下 0 或 1 的值, 就可以開/關枱燈.




(3) 大致了解藍牙裝置 Central / Peripheral 之間的運作模式後, 來看 IAR 的 debug 功能就會比較有感覺.

- 在 IAR (simpleBLEPeripheral.c, ln:757) 設置中斷點.



- 再從 LightBlue 對 characteristic "0xFFF1" 寫 0/1值, 就會發現 IAR 攔截了程式的運行, 停在 (simpleBLEPeripheral.c, ln:757) 等待下一步的動作.



- 這時可以去觀察 NewValue 的值, 的確就是在 LightBlue 輸入的值. 

- 也可以按 F10 逐行執行程式, 或是按 F5 放手讓程式跑.



(4) 最後, 萊恩大兵想帶大家看程式碼. 只是力有未逮, 沒辦法談太深, 只能丟問題和大家討論.

- BLE stack 的 GAP 層確切在處理哪些事?





- BLE stack 的 GATT 層在處理哪些事?





另外, 說個靈異事件. 在聚會過程, 萊恩大兵的開發版, 明明燒錄的藍牙裝置名稱是 BLE Peripheral, 但 LightBlue 掃瞄到的, 卻是叫做 TI BLE Keyfob (而且可以連線). 萊恩大兵至今還搞不清楚到底是哪裡出錯. 

今天的進度就到此. 下週聚會主題會是在 SimpleBLECentral 專案的基礎上, 加上 beacon 偵測的功能. 歡迎有興趣的朋友一同參與囉.


[萊恩大兵的其它文章]

自製大四軸

自製大四軸, 實作分享@華山文創園區
自製大四軸, (1) 零組件篇, 遙控器 (Drone, Quadcopter, Futaba, Maker, Arduino, Animatronic Eye)
自製大四軸, (2) 零組件篇, 飛控板 (Drone, Quadcopter, MultiWii, Arduino, Futaba, Maker)
自製大四軸, (3) 零組件篇, 自行雷切木質機架 (Drone, Quadcopter, Maker, Laser Cut)
自製大四軸, (4) 零組件篇, 馬達與電變調整 (Drone, Quadcopter, Maker, Electric Speed Control, Motor)
自製大四軸, (5) 組裝篇, 四軸飛行器成形 (Drone, Quadcopter, MultiWii, Arduino, Maker, Electric Speed Control, Motor)
自製大四軸, (6) 調整篇, 飛行前兩三事 (Drone, Quadcopter, Maker, Futaba, Arduino, MultiWii)
自製大四軸, (7) 充電篇, iMax B6 充電器操作記要 (Charger, Battery)
自製大四軸, (8) 問題篇, 機架損壞維修 (Drone, Quadcopter, Laser Cut)
自製大四軸, (9) 改良篇, 方便拆卸的木質機架 (Drone, Quadcopter, Maker, Laser Cut)
自製大四軸, (10) 外飛篇, 新手的青蛙跳與遛狗 (Drone, Quadcopter, Maker, MultiWii)

自動報球速的棒球


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)

藍色小鋪一起來做

藍色小鋪一起來做, (1) 用 beacon 控制開關的枱燈
藍色小鋪一起來做, (2) 講解 BLE CC2540 UART 通訊範例程式 (Bluetooth, CC2540, UART)
藍色小鋪一起來做, (3) 藍牙枱燈專案實作 (上) (Bluetooth, CC2540)
藍色小鋪一起來做, (4) 藍牙枱燈專案實作 (下) (Bluetooth, CC2540)
藍色小鋪一起來做, (5) iBeacon scanner 專案示範與解說 (Bluetooth, CC2540, iBeacon)
藍色小鋪一起來做, (6) 完成, 用 iBeacon 控制開關的枱燈 (Bluetooth, CC2540, iBeacon)
藍色小鋪, 初嚐樹莓派 (Raspberry Pi)
藍色小鋪, iBeacon 應用, 自動記錄到訪時間 (iBeacon, Geohopper, Zapier)
藍色小鋪, 菲力普的 Docker 應用分享 (Docker)
藍色小鋪, PTT地震文團隊分享三連發, (1) Maker 的 IOT 遊樂場 (PTT, Hackathon, Python, Xively, Internet of Things)
藍色小鋪, PTT地震文團隊分享三連發, (2) mbed 新手分享 (mbed, MPU6050, Hackathon, Internet of Things)
藍色小鋪, 空中提升軌道車, 作品進化分享 (Pneumatic Tube System, Force of Friction, Mini 4 WD)
藍色小鋪, 數字管時鐘, 作品進化分享 (Nixie Tube, VFD)

OpenCV 學習路徑

記錄, OpenCV 學習路徑, (1) 環境安裝與第一個範例 (OpenCV, Python)

小惡魔 無線溫度感測器

108 大眼仔
Plot Clock

體驗, 原住民互動故事書@宜蘭大同鄉泰雅生活館
體驗, 蛋生音互動裝置@兒童美術館 (Arduino, 3D Printing, HC-SR04, Interactive)


實作, 電容感應音樂樹

0 意見:

張貼留言