感謝鋼鐵人實作聯盟阿立的帶領.
這篇筆記純就記錄每次研究會的進展或心得, 萊恩大兵對 BLE 4.0 還所知不多, 寫出來的東西可能會比較沒系統一點. XD.
前幾回沒跟上的, 可以看這兩篇文來知道大概.
筆記, CC2540 Bluetooth Low Energy, (1) IAR 開發環境 架設 (Bluetooth, CC2540)
筆記, CC2540 Bluetooth Low Energy, (2) 跑第一個範例程式 (Bluetooth, CC2540)
今天 (2014/09/16, BLE4.0-4) 週二飛來鋼鐵人的進展, 則是在說明 SimpleBLEPeripheral 的程式架構. 沒先作功課, 當場聽阿立說明這段 code 什麼功能, 那段 code 幹嘛用途, 萊恩大兵還真聽的霧茫茫.
強烈建議, 初心者最好先去翻一下 BLE 軟件開發指南 (請搜尋 BLE软件开发指南) 或 training slides (請搜尋 BLE_CC2540_DeepDive_Training_2011.pdf), 了解一下 BLE 的架構與運作流程, 不求全盤了解, 但至少要知道 GAP, GATT 之類的技術名詞是啥意思, 再來看 code 會比較有感覺. 以下萊恩大兵儘量用自己的理解寫出來, 有些用詞或英文翻譯不一定精準, 純是自己的意思.
=-=-=-=- 分隔線 -=-=-=-=-=
Bluetooth 4.0 區分為 Basic Rate (BR) 與 Bluetooth Low Energy (BLE). BR 是我們過往認知的藍牙, BLE 則設計成每次傳送很小的封包資料, 相比 BR 裝置很省電, 適合用在穿戴裝置與物聯網. 能同時支援 BR 與 BLE 的裝置叫做雙模 (dual-mode), 例如智慧手機, 筆電等. 僅能支援 BLE 的則為單模 (single-mode).
BLE Protocol Stack architecture 長這樣..
Physical Layer, Link Layer 和 HCI 三層合稱做 Controller.
Physical Layer
實體層, 最底層.
Link Layer
主要處理底層網路連線狀態, 會有六種可能的狀態:
- Standby
- Advertiser
- Scanner
- Initiator
- Master
- Slave
Host/Controller Interface (HCI)
做上下層之間通信用途, 讓 Host 可以透過 UART, USB, SDIO 之類的標準介面和 Controller 溝通.
GAP, GATT, SMP, ATT, L2CP 合稱做 Host.
Generic Access Profile (GAP)
負責連線相關的服務, 包括:
- Device Discovery (裝置搜尋)
- Link Establishment/Management/Termination (連線 建立/維護/終止)
- Initiation of security features
這邊定義了四種 profile roles (角色), 包括:
- Broadcaster (廣播者)
只發送數據, 不能被連線的裝置. 例如溫度感測器.
- Observer (觀察者)
會接收數據, 但不會啟動連線的裝置. 例如溫度顯示面版.
- Peripheral (週邊)
會發送數據, 也能做為 slave 被連線的裝置. 例如智慧手錶.
- Central (中控)
能接收數據, 也能做為 master 來啟動連線. 例如智慧手機.
然後, 一個裝置是可以同時具有不同 profile roles 的. 例如
- Peripheral (週邊) + Broadcaster (廣播者)
- Peripheral (週邊) + Observer (觀察者)
- Central (中控) + Broadcaster (廣播者)
另外, GAP 這邊還定義了三種裝置搜尋模式, 包括:
- Non-discoverable Mode (不可被搜尋)
裝置不會發送廣告封包出來.
- Limited Discoverable Mode (有限度被搜尋)
裝置會在一定時限內發送廣告封包, 若沒進一步發生什麼事的話, 就進入 standby 模式.
- General Discoverable Mode (不限制)
裝置會持續發送廣告封包.
Security Manager Protocol (SMP)
負責加密與認證. 這邊定義了裝置之間會有三種關係:
- Pairing
- Authentication
- Bonding
Logical Link Control and Adaptation Protocol (L2CAP)
萊恩大兵不知該怎麼形容這部份.
Attribute Protocol (ATT)
這邊有定義了 client/server 的角色與兩邊資料傳遞讀寫機制.
Generic Attribute Profile (GATT)
萊恩大兵也不知該怎麼形容這部份, 只知道這邊有個叫做 Characteristic 的, 會在稍後的程式碼裡面有用到.
再來要說一下 TI 原廠的 BLE stack, 從官方的文件說明可以知道, 這 CC2540 是一顆整合了 8051 MCU, RF Transceiver, 8KB RAM 與 flash 的 SoC (System on chip). 官方有提供完整的 framework, 建議開發者儘量遵循 framework 的架構來做開發, 會比較少問題.
一隻 CC2540 應用程式, 可分成五大模塊:
- Operating System Abstraction layer (OSAL)
- Hardwar Abstraction Layer (HAL)
- KeyFobDemo Application, 例如, SimpleBLEPeripheral.
- BLE Protocol Stack
- Profiles: GAP Role, GAP Security 和 GATT Services
萊恩大兵對這些模塊的功能用途還模模糊糊的, 就不強作解釋了.
值得一提的還有 training slides 的 agenda:
- CC2540 Hardware Overview
- CC2540 BLE Software Architecture and Structure
- SimpleBLEPeripheral Project / Framework for Custom Applications
- GAP Role Profiles and Bond Manager
- GATT Profiles and Services
- CC2540DK-MINI Kit Overview
應該這些項目 (GAP Role Profiles, Bond Manager, GATT Profiles..) 就是未來在開發 BLE 程式時, 要重點關注的項目吧.
=-=-=-=- 分隔線 -=-=-=-=-=
找阿立聊一下才了解. 這研究會暫訂的走向, 是要把 SimpleBLECentral 放手機上執行, 來操控 SimpleBLEPeripheral 的裝置. 所以我們大家才需要深入了解 SimpleBLEPeripheral 的架構.
來看 SimpleBLEPeripheral 的 code.
(1) 程式裡面會用 compiler settings 的 symbol 來開關某些功能
(2) 初始值
這邊可以設定裝置預設的 discoverable mode.
也可以更改裝置的名稱.
(3) Profile callbacks
這邊可以填入自訂的 function, 讓某些狀況發生時, 會自動呼叫該 function.
順道說一下, GAP Peripheral Role Profile 會處理 advertisements, scan requests, connections 與 connection parameters. 而 GAP Peripheral Bond Manager 則是去回應 pairing 或 bonding requests, 以及 security keys 的儲存與維護.
(4) Events
這邊以後會有機會自訂 event 來處理某些狀況.
(5) Characteristic
這 characteristic, 我們可以拿 LightBlue 去連接一個 SimpleBLEPeripheral 裝置, 然後直接寫值給它.
萊恩大兵還沒法將 profile role 或 characteristic 等諸多名詞講清楚, 只好以後慢慢補上了. 這週的進度就是這些, 下週開始要把程式放上手機, 大家得先準備好手機端的開發環境.
題外話, 當天聚會時, 有張照片的構圖很像四個小朋友的千元大鈔. 大家覺得呢?
[萊恩大兵的其它文章]
自製大四軸
* 自製大四軸, 零組件篇, (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)
@哲嘉 吳, Nrf2401 是你在找的東西嗎? (http://playground.arduino.cc/InterfacingWithHardware/Nrf2401)
回覆刪除