Air8000的BLE外圍設備模式(peripheral)是實現低功耗藍牙通信的關鍵功能,它既能主動向中心設備發送通知數據,也能接收中心設備傳回的信息。本文將通過具體示例,詳細拆解這一模式的操作流程,從配置到數據交互逐一講解,幫助開發者快速掌握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 的 peripheral(外圍設備) 功能。
1、Air8000 作為外圍設備開啟廣播,被動等待中心設備發起連接;
2、連接成功后,定期向中心設備發送數據;
3、外圍設備收到中心設備的寫入數據后,通過 uart1 發送到 pc 端串口工具;
4、pc 端串口工具收到數據后,打印到串口工具窗口。
三、準備硬件環境
1 、Air8000 核心板
2、 PC 電腦
WIN10 以及以上版本的 WINDOWS 系統。
3、 數據通信線
USB 數據線(其一端為 Type-C 接口,用于連接 Air8000 核心板)。
四、準備軟件環境
4.1 軟件環境
1、燒錄工具:https://docs.openluat.com/air780epm/common/Luatools/
2、內核固件:https://docs.openluat.com/air8000/luatos/firmware/
3、腳本文件:
外圍設備:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/ble/peripheral
4、PC 端串口工具:例如 SSCOM、LLCOM 等都可以
5、藍牙調試軟件:
本示例使用的藍牙調試軟件是 nrf connect(Android 版本),下載下面的壓縮包即可;IOS 版請在APP Store搜索 nrf connect下載。
6、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_peripheral_main.lua:ble 外圍設備主程序,進行 ble 初始化,設置廣播內容,處理各類 ble 事件(連接、斷開連接、寫入請求等)。
ble_peripheral_receiver.lua:BLE 外圍設備接收數據處理。
ble_peripheral_sender.lua:BLE 外圍設備發送數據處理。
ble_timer_app.lua:ble 外圍設備定時器處理邏輯,啟動兩個循環定時器,一個是以 notify 方式主動向中心設備推送數據(需中心設備先開啟 notify 訂閱),另一個是使用 write 方式,更新特征值數據,中心設備需要主動讀取特征值獲取最新數據。
ble_uart_app.lua:ble 外圍設備接 uart 處理邏輯,將收到的中心設備的寫入數據,通過 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 peripheral(外圍設備)主控制模塊(ble_server_main)。
加載 wifi 升級模塊(check_wifi)。
加載串口應用功能模塊(ble_uart_app)。
加載定時器應用功能模塊(ble_timer_app)。
5、啟動任務調度器:
調用sys.run()啟動 LuatOS 的任務調度器,開始執行各個任務。
6.2 ble_server_main
本文件為 ble server 主應用功能模塊,整個應用通過 sys.taskInitEx 啟動主任務,實現了完整的 BLE 外圍設備功能,核心業務邏輯為:
6.2.1 初始化與配置
1、加載依賴模塊( ble_server_receiver 用于數據接收處理, ble_server_sender 用于數據發送處理)。
2、定義配置參數(自身設備名稱、服務 UUID、特征值 UUID、GATT 數據庫定義)。
注意:在 GATT 中,UUID 和屬性的定義是由外圍設備決定的,中心設備需要按照外圍設備定義的 UUID 和屬性來訪問。

3、調用 ble_init(),初始化藍牙功能,設置廣播包內容并開始廣播。
作為外圍設備,無需主動掃描,而是通過廣播讓中心設備發現:

6.2.2 事件處理
通過 ble_event_cb 回調函數處理各類 BLE 事件:
1、連接成功(EVENT_CONN)
2、斷開連接(EVENT_DISCONN)
3、寫入請求(EVENT_WRITE)
注意:EVENT_WRITE 事件,是中心設備開啟 notify 通知功能,或者向外圍設備的特征里寫入數據時,外圍設備觸發的回調事件。
6.2.3 業務功能
1、被動接收中心設備寫入的數據:通過 ble_server_receiver.proc() 處理
2、建立連接后,向 ble_server_sender 模塊發送"CONNECT_OK"的消息,通過 ble_server_sender 模塊向中心設備發送數據。
6.2.4 異常處理
1、初始化失敗 :進入異常處理流程。
2、連接斷開 :清理資源并等待重連。
3、超時處理 :5 秒后重新啟動廣播。
6.3 ble_server_receiver
6.3.1 主要功能
1、數據處理 :處理接收到的 BLE 寫入請求數據。
2、數據分發 :將收到的數據發給其他模塊處理,比如本 demo 便演示了通過 uart 發給 pc 端處理。
當ble_server_main模塊接收到EVENT_WRITE事件時,會調用此模塊的 proc 函數。將數據發布到對應的消息主題,其他訂閱了這些消息主題的模塊可以接收并處理數據
6.3.2 核心實現
1、提供proc(service_uuid, char_uuid, data)接口函數,接收服務 UUID、特征值 UUID 和數據。
2、通過sys.publish("RECV_BLE_WRITE_DATA", ...)發給其他模塊處理。
6.4 ble_server_sender
其他模塊只需發布"SEND_DATA_REQ"消息即可請求外圍設備向中心設備發送數據。
6.4.1 主要功能
1、消息訂閱:訂閱"SEND_DATA_REQ"消息,接收其他模塊的發送請求。
2、隊列管理:維護發送隊列 send_queue,存儲待發送的數據項(包含服務 UUID、特征值 UUID、數據、回調信息)。
3、任務調度:通過任務處理函數 ble_server_sender_task_func 處理各類 BLE 事件。
4、數據發送:按順序發送隊列中的數據,并通過回調通知發送結果。
6.4.2 核心實現
1、其他模塊通過sys.publish("SEND_DATA_REQ", ...)發布 發送請求。
2、send_data_req_proc_func函數將請求數據加入發送隊列,并通知任務。
3、任務處理函數根據 BLE 事件狀態(連接成功、斷開連接等)處理隊列數據。
4、send_item_func函數負責實際發送數據。
5、send_item_cbfunc函數處理發送結果,調用用戶回調。
6.4.3 事件處理
1、CONNECT_OK:BLE 連接成功,開始發送隊列數據。
2、SEND_REQ:有新數據需要發送,繼續處理隊列。
3、DISCONNECTED:連接斷開,清空隊列并通知所有發送請求失敗。
6.5 ble_uart_app
6.5.1 主要功能
1、UART 初始化:打開 UART1 接口,配置波特率 115200、數據位 8、停止位 1、無奇偶校驗。
2、數據接收:訂閱 "RECV_BLE_WRITE_DATA" 消息,接收來自 BLE 中心設備的寫入數據。
3、數據轉發:將接收到的 BLE 數據(包含服務 UUID、特征值 UUID 和實際數據)通過 UART1 發送到 PC 端。
6.6 ble_timer_app
6.6.1 主要功能
1、創建兩個獨立的循環定時器
一個用于定時 以 notify 方式向中心設備推送數據(需中心設備先開啟 notify 訂閱)。
一個用于定時 更新 特征值數據,中心設備需要主動讀取特征值獲取最新數據。
6.6.2 核心實現
實現兩個定時器回調函數:
send_notify_data_timer_cbfunc:發布SEND_DATA_REQ消息到 ble_server_sender 模塊。
send_write_data_timer_cbfunc:發送SEND_DATA_REQ消息到 ble_server_sender 模塊。
啟動兩個循環定時器,分別綁定上述兩個回調函數。
七、結果展示
7.1 外圍設備接收中心設備的寫入數據
注:nrf connect 作為中心設備,Air8000 作為外圍設備。
1、燒錄示例 demo 到 Air8000 核心板后,手機端打開 nrf connect 藍牙調試軟件,找到廣播的設備名稱為"LuatOS123"的設備并連接。

2、手機連接作為外圍設備的 Air8000 后,界面如下所示:
Generic Access 和 Generic Attribute 是 BLE 共有的服務,Unknown Service 為廣播者自定義添加的服務,點開 Unknown Service ,對應的是自定義的服務 UUID 和特征值 UUID 以及其屬性值。

3、中心設備發送,外圍設備被動接收
手機通過 nrf connect 中服務 UUID=0xFA00,特征值 UUID=0xEA02(可寫操作),向外圍設備發送數據。
nrf connect 操作界面如下:

luatools 日志如下:

7.2 外圍設備向中心設備發送 notify 數據
注:nrf connect 作為中心設備,Air8000 作為外圍設備。外圍設備向中心設備發送 notify 數據,需要中心設備先開啟 notify 訂閱,下圖是 nrf connec 開啟訂閱的方式,點擊圖標”↓↓↓“即可。
點擊圖標”↓↓↓“后,APP 后臺自動監聽從設備 notify 上來的數據,右滑界面,可以看到接收到的每條數據。

八、總結
本文介紹了 Air8000 的 BLE 外圍設備模式,通過示例演示了如何向中心設備發送通知數據,以及如何接收中心設備發過來的數據。
今天的內容就分享到這里了~
審核編輯 黃宇
-
BLE
+關注
關注
13文章
749瀏覽量
66052 -
低功耗藍牙
+關注
關注
1文章
265瀏覽量
22268
發布評論請先 登錄
雙 Air8000 核心板實現 BLE 中心模式的開發實踐 !
Air8000藍牙掃描實戰:從代碼解析到場景應用全攻略
BLE 5.4時代下,Air8000藍牙通知與手機讀寫操作實戰攻略
Air8000藍牙新篇章:BLE 5.4——輕松實現通知推送與手機端設備控制!
北斗GPS雙模賦能Air8000:定位精度革命與天線設計優化的實踐路徑
如何用Air8000打造無線接入點?AP模式操作指南
快速上手Air8000 AP模式:Wi-Fi熱點創建與設備管理
LuatOS藍牙配網全流程解析:Air8000開發入門必備
LuatOS藍牙配網開發全攻略:以Air8000為核心實戰教學
高效開發:解鎖Air8000 LuatOS softAP配網功能的核心技術!
揭秘Air8000對講黑科技:AirTalk+MQTT開發示例深度解析
是否必須使用LuatIO?Air8000 GPIO配置與設計規范深度解析
一招破解音頻硬件困局:Air8000參考設計讓開發零門檻
雙 Air8000 核心板構建 BLE 中心模式通信系統全流程
Air8000 模塊 CAN 接口實戰開發:從入門到配置的完整流程指南

Air8000 BLE外圍模式全解析:數據收發實戰指南!
評論