聚焦 Air8000 核心板的 BLE 開發,本文以雙板配置為例,講解中心設備模式的初始化、連接掃描及數據服務配置,為藍牙主設備項目開發提供技術模板。
一、BLE 概述
BLE(Bluetooth Low Energy),也稱為 Bluetooth Smart,是藍牙 4.0 及更高版本引入的低功耗無線通信技術,專為低帶寬、間歇性數據傳輸的物聯網(IoT)和穿戴設備設計。
Air8000 支持最新的 BLE 5.4 版本,BLE 5.4 在上一代基礎上繼續優化了功耗和性能,為用戶提供了更高效、更穩定的藍牙連接體驗。具體的 BLE 版本區別若有興趣請自行上網查詢,本處不再贅述。
BLE 支持的四種模式
Air8000 的 BLE 支持 4 種模式,分別是中心設備模式(central),外圍設備模式(peripheral),廣播者模式(ibeacon),以及觀察者模式(scan)。
1、中心設備模式(central):
中心設備模式是能夠搜索別人并主動建立連接的一方,從掃描狀態轉化而來的。其可以和一個或多個從設備進行連接通信,它會定期的掃描周圍的廣播狀態設備發送的廣播信息,可以對周圍設備進行搜索并選擇所需要連接的從設備進行配對連接,建立通信鏈路成功后,主從雙方就可以發送接收數據。
2、外圍設備模式(peripheral):
外圍設備模式是從廣播者模式轉化而來的,未被連接的外圍設備首先進入廣播狀態,等待被中心設備搜索,當中心設備掃描到外圍設備建立連接后,就可以和中心設備進行數據的收發,其不能主動的建立連接,只能等別人來連接自己。和廣播模式有區別的地方在于,外圍設備模式的設備是可以被連接的,定期的和中心設備進行連接和數據傳輸,在數據傳輸過程中作外圍設備。
3、廣播者模式(ibeacon)
處于廣播模式的設備,會周期性的廣播 beacon 信息, 可以被掃描, 但一般不會被連接,典型應用 ibeacon。
4、觀察者模式(scan)
觀察者模式,該模式下模塊為非連接,相對廣播者模式的一對多發送廣播,觀察者可以一對多接收數據。在該模式中,設備可以僅監聽和讀取空中的廣播數據。和中心設備唯一的區別是不能發起連接,只能持續掃描外圍設備。
藍牙中的重要概念
1、GATT(通用屬性配置文件)
定義 BLE 設備如何組織和傳輸數據,以 “服務(Service)” 和 “特征(Characteristic)” 為單位。
示例:心率監測設備的 GATT 服務包含 “心率特征”,手機通過讀取該特征獲取心率數據。
2、服務和特征
服務是特征的容器,通過邏輯分組簡化復雜功能的管理;
特征是數據交互的最小單元,通過屬性定義實現靈活的讀寫與推送機制;
兩者結合構成 GATT 協議的核心框架,支撐藍牙設備間的標準化數據交互(如智能穿戴、醫療設備、物聯網傳感器)。
3、特征的關鍵屬性(Properties)
特征通過 “屬性” 定義數據的操作方式,常見屬性包括:

4、UUID
UUID 是藍牙 GATT 協議的 “數字身份證”,通過標準化的唯一標識機制,實現了跨廠商設備的功能互認(標準 UUID)與廠商個性化功能的擴展(自定義 UUID)
Air8000 的所有操作,都通過 UUID 來索引和管理
二、演示功能概述
本示例使用兩個 Air8000 核心板來演示 BLE 中心設備模式:一個核心板做中心設備(燒錄 central demo),另一個核心板做外圍設備(燒錄 peripheral demo)。
演示功能概述如下:
1、ble 中心設備掃描并連接外圍設備;
2、ble 中心設備連接成功后,開始定時讀取外圍設備特征值 UUID 數據, 同時也定時發送數據給外圍設備;
3、ble 中心設備收到外圍設備特征值 UUID 的 notify 數據后,通過 uart 發送到 pc 端串口工具;
4、pc 端串口工具收到數據后,打印到串口工具窗口。
三、準備硬件環境
3.1 Air8000 核心板
使用 Air8000 核心板,如下圖所示:

3.2 PC 電腦
WIN10 以及以上版本的 WINDOWS 系統。
3.3 數據通信線
USB 數據線(其一端為 Type-C 接口,用于連接 Air8000 開發板)。
四、準備軟件環境
4.1 軟件環境
1、 燒錄工具:https://docs.openluat.com/air780epm/common/Luatools/
2、內核固件:https://docs.openluat.com/air8000/luatos/firmware/(理論上,2025 年 7 月 26 日之后發布的固件都可以)
3、腳本文件:
中心設備:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/ble/central
外圍設備:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/ble/peripheral
4、PC 端串口工具:例如 SSCOM、LLCOM 等都可以
5、LuatOS 運行所需要的 lib 文件:使用 Luatools 燒錄時,勾選 添加默認 lib 選項,使用默認 lib 腳本文件。
準備好軟件環境之后,接下來查看如何燒錄項目文件到 Air8000 核心板中,將本篇文章中演示使用的項目文件燒錄到 Air8000 開發板中。(https://docs.openluat.com/air8000/luatos/common/download/)
4.2 API 介紹
ble 庫:https://docs.openluat.com/osapi/core/ble/
五、程序結構

5.1 文件說明
main.lua:主程序入口文件。
ble_client_main.lua:BLE 中心設備主程序,進行 BLE 初始化,處理各類 BLE 事件(連接、斷開連接、掃描報告、GATT 操作完成等)。
ble_client_receiver.lua:BLE 中心設備接收數據處理。
ble_client_sender.lua:BLE 中心設備發送數據處理。
ble_timer_app.lua:BLE 中心設備定時器處理邏輯,啟動兩個循環定時器,一個用于定時讀取外圍設備特征值 UUID 數據,一個用于定時向外圍設備特征值 UUID 發送數據。
ble_uart_app.lua:BLE 中心設備接 uart 處理邏輯,將收到的 notify 數據,通過 uart 發送到 pc 端串口工具。
check_wifi.lua:Air8000 的藍牙功能依賴 WiFi 協處理器,需確保 WiFi 固件為最新版本。本腳本文件檢查當前 Air8000 模組的 WiFi 固件是否為最新版本,若不是則自動啟動升級(需插入可聯網的 SIM 卡)
六、核心模塊詳解
6.1 主程序 (main.lua)
主程序文件main.lua是整個項目的入口點。它負責初始化系統環境。
6.1.1 初始化流程
1、項目和版本定義:
定義PROJECT和VERSION變量。
2、日志記錄:
使用log.info("main", PROJECT, VERSION)在日志中打印項目名和版本號。
3、看門狗初始化(如果支持):
配置并啟動硬件看門狗,防止程序死循環卡死。
4、加載功能模塊:
加載 BLE Central(中心設備)主控制模塊(ble_client_main)。
加載 wifi 升級模塊(check_wifi)。
加載串口應用功能模塊(ble_uart_app)。
加載定時器應用功能模塊(ble_timer_app)。
5、啟動任務調度器:
調用sys.run()啟動 LuatOS 的任務調度器,開始執行各個任務。
6.2 ble_client_main
本文件為 ble client 主應用功能模塊,整個應用通過 sysplus.taskInitEx 啟動主任務,實現了完整的 BLE 中心設備功能,包括設備發現、連接管理、數據收發和異常恢復機制。核心業務邏輯為:
6.2.1 初始化與配置
加載依賴模塊( ble_client_receiver 用于數據接收處理, ble_client_sender 用于數據發送處理)。
定義配置參數(目標設備名稱、服務 UUID、特征值 UUID、超時時間等)。
調用 ble_init(),初始化藍牙功能。
6.2.2 設備掃描與連接
創建并啟動 BLE 掃描(默認參數:公共地址模式、掃描間隔 100ms、掃描窗口 100ms)。
通過 is_target_device 函數過濾掃描到的設備(匹配設備名稱)。
發現目標設備后停止掃描并發起連接。
連接超時處理和重連機制。
6.2.3 事件處理
通過 ble_event_cb 回調函數處理各類 BLE 事件:
連接成功(EVENT_CONN)
斷開連接(EVENT_DISCONN)
掃描報告(EVENT_SCAN_REPORT)
GATT 操作完成(EVENT_GATT_DONE)
讀取特征值完成(EVENT_READ_VALUE)
6.2.4 業務功能
GATT 服務發現完成后,自動啟用目標特征值的通知監聽。
接收并處理來自其他模塊的讀取請求(READ_REQ)。
通過消息隊列與其他模塊通信。
6.2.5 異常處理
掃描超時或連接失敗時觸發異常處理。
斷開連接后自動清理消息隊列并嘗試重連。
異常情況下 5 秒后重新開始掃描連接。
6.3 ble_client_receiver
6.3.1 主要功能
數據分類處理 :接收兩類數據(外圍設備通知數據和主動讀取到的數據)。
數據分發 :根據數據類型(通過特征值 UUID 區分)發布到不同的消息隊列,供其他模塊處理。
6.3.2 核心實現
提供proc(service_uuid, char_uuid, data)接口函數,接收服務 UUID、特征值 UUID 和數據。
通過判斷特征值 UUID 是否匹配配置中的target_notify_char或target_read_char來區分數據類型。
對于外圍設備的通知數據,通過sys.publish("RECV_BLE_NOTIFY_DATA", ...)發布。
對于主動讀取到的數據,通過sys.publish("RECV_BLE_READ_DATA", ...)發布。
6.3.3 數據流轉
當ble_client_main模塊接收到EVENT_READ_VALUE事件時,會調用此模塊的 proc 函數。
本模塊將數據分類后發布到對應的消息主題。
其他訂閱了這些消息主題的模塊可以接收并處理數據。
6.4 ble_client_sender
其他模塊只需發布"SEND_DATA_REQ"消息即可請求中心設備向外圍設備發送數據。
6.4.1 主要功能
消息訂閱:訂閱"SEND_DATA_REQ"消息,接收其他模塊的發送請求。
隊列管理:維護發送隊列 send_queue,存儲待發送的數據項(包含服務 UUID、特征值 UUID、數據、回調信息)。
任務調度:通過任務處理函數 ble_client_sender_task_func 處理各類 BLE 事件。
數據發送:按順序發送隊列中的數據,并通過回調通知發送結果。
6.4.2 核心實現
其他模塊通過sys.publish("SEND_DATA_REQ", ...)發布 發送請求。
send_data_req_proc_func函數將請求數據加入發送隊列,并通知任務。
任務處理函數根據 BLE 事件狀態(連接成功、斷開連接等)處理隊列數據。
send_item_func函數負責實際發送數據。
send_item_cbfunc函數處理發送結果,調用用戶回調。
6.4.3 事件處理
CONNECT_OK:BLE 連接成功,開始發送隊列數據。
SEND_REQ:有新數據需要發送,繼續處理隊列。
DISCONNECTED:連接斷開,清空隊列并通知所有發送請求失敗。
6.5 ble_uart_app
6.5.1 主要功能
UART 初始化:打開 UART1 接口,配置波特率 115200、數據位 8、停止位 1、無奇偶校驗。
數據接收:訂閱 "RECV_BLE_NOTIFY_DATA" 消息,接收來自 BLE 外圍設備的通知數據。
數據轉發:將接收到的 BLE 數據(包含服務 UUID、特征值 UUID 和實際數據)格式化后通過 UART1 發送到 PC 端。
6.6 ble_timer_app
6.6.1 主要功能
創建兩個獨立的 5 秒循環定時器
一個用于定時 發送 數據到外圍設備特定特征值 UUID。
一個用于定時 讀取 外圍設備特定特征值 UUID 的數據。
6.6.2 核心實現
定義了目標服務 UUID( FA00 )和特征值 UUID(寫: EA02 ,讀: EA03 )。
實現數據發送結果回調函數 send_data_cbfunc ,用于處理發送成功/失敗的通知。
實現兩個定時器回調函數:
send_data_req_timer_cbfunc:發布SEND_DATA_REQ消息到 ble_client_sender 模塊。
read_data_req_timer_cbfunc:發送READ_REQ請求到 ble_client_main 模塊。
啟動兩個 5 秒循環定時器,分別綁定上述兩個回調函數。
6.6.3 數據流轉
發送流程:定時器觸發 → 發布SEND_DATA_REQ消息 →ble_client_sender處理 → 回調通知結果。
讀取流程:定時器觸發 → 發送READ_REQ請求 →ble_client_main處理 → 結果通過事件返回。
七、結果展示
7.1 中心設備訂閱外圍設備特征通知(Notify)
1、中心設備端實現
在 ble_client_main.lua 文件中,在ble.EVENT_GATT_DONE事件觸發后,開啟 notify 監聽,監聽外圍設備指定服務和特征值的通知,中心設備收到 notify 數據后,將數據通過 uart1 發送到 PC 端。開啟監聽的主要 demo 如下:

2、外圍設備端要求
服務 UUID 和特征 UUID 需要和上面中心設備端實現的一致,同時特征 UUID 的屬性需包含 NOTIFY,才能正常通信。
服務 UUID:FA00,特征 UUID:EA01。

3、結果展示

7.2 中心設備寫入特征值(Write)
1、中心設備端實現
ble_timer_app.lua 中,啟動 5 秒的循環定時器,發布SEND_DATA_REQ消息到 ble_client_sender 模塊,ble_client_sender 模塊訂閱到消息后,開始調用 write_value 向外圍設備特征值寫入數據,關鍵發送部分 demo 如下所示:

2、外圍設備端要求
服務 UUID 和特征 UUID 需要和上面中心設備端實現的一致,同時特征 UUID 的屬性需包含 WRITE。
服務 UUID:FA00,特征 UUID:EA02。
觸發 ble.EVENT_WRITE 事件,接收到寫請求并通過 luatools 打印出來。
3、結果展示

7.3 中心設備讀取特征值(Read)
1、中心設備端實現
ble_timer_app.lua 中,啟動 5 秒的循環定時器,發送READ_REQ請求,ble_client_main 模塊收到請求后通過 read_value 開始讀取外圍設備特征值數據,讀取成功后將數據轉給 ble_client_receiver 模塊處理,關鍵 demo 如下所示:

2、外圍設備端要求
服務 UUID 和特征 UUID 需要和上面中心設備端實現的一致,同時特征 UUID 的屬性需包含 READ。
服務 UUID:FA00,特征 UUID:EA03。

3、結果展示

八、總結
本篇文檔介紹了 Air8000 的 BLE central 模式,通過兩個 Air8000 核心板:一個作中心設備,一個作外圍設備,演示了 BLE 中心設備三大核心操作:
1)訂閱通知(Notify):自動獲取外圍設備推送的數據,
2)寫入特征值(Write):用于發送控制指令,要求外圍設備特征支持 WRITE 屬性;
3)讀取特征值(Read):主動獲取外圍設備狀態,需外圍設備開放 READ 權限。
三種操作均需中心設備和外圍設備的服務/特征 UUID 嚴格匹配。
今天的內容就分享到這里了~
審核編輯 黃宇
-
BLE
+關注
關注
13文章
749瀏覽量
66052 -
核心板
+關注
關注
6文章
1354瀏覽量
31838
發布評論請先 登錄
Air8000 Wi-Fi功能實操指南:固件升級與網絡配置步驟!
Air8000核心板SoftAP配網方案:快速構建無線接入點
Air8000核心板Wi-Fi應用之SoftAP配網方案詳解!
BLE 5.4時代下,Air8000藍牙通知與手機讀寫操作實戰攻略
Air8000藍牙新篇章:BLE 5.4——輕松實現通知推送與手機端設備控制!
北斗GPS雙模賦能Air8000:定位精度革命與天線設計優化的實踐路徑
快速上手Air8000 AP模式:Wi-Fi熱點創建與設備管理
LuatOS藍牙配網開發全攻略:以Air8000為核心實戰教學
從零到一:基于Air8000的LuatOS softAP配網功能開發教程
高效開發:解鎖Air8000 LuatOS softAP配網功能的核心技術!
揭秘Air8000對講黑科技:AirTalk+MQTT開發示例深度解析
是否必須使用LuatIO?Air8000 GPIO配置與設計規范深度解析
雙 Air8000 核心板構建 BLE 中心模式通信系統全流程

雙 Air8000 核心板實現 BLE 中心模式的開發實踐 !
評論