chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LuatOS平臺(tái)下BLE藍(lán)牙開發(fā)從入門到實(shí)踐

合宙LuatOS ? 來源:合宙LuatOS ? 作者:合宙LuatOS ? 2026-02-02 16:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在資源受限的無線終端設(shè)備中,如何實(shí)現(xiàn)高效、穩(wěn)定的BLE通信是開發(fā)關(guān)鍵。LuatOS憑借其低內(nèi)存占用、高可擴(kuò)展性與腳本化開發(fā)優(yōu)勢(shì),成為眾多開發(fā)者構(gòu)建BLE應(yīng)用的首選平臺(tái)。本文面向初學(xué)者與中級(jí)開發(fā)者,全面介紹LuatOS中BLE模塊的基礎(chǔ)知識(shí),涵蓋角色定義(主機(jī)/從機(jī))、服務(wù)配置、特征值操作與事件回調(diào)機(jī)制,并通過一個(gè)完整的溫濕度數(shù)據(jù)上報(bào)案例,逐步演示應(yīng)用開發(fā)全過程。

一、BLE總體介紹

1.1 什么是BLE(Bluetooth Low Energe)?

藍(lán)牙低功耗,通??s寫為 BLE,是藍(lán)牙技術(shù)聯(lián)盟設(shè)計(jì)的一種個(gè)人區(qū)域網(wǎng)絡(luò)技術(shù),旨在提供顯著降低的功耗、成本和復(fù)雜性,同時(shí)保持可比的通信范圍。

與傳統(tǒng)經(jīng)典藍(lán)牙相比,BLE并非專注于傳輸高數(shù)據(jù)量的內(nèi)容(如音頻流、大文件),而是為間歇性、小數(shù)據(jù)量的傳輸應(yīng)用而優(yōu)化。這使得它非常適合那些需要長(zhǎng)時(shí)間運(yùn)行在紐扣電池或小型電池上的設(shè)備。

應(yīng)用場(chǎng)景舉例:

經(jīng)典藍(lán)牙:

1、藍(lán)牙耳機(jī)/音箱

場(chǎng)景:你用無線耳機(jī)聽音樂、看視頻、打電話。

為什么是經(jīng)典藍(lán)牙:因?yàn)橐纛l流需要持續(xù)、高速、低延遲的傳輸,才能保證聲音連貫不卡頓。

2、車載藍(lán)牙系統(tǒng)

場(chǎng)景:你一上車,手機(jī)就自動(dòng)連接到汽車,可以播放手機(jī)里的音樂,或者進(jìn)行免提通話。

為什么是經(jīng)典藍(lán)牙:和耳機(jī)一樣,傳輸?shù)氖菍?shí)時(shí)的音頻流,對(duì)穩(wěn)定性和速度要求高。

3、藍(lán)牙文件傳輸

場(chǎng)景:兩個(gè)人之間不用網(wǎng)絡(luò),直接通過手機(jī)“藍(lán)牙”功能分享照片、視頻或文檔。

為什么是經(jīng)典藍(lán)牙:傳輸?shù)奈募赡鼙容^大,需要較高的傳輸速率。

4、無線鍵盤、鼠標(biāo)和手柄

場(chǎng)景:連接電腦的無線鍵盤鼠標(biāo),或者連接手機(jī)/游戲機(jī)的藍(lán)牙游戲手柄。

為什么是經(jīng)典藍(lán)牙:雖然數(shù)據(jù)量不大,但它們需要保持持續(xù)連接和極低的延遲,以確保你每次按鍵、移動(dòng)鼠標(biāo)或操作手柄的指令都能被即時(shí)響應(yīng)。

低功耗藍(lán)牙BLE:

1、共享單車開鎖

場(chǎng)景:你用手機(jī)App掃碼后,單車鎖“滴”一聲就打開了。

為什么是BLE:開鎖過程只需要手機(jī)向車鎖發(fā)送一個(gè)極小的加密指令包,傳輸瞬間完成,車鎖的電池需要支撐數(shù)月。

2、智能手環(huán)/手表

場(chǎng)景:你的小米手環(huán)或Apple Watch記錄了你一天的步數(shù)、心率和睡眠數(shù)據(jù)。

為什么是BLE:設(shè)備本身通過小型電池供電,需要續(xù)航數(shù)周。它持續(xù)采集你的健康數(shù)據(jù)(小數(shù)據(jù)包),只在當(dāng)你打開手機(jī)App同步時(shí),才通過BLE將積攢的數(shù)據(jù)批量發(fā)送到手機(jī)上。

3、藍(lán)牙防丟器

場(chǎng)景:你把一個(gè)Tile或AirTag掛在鑰匙上,當(dāng)鑰匙找不到時(shí),用手機(jī)讓防丟器發(fā)出聲音。

為什么是BLE:防丟器絕大部分時(shí)間處于待機(jī)狀態(tài)。當(dāng)你“尋找”它時(shí),手機(jī)通過BLE發(fā)送一個(gè)指令喚醒它,它再回應(yīng)一個(gè)信號(hào)。這種間歇性工作模式讓它的紐扣電池能用一年多。

4、物聯(lián)網(wǎng)傳感器

場(chǎng)景:家里的溫濕度計(jì)、門窗傳感器、智能燈泡。

為什么是BLE:溫度傳感器每隔幾分鐘才上報(bào)一次數(shù)據(jù)(幾個(gè)字節(jié));門窗傳感器只有在開/關(guān)狀態(tài)變化時(shí)才發(fā)送信號(hào)。它們都由電池供電,需要BLE的低功耗特性來保證較長(zhǎng)的續(xù)航。

1.2 BLE的發(fā)展歷史

BLE的發(fā)展與藍(lán)牙技術(shù)的整體演進(jìn)緊密相連。其歷史可以看作是為了滿足物聯(lián)網(wǎng)需求而專門開辟和不斷優(yōu)化的一條技術(shù)路徑。

1、1998-2010:前BLE時(shí)代(經(jīng)典藍(lán)牙主導(dǎo))

說明:經(jīng)典藍(lán)牙(Bluetooth Classic)專注于連續(xù)數(shù)據(jù)流應(yīng)用,如音頻和文件傳輸。功耗較高,不適合物聯(lián)網(wǎng)傳感器。

2、2010:革命性的起點(diǎn) - 藍(lán)牙4.0

說明:藍(lán)牙4.0核心規(guī)范發(fā)布,首次引入了“藍(lán)牙低功耗”技術(shù)。這是一個(gè)里程碑,它創(chuàng)建了兩種并行的技術(shù):經(jīng)典藍(lán)牙和藍(lán)牙低功耗。藍(lán)牙4.0芯片分為三種類型:

單模:僅支持BLE。

雙模:同時(shí)支持經(jīng)典藍(lán)牙和BLE。

經(jīng)典:僅支持經(jīng)典藍(lán)牙。

影響:催生了第一批真正的低功耗物聯(lián)網(wǎng)設(shè)備,如心率帶、智能標(biāo)簽等。

3、2013:同互聯(lián)網(wǎng)融合 - 藍(lán)牙4.1

說明:藍(lán)牙與互聯(lián)網(wǎng)無縫銜接,推動(dòng)智能家居發(fā)展。

支持IPv6直接聯(lián)網(wǎng)

設(shè)備可同時(shí)作為主/從機(jī)

單包容量23字節(jié)(廣播包仍31字節(jié))

4、2014:速度與連接的提升 - 藍(lán)牙4.2

說明:此版本帶來了關(guān)鍵改進(jìn):

數(shù)據(jù)傳輸速度提升:將發(fā)送數(shù)據(jù)包長(zhǎng)度擴(kuò)展,單包容量255字節(jié),提升數(shù)據(jù)傳輸速度。

隱私與安全增強(qiáng):提供了更強(qiáng)大的加密和隱私保護(hù)。

5、2016:物聯(lián)網(wǎng)的基石 - 藍(lán)牙5.0

wKgZO2mAKLGAY6-gAAHbfP1LzoE233.png

說明:這是針對(duì)物聯(lián)網(wǎng)的一次巨大飛躍,主要特性包括:

BLE速度翻倍至2 Mbps,是BLE 4.2的兩倍

理論距離240米(室外)

Mesh網(wǎng)絡(luò)支持

6、2019-2020:專注定向與高精度 - 藍(lán)牙5.1 & 5.2

說明:

藍(lán)牙5.1:引入了尋向功能,通過測(cè)量信號(hào)相位,可以實(shí)現(xiàn)厘米級(jí)精度的室內(nèi)定位,解決了“在哪里”的問題。

藍(lán)牙5.2:引入了LE Audio的核心——低功耗同步信道,為下一代藍(lán)牙音頻奠定了基礎(chǔ),同時(shí)提升了多設(shè)備連接效率和功耗控制。

7、2021-2023:音頻革命與未來 - 藍(lán)牙5.3 & 5.4

說明:

持續(xù)優(yōu)化:藍(lán)牙5.3/5.4進(jìn)一步優(yōu)化了連接穩(wěn)定性、延遲和安全性。

LE Audio:基于藍(lán)牙5.2及更高版本,它使用全新的LC3編碼器,在更低功耗下提供更高質(zhì)量的音頻,并支持廣播音頻(如助聽器、多人共享音頻)等創(chuàng)新應(yīng)用。

Mesh網(wǎng)絡(luò):雖然規(guī)范更早推出,但正隨著BLE的普及而廣泛應(yīng)用,允許成千上萬個(gè)設(shè)備組成一個(gè)龐大的網(wǎng)絡(luò),用于智能樓宇、工業(yè)控制等場(chǎng)景。

8、2024: 藍(lán)牙6.0

說明:

引入Bluetooth Channel Sounding,通過RTT(round-trip time) 和 PBR(phase-based ranging)技術(shù)(類似蘋果的UWB),能夠準(zhǔn)確測(cè)量藍(lán)牙設(shè)備間的物理距離。

二、BLE協(xié)議棧介紹

在開始講LuatOS的BLE之前,先大概了解下BLE的協(xié)議棧。

2.1 BLE低功耗協(xié)議棧介紹

wKgZPGmAKTmARON7AAOEPM5B_oE957.png

BLE協(xié)議棧主要用來對(duì)你的應(yīng)用數(shù)據(jù)進(jìn)行層層封包,以生成一個(gè)滿足BLE協(xié)議的空中數(shù)據(jù)包。也就是說,把應(yīng)用數(shù)據(jù)包裹在一系列的幀頭(header)和幀尾(tail)中。

藍(lán)牙協(xié)議規(guī)定了兩個(gè)層次的協(xié)議,分別是:

(1)藍(lán)牙核心協(xié)議(Bluetooth Core)

這是藍(lán)牙技術(shù)的基礎(chǔ),規(guī)定了從無線電波收發(fā)到數(shù)據(jù)鏈路管理的所有底層技術(shù)細(xì)節(jié)。它確保了不同廠商設(shè)備之間的基本互聯(lián)互通。核心協(xié)議層通常又分為控制器(Controller) 和主機(jī)(Host) 兩個(gè)子部分。

(2)藍(lán)牙應(yīng)用層協(xié)議(Bluetooth Application)

建立在核心協(xié)議之上,定義了如何利用核心協(xié)議來實(shí)現(xiàn)具體的功能和服務(wù)。例如,心率監(jiān)測(cè)、血壓計(jì)、鍵盤鼠標(biāo)等具體應(yīng)用場(chǎng)景的規(guī)范。

2.2 BLE低功耗藍(lán)牙核心協(xié)議層詳解(Bluetooth Core)

2.2.1 物理層(PHY)

PHY層用來指定BLE所用的無線頻段,調(diào)制解調(diào)方式和方法等。

藍(lán)牙工作在2.4GHz的頻段,具體的頻段范圍是2400MHz到2483.5MHz,頻段寬度為83.5MHz。BLE將這83.5MHz的寬度分成了0到39共40個(gè)通道,每一個(gè)通道寬度為2MHz。

下面我們看下藍(lán)牙的波形圖:

wKgZPGmAKdOAPB92AAiUpqJwZXQ447.png

其中廣播通道為37/38/39,對(duì)應(yīng)的中心頻率分別為2402MHz,2426MHz,2480MHz。BLE在廣播的時(shí)候會(huì)輪流使用這3個(gè)廣播通道進(jìn)行廣播。

數(shù)據(jù)通道為0-36,專門用于在設(shè)備連接建立之后,傳輸用戶數(shù)據(jù)和命令。

從圖中可以看到BLE的3個(gè)廣播通道并不是連續(xù)的,這三個(gè)信道和藍(lán)牙廣播關(guān)系密切,用于設(shè)備被發(fā)現(xiàn)。

為什么不是連續(xù)的?

這就需要看下wifi的信道劃分了,wifi同樣也是工作在2.4GHz頻段下,如果BLE處理不當(dāng),自然會(huì)被wifi影響。

下面我們來詳細(xì)分析Wi-Fi如何影響B(tài)LE,以及BLE的應(yīng)對(duì)策略。

wKgZO2mAKg6AJaakAAFx6EcLYws794.png


Wi-Fi 對(duì)BLE的影響機(jī)制

根本原因在于頻段重疊:

BLE: 工作在 2.400 - 2.4835 GHz,使用 40 個(gè) 2MHz 寬的信道。

Wi-Fi(2.4GHz): 同樣工作在 2.412 - 2.472 GHz(通常),使用 20MHz 或 40MHz 寬的信道。

可以想象一下,Wi-Fi的一個(gè)信道就像一條寬闊的八車道高速公路,而BLE的一個(gè)信道就像是其中的一條自行車道。當(dāng)Wi-Fi這條高速公路車流繁忙時(shí),自然會(huì)影響到在旁邊自行車道上行駛的BLE。

具體來說:

1、物理信道重疊:

Wi-Fi的1, 6, 11這三個(gè)最常用的非重疊信道,會(huì)覆蓋一大片BLE的信道。

例如,Wi-Fi信道1(中心頻率2.412 GHz)會(huì)干擾BLE的數(shù)據(jù)信道0到10。

Wi-Fi信道6(中心頻率2.437 GHz)會(huì)干擾BLE中間部分的數(shù)據(jù)信道。

Wi-Fi信道11(中心頻率2.462 GHz)會(huì)干擾BLE的數(shù)據(jù)信道22到36。

2、影響類型:

數(shù)據(jù)包丟失: BLE數(shù)據(jù)包在傳輸過程中被Wi-Fi信號(hào)淹沒,導(dǎo)致接收端無法正確解碼。

連接中斷: 如果數(shù)據(jù)包持續(xù)丟失,可能導(dǎo)致連接超時(shí)而斷開。

廣播受阻: 設(shè)備更難被發(fā)現(xiàn)或連接,因?yàn)閺V播信道(特別是38)可能被干擾。

功耗增加: 為了補(bǔ)償丟失的數(shù)據(jù)包,設(shè)備需要更頻繁地重傳數(shù)據(jù),從而增加了功耗。

BLE的應(yīng)對(duì)策略(為什么影響通常不大)

1、自適應(yīng)跳頻【藍(lán)牙跳頻(Frequency Hopping)技術(shù))】

藍(lán)牙技術(shù)使用跳頻擴(kuò)頻(FHSS)來避免干擾和多徑衰減。跳頻是指藍(lán)牙設(shè)備在通信過程中,按照一定的序列在不同的信道之間快速切換。這樣,即使某個(gè)信道受到干擾,也可以在其他信道上繼續(xù)通信,從而保證整體的通信質(zhì)量。

這是BLE對(duì)抗Wi-Fi干擾的方式。在連接狀態(tài)下,BLE主從設(shè)備會(huì)在37個(gè)數(shù)據(jù)信道上快速切換。

它們會(huì)持續(xù)監(jiān)測(cè)每個(gè)信道的通信質(zhì)量。如果一個(gè)信道(比如被Wi-Fi信道6占據(jù)的區(qū)域)頻繁出錯(cuò),系統(tǒng)會(huì)將其標(biāo)記為“壞信道”,并在未來的跳頻序列中自動(dòng)避開。

這樣,即使有40%的信道被Wi-Fi干擾,通信依然可以通過剩下60%的干凈信道可靠進(jìn)行。

2、廣播信道的巧妙設(shè)計(jì)

BLE的3個(gè)廣播信道(37, 38, 39)被特意安排在2.4GHz頻段的兩端和正中間。

這個(gè)設(shè)計(jì)就是為了最大化地避開Wi-Fi最常用的1、6、11信道。 - 信道37(2402MHz): 在Wi-Fi信道1的左側(cè),基本安全。 - 信道39(2480MHz): 在Wi-Fi信道11的右側(cè),基本安全。 - 信道38(2426MHz): 位于Wi-Fi信道1和6之間,是最容易受到干擾的廣播信道。

廣播時(shí),設(shè)備會(huì)在三個(gè)信道上都發(fā)送數(shù)據(jù),只要有一個(gè)被手機(jī)接收到,連接就能建立。這大大提高了在干擾環(huán)境下的發(fā)現(xiàn)概率。

2.2.2 鏈路層(LL)

LL 位于物理層(PHY)之上,主機(jī)控制器接口(HCI)之下,是 BLE 協(xié)議棧中負(fù)責(zé)報(bào)文組裝/拆解、時(shí)序控制、信道管理、狀態(tài)機(jī)切換、安全加密等的核心模塊。

鏈路層定義了兩個(gè)設(shè)備如何利用無線電傳輸信息。它包含了報(bào)文、廣播、數(shù)據(jù)信道的詳細(xì)定義,也規(guī)定了發(fā)現(xiàn)其他設(shè)備的流程、廣播的數(shù)據(jù)、連接的建立、連接的管理以及連接中的數(shù)據(jù)傳輸。

LL層只負(fù)責(zé)把數(shù)據(jù)發(fā)出去或者收回來,對(duì)數(shù)據(jù)進(jìn)行怎樣的解析則交給上面的GAP或者ATT。

LL層收到的數(shù)據(jù),主要交給 ATT 進(jìn)行解析,以服務(wù)于 GATT 定義的應(yīng)用邏輯。而 GAP 主要處理LL層上報(bào)的連接和廣播狀態(tài)事件,而非解析具體的數(shù)據(jù)內(nèi)容。

主要功能:

廣播與掃描:支撐無連接的廣播通信。

建立與維護(hù)連接:完成從掃描→發(fā)起→連接確認(rèn)的流程,并維護(hù)連接事件。

數(shù)據(jù)交換:基于信道跳頻機(jī)制可靠傳輸 ACL 數(shù)據(jù)包。

安全管理:執(zhí)行加密、鑒權(quán)與隱私地址解析。

控制流程:實(shí)現(xiàn)連接參數(shù)更新、信道映射更新、數(shù)據(jù)長(zhǎng)度擴(kuò)展等 LL Control PDUs。

LL層主要有5種狀態(tài):

待機(jī)狀態(tài)(Standby State)

廣播狀態(tài)(Advertising State)

掃描狀態(tài)(Scanning State)

發(fā)起狀態(tài)(Initiating State)

連接狀態(tài)(Connection State)

wKgZO2mAK0KAGjYwAACtqxLSrMU008.png

下面我們?cè)敿?xì)解釋每個(gè)狀態(tài):

1、待機(jī)狀態(tài)(Standby State)

這是鏈路層的默認(rèn)狀態(tài),設(shè)備既不發(fā)送也不接收數(shù)據(jù)。

功耗最低,設(shè)備可以在此狀態(tài)下初始化或等待其他操作。

2、廣播狀態(tài)(Advertising State)

設(shè)備通過發(fā)送廣播報(bào)文來宣告自己的存在。

廣播報(bào)文可以包含設(shè)備地址、名稱、服務(wù)等信息。

設(shè)備可以配置為不同的廣播類型(如可連接廣播、非可連接廣播、可掃描廣播等)。

3、掃描狀態(tài)(Scanning State)

設(shè)備監(jiān)聽廣播報(bào)文,分為主動(dòng)掃描和被動(dòng)掃描。

被動(dòng)掃描:僅接收廣播報(bào)文,不發(fā)送掃描請(qǐng)求。

主動(dòng)掃描:在收到可掃描的廣播報(bào)文后,發(fā)送掃描請(qǐng)求以獲取更多信息(掃描響應(yīng))。

4、發(fā)起狀態(tài)(Initiating State)

設(shè)備監(jiān)聽特定設(shè)備的廣播報(bào)文,并在收到后發(fā)起連接請(qǐng)求。

只有設(shè)備配置為發(fā)起模式時(shí)才會(huì)進(jìn)入此狀態(tài)。

5、連接狀態(tài)(Connection State)

當(dāng)發(fā)起設(shè)備發(fā)送連接請(qǐng)求并被廣播設(shè)備接受后,雙方進(jìn)入連接狀態(tài)。

在連接狀態(tài)下,設(shè)備分為主設(shè)備和從設(shè)備。

中心設(shè)備(Central):發(fā)起連接的設(shè)備。

外圍設(shè)備(Peripheral):接受連接的設(shè)備。

在連接狀態(tài)下,鏈路層會(huì)維護(hù)一個(gè)連接事件(Connection Events),在每個(gè)連接事件中,主設(shè)備和從設(shè)備可以進(jìn)行數(shù)據(jù)包的交換。連接事件按照連接間隔(Connection Interval)周期性地發(fā)生。

2.2.3 主機(jī)控制接口層(HCI)

HCI 是 Host-Controller Interface 的縮寫,即 “主機(jī)-控制器接口”。

它本質(zhì)上是一套軟件層面的規(guī)范和協(xié)議,定義了藍(lán)牙協(xié)議棧中兩個(gè)主要部分——主機(jī)(Host) 和控制器(Controller)——之間應(yīng)該如何通信。

Host 和 Controller 是什么?

要理解HCI,首先必須明白藍(lán)牙協(xié)議棧是如何分層的:

Controller:負(fù)責(zé)處理所有底層、實(shí)時(shí)性要求高的無線射頻任務(wù)。 - 包含協(xié)議層:物理層、鏈路層。 - 職責(zé):管理無線電信號(hào)、調(diào)制解調(diào)、跳頻、數(shù)據(jù)包時(shí)序、廣播、掃描等。它直接與硬件打交道。

Host:負(fù)責(zé)處理所有高層、應(yīng)用邏輯相關(guān)的任務(wù)。 - 包含協(xié)議層:L2CAP、ATT、GATT、SM以及最終的應(yīng)用程序。 - 職責(zé):管理連接、定義服務(wù)與特征、處理加密安全、為應(yīng)用程序提供API

2.2.4 邏輯鏈路控制及自適應(yīng)協(xié)議層(L2CAP)

L2CAP對(duì)LL進(jìn)行了一次簡(jiǎn)單封裝。LL層只關(guān)心傳輸?shù)臄?shù)據(jù)本身,L2CAP就要區(qū)分加密通道還是普通通道,同時(shí)還要對(duì)連接間隔進(jìn)行管理。

L2CAP是藍(lán)牙協(xié)議棧的“交通調(diào)度中心”和“數(shù)據(jù)包裝工”。 它位于基礎(chǔ)射頻協(xié)議之上,但低于應(yīng)用層協(xié)議(如ATT/GATT),充當(dāng)一個(gè)承上啟下的多路復(fù)用和數(shù)據(jù)適配層。

2.2.5 屬性協(xié)議層(ATT)

ATT全稱是Attribute protocol(數(shù)據(jù)交互協(xié)議),這一層的關(guān)鍵詞是Attribute(屬性)。一個(gè)屬性其實(shí)就是一條數(shù)據(jù),屬性是BLE數(shù)據(jù)提供單元,也是藍(lán)牙空中傳播數(shù)據(jù)的最上層。

ATT層定義了各種屬性,屬性的操作方法。通過ATT層可以讀寫對(duì)端設(shè)備的屬性,但是屬性之間有什么聯(lián)系、各個(gè)屬性怎么組合起來提供服務(wù),由上層GATT負(fù)責(zé)。

屬性,是ATT層的關(guān)鍵字。

2.2.6 通用訪問配置文件層(GAP)

Generic Access Profile(通用訪問配置規(guī)范),主要用來進(jìn)行廣播、掃描和發(fā)起連接等。

GAP層將設(shè)備分為四種角色,分別是外圍設(shè)備,中心設(shè)備,廣播設(shè)備和觀察設(shè)備。

這些設(shè)備圍繞著廣播和連接的差異性而區(qū)分,外圍設(shè)備和廣播設(shè)備對(duì)外發(fā)出廣播數(shù)據(jù),中心設(shè)備和觀察設(shè)備掃描外部廣播數(shù)據(jù),廣播設(shè)備和觀察設(shè)備通常不建立連接,而外圍設(shè)備和中心設(shè)備可以建立連接。

圍繞著廣播和連接,GAP層定義了許多不同的"模式(mode)",比如廣播模式和連接模式,在不同模式下的操作稱為“規(guī)程(procedure)”。

例如:當(dāng)一個(gè)設(shè)備正在進(jìn)行廣播時(shí),稱其為"廣播模式"。廣播往往會(huì)持續(xù)較長(zhǎng)時(shí)間,也許是該設(shè)備唯一用途。而當(dāng)一個(gè)設(shè)備正在尋找廣播者時(shí),稱其為"觀察規(guī)程"。觀察往往持續(xù)一段較短時(shí)間,用以構(gòu)建用戶界面或者尋找需要的指定信息。

2.2.7 通用屬性配置文件層(GATT)

GATT(Generic Attribute Profile, 通用屬性規(guī)范),自己本身不提供數(shù)據(jù),而是將ATT層提供的屬性組合起來構(gòu)成的服務(wù)。GATT是建立連接后通信規(guī)范, 而藍(lán)牙是通過GAP建立通信的。

在BLE里,通過ATT層可以讀寫對(duì)端設(shè)備的屬性,但是屬性之間有什么聯(lián)系、各個(gè)屬性怎么組合起來提供服務(wù),由上層GATT負(fù)責(zé)。

服務(wù),是GATT層的關(guān)鍵字。

注意:

GATT 連接,必須先經(jīng)過GAP協(xié)議。

一旦兩個(gè)設(shè)備建立起了連接,GATT 就開始起作用了。

中心設(shè)備和外設(shè)需要雙向通信的話,唯一的方式就是建立GATT 連接。

GATT 定義兩個(gè)BLE設(shè)備通過服務(wù)(Service)和特征(Characteristic)進(jìn)行通信。

1、GATT(通用屬性配置文件)

定義 BLE 設(shè)備如何組織和傳輸數(shù)據(jù),以 “服務(wù)(Service)” 和 “特征(Characteristic)” 為單位。

示例:心率監(jiān)測(cè)設(shè)備的 GATT 服務(wù)包含 “心率特征”,手機(jī)通過讀取該特征獲取心率數(shù)據(jù)。

2、服務(wù)和特征

服務(wù)是特征的容器,通過邏輯分組簡(jiǎn)化復(fù)雜功能的管理;

特征是數(shù)據(jù)交互的最小單元,通過屬性定義實(shí)現(xiàn)靈活的讀寫與推送機(jī)制;

兩者結(jié)合構(gòu)成 GATT 協(xié)議的核心框架,支撐藍(lán)牙設(shè)備間的標(biāo)準(zhǔn)化數(shù)據(jù)交互(如智能穿戴、醫(yī)療設(shè)備、物聯(lián)網(wǎng)傳感器)。

3、特征的關(guān)鍵屬性(Properties)

特征通過 “屬性” 定義數(shù)據(jù)的操作方式,常見屬性包括:

1)可讀(Read):允許客戶端讀取特征值(如讀取電池電量)。

2)可寫(Write):允許客戶端寫入特征值(如設(shè)置設(shè)備參數(shù))。

3)通知(Notification):服務(wù)端主動(dòng)發(fā)送特征值更新(如心率變化時(shí)推送給手機(jī))。

4、UUID

UUID 是藍(lán)牙 GATT 協(xié)議的 “數(shù)字身份證”,通過標(biāo)準(zhǔn)化的唯一標(biāo)識(shí)機(jī)制,實(shí)現(xiàn)了跨廠商設(shè)備的功能互認(rèn)(標(biāo)準(zhǔn) UUID)與廠商個(gè)性化功能的擴(kuò)展(自定義 UUID)

三、LuatOS BLE 的四種工作模式解析

在前面的章節(jié)中,我們介紹了 BLE 的背景以及基礎(chǔ)理論知識(shí)。若要深入了解其協(xié)議細(xì)節(jié),讀者可參考其他專業(yè)的資料。

從本部分開始,我們將聚焦于 LuatOS 的實(shí)際開發(fā),重點(diǎn)講解其支持的 四種核心 BLE 工作模式,并通過實(shí)例展示如何應(yīng)用。

3.1 模式解釋

外圍設(shè)備模式(peripheral):設(shè)備會(huì)被掃描到, 并且可以被連接;

中心設(shè)備模式(central):設(shè)備會(huì)掃描其他設(shè)備, 并且可以連接其他設(shè)備;

廣播者模式(ibeacon):設(shè)備會(huì)周期性的廣播beacon信息, 可以被掃描到, 但一般不會(huì)被連接;

觀察者模式(scan):設(shè)備會(huì)掃描其他設(shè)備, 但不會(huì)連接其他設(shè)備。

3.2 四種模式的基本流程

3.2.1外圍設(shè)備模式(peripheral)的基本流程(概要描述)

1、初始化藍(lán)牙框架

? bluetooth_device = bluetooth.init()

2、創(chuàng)建BLE對(duì)象

? local ble_device = bluetooth_device:ble(ble_callback)

3、創(chuàng)建GATT描述

? local att_db = {xxx}

4、創(chuàng)建廣播信息

? ble_device:adv_create(adv_data)

5、開始廣播

? ble_device:adv_start()

6、等待連接

7、在回調(diào)函數(shù)中處理連接事件, 如接收數(shù)據(jù), 發(fā)送數(shù)據(jù)等

3.2.2中心設(shè)備模式(central)的基本流程(概要描述)

1、初始化藍(lán)牙框架

bluetooth_device = bluetooth.init()

2、創(chuàng)建BLE對(duì)象

? local ble_device = bluetooth_device:ble(ble_callback)

3、掃描目標(biāo)BLE設(shè)備

? ble_device:scan_start()

4、建立與目標(biāo)設(shè)備的連接

? ble_device:connect(mac, add_type)

5、處理各類BLE事件(連接、斷開連接、掃描報(bào)告、GATT操作完成等)

3.2.3廣播者模式(ibeacon)的基本流程(概要描述)

1、初始化藍(lán)牙底層框架

? bluetooth_device = bluetooth.init()

2、創(chuàng)建BLE對(duì)象

? local ble_device = bluetooth_device:ble(ble_callback)

3、配置ibeacon廣播數(shù)據(jù)包

? 包含廠商特定數(shù)據(jù)格式,ibeacon類型標(biāo)識(shí)符

? 設(shè)置UUID、Major、Minor等關(guān)鍵參數(shù)

4、啟動(dòng)BLE廣播功能

? ble_device:adv_start()

3.2.4觀察者模式(scan)的基本流程(概要描述)

1、初始化藍(lán)牙框架

? bluetooth_device = bluetooth.init()

2、創(chuàng)建BLE對(duì)象

? local ble_device = bluetooth_device:ble(ble_callback)

3、開始掃描

? ble_device:scan_start()

4、在回調(diào)函數(shù)中處理掃描事件, 如接收設(shè)備信息等

5、按需停止掃描

? ble_device:scan_stop()

3.3 應(yīng)用場(chǎng)景

3.3.1 外圍設(shè)備+中心設(shè)備(連接模式)

設(shè)計(jì)框圖:

wKgZO2mALjGAZQbXAAK457UaX-Y837.png

3.3.2 廣播者+觀察者(無連接模式)

設(shè)計(jì)框圖:

wKgZO2mALnSAGV7KAAHeOw9PJjg231.png

四、LuatOS上的BLE核心庫

4.1 常量詳解

4.1.1地址模式常量

ble.PUBLIC

wKgZPGmALuCAc8GzAADsXctWAlI129.png

4.1.2 特征屬性常量

ble.READ

wKgZPGmALw6AJrX8AAGJQwn9a0Q873.png

ble.WRITE

wKgZO2mALy-AYvVjAAGF_J9P4Yk698.png

ble.NOTIFY

wKgZO2mAL2iAM_-uAAGfGqHojQM344.png

ble.IND

wKgZO2mAL7eAVUezAAGaTxB9iXI330.png

ble.WRITE_CMD

wKgZPGmAL9qAHlQqAAGG37aI5fI912.png

4.1.3 事件類型常量

ble.EVENT_CONN

wKgZPGmAMBKANeQOAAFV2t1EEMk296.png

ble.EVENT_DISCONN

wKgZPGmAMDuAEVVDAAFNUNHisnU279.png

ble.EVENT_WRITE

wKgZO2mAMGWAJs0PAAIlhoQ2NFc733.png

ble.EVENT_READ_VALUE

wKgZPGmAMIyAOCiEAAIDM6yQyWk056.png

ble.EVENT_SCAN_REPORT

wKgZPGmAMMGAPbKXAAHOb6I8Zik331.png

ble.EVENT_GATT_ITEM

wKgZO2mAMOaAe71WAAF5FLWOSxs978.png

ble.EVENT_GATT_DONE

wKgZO2mAMQuAGgQyAAHQ9lzOHeM371.png

ble.EVENT_SCAN_STOP

wKgZPGmAMS-AQFgwAAEuBqM9tkQ169.png

4.1.4 廣播相關(guān)常量

ble.COMPLETE_LOCAL_NAME

wKgZPGmAMXmARIr-AAD9muUPNx4386.png

ble.CHNLS_ALL

wKgZPGmAMaqAYve-AADwTVx4eFA561.png

ble.CHNL_37

wKgZPGmAMcqALYFcAADiqSyYTvM493.png

ble.CHNL_38

wKgZPGmAMf-AR6WyAADmB-KhXAU928.png

ble.CHNL_39

wKgZO2mAMiCAZ745AAD73PAMHY0854.png


ble.FLAGS

wKgZPGmAMj-AfB1jAAENYpEmzgI878.png

ble.FLAGS 說明

在BLE中,標(biāo)志(flags)通常出現(xiàn)在廣播數(shù)據(jù)中,這些標(biāo)志用于指示設(shè)備的能力和可發(fā)現(xiàn)性等。

根據(jù)藍(lán)牙核心規(guī)范(Bluetooth Core Specification),廣播數(shù)據(jù)中的Flags字段是一個(gè)8位的位圖(bitmask),每個(gè)位代表特定的含義,以下是各個(gè)位的定義(從LSB到MSB):

Bit 0: LE Limited Discoverable Mode(有限可發(fā)現(xiàn)模式)

Bit 1: LE General Discoverable Mode(通用可發(fā)現(xiàn)模式,設(shè)備持續(xù)可被發(fā)現(xiàn))

Bit 2: BR/EDR Not Supported(不支持經(jīng)典藍(lán)牙)

Bit 3: Simultaneous LE and BR/EDR to Same Device Capable(同一設(shè)備同時(shí)支持BLE和經(jīng)典藍(lán)牙)

Bit 4: Simultaneous LE and BR/EDR to Different Devices Capable(支持同時(shí)連接不同設(shè)備的BLE和經(jīng)典藍(lán)牙)

Bit 5-7: 保留(Reserved)

注意:Bit 0和Bit 1不能同時(shí)被設(shè)置。如果同時(shí)設(shè)置,則視為無效。

Bit1和Bit2被設(shè)置時(shí),F(xiàn)lags字段的值為0x06(二進(jìn)制0000 0110),

Bit2被設(shè)置時(shí),F(xiàn)lags字段的值為0x04(二進(jìn)制0000 0100)。

ble.SERVICE_DATA

wKgZO2mAMqGAT5ZJAAERvtZDFmQ080.png

ble.MANUFACTURER_SPECIFIC_DATA

wKgZPGmAMr6AYkZ2AAFH_HZSzp8252.png

4.2 函數(shù)詳解

bluetooth.init()

功能

初始化藍(lán)牙框架

注意事項(xiàng)

必須在使用藍(lán)牙功能之前調(diào)用;

僅需要調(diào)用一次,若創(chuàng)建失敗, 會(huì)返回nil, 請(qǐng)檢查內(nèi)存是否足夠。

參數(shù)

返回值

local bluetooth_device = bluetooth.init()

bluetooth_device

wKgZPGmAMxOAANEEAAFMvYuucbY108.png

示例

wKgZPGmAM1iAGgKAAACVyAqQsNo214.png

bluetooth_device:ble(ble_callback)

功能

創(chuàng)建一個(gè)BLE對(duì)象, 用于操作BLE設(shè)備

注意事項(xiàng)

必須在bluetooth.init()初始化成功后調(diào)用;

對(duì)象生命周期管理 :BLE對(duì)象需要在整個(gè)操作周期內(nèi)保持有效,從初始化到最終釋放;

全局/模塊級(jí)變量推薦 :為了確保對(duì)象在需要時(shí)始終可用,通常建議將BLE對(duì)象定義在合適的作用域中:

模塊級(jí)變量:適用于單個(gè)模塊內(nèi)部使用

全局變量:適用于跨模塊訪問

作為參數(shù)傳遞

參數(shù)

ble_callback

wKgZPGmAM7mAfNb2AAG78zSZenk895.png

返回值

local ble_device = bluetooth_device:ble(ble_callback)

ble_device

wKgZO2mAM-OAR6D5AAEyfG_o0uU688.png

示例

wKgZO2mANBOAFAgGAAmbCLR218o790.png

ble_device:scan_create(addr_mode,scan_interval,scan_window)

功能

創(chuàng)建一個(gè)BLE掃描

注意事項(xiàng)

參數(shù)

addr_mode

wKgZPGmANEqAYxNpAADeVavk_jA960.png

scan_interval

wKgZPGmANGqAOQmfAADq7y3yJd0512.png

scan_window

wKgZO2mANJ6AKBF0AAETfWLpFw8146.png

返回值

local result = ble_device:scan_create(addr_mode,scan_interval,scan_window)

result

wKgZPGmANMKAVvYbAADjbD48c-Y592.png

示例

wKgZO2mANO6AEyfEAABCzgNyNrI794.png

ble_device:scan_start()

功能

開始BLE掃描

注意事項(xiàng)

掃描會(huì)一直進(jìn)行, 直到調(diào)用ble.scan_stop()停止掃描;

掃描到結(jié)果會(huì)觸發(fā)ble.EVENT_SCAN_REPORT事件,執(zhí)行通過bluetooth_device:ble(ble_callback)創(chuàng)建BLE對(duì)象時(shí)注冊(cè)的回調(diào)函數(shù);

掃描到同一個(gè)設(shè)備不會(huì)去重, 掃描到數(shù)據(jù)就會(huì)執(zhí)行回調(diào)。

參數(shù)

返回值

local result = ble_device:scan_start()

result

wKgZPGmANSKAfqJcAADgUJbELpU377.png

示例

wKgZPGmANX2AdOy7AAA2xX-bWsg222.png


ble_device:scan_stop()

功能

停止BLE掃描

注意事項(xiàng)

掃描會(huì)一直進(jìn)行, 直到調(diào)用ble.scan_stop()停止掃描。

參數(shù)

返回值

local result = ble_device:scan_stop()

result

wKgZO2mANZ6AdfNIAAD5S2rVd1s865.png

示例

wKgZO2mANeeADDtDAAA2FDl3EaQ452.png


ble_device:connect(mac, addr_type)

功能

發(fā)起B(yǎng)LE連接請(qǐng)求

注意事項(xiàng)

參數(shù)

mac

wKgZO2mANhuAJRs0AAFSrpVyGp4207.png

addr_type

wKgZO2mANoaAVp9vAAC6CNoDO0U160.png


返回值

local result = ble_device:connect(mac, addr_type)

result

wKgZPGmANrCAcRVxAAG_YcAKDXY860.png

示例

wKgZO2mANtOAfTbDAABSUUe06DI358.png

ble_device:disconnect()

功能

發(fā)起B(yǎng)LE斷開連接請(qǐng)求

注意事項(xiàng)

參數(shù)

返回值

local result = ble_device:disconnect()

result

wKgZPGmANx2AbadDAAHDb2lIU68693.png

示例

wKgZO2mAN2eAD-HjAAA8cYA0mi0523.png

ble_device:gatt_create(opts)

功能

創(chuàng)建一個(gè)BLE GATT服務(wù)

注意事項(xiàng)

確保UUID格式正確,且特征屬性使用正確的權(quán)限常量;

特征屬性必須是 ble.NOTIFY | ble.READ | ble.WRITE | ble.IND 的一種或多種組合;

參數(shù)

opts

wKgZPGmAN6KAaHQ2AAF8B-eoJZ8573.png

返回值

local result = ble_device:gatt_create(opts)

result

wKgZPGmARIKAQqPvAADw_2SrnYk424.png

示例

wKgZPGmAROyAHB1CAAGr94eWZzI509.png

ble_device:adv_create(opts)

功能

創(chuàng)建一個(gè)BLE廣播

注意事項(xiàng)

參數(shù)

opts

wKgZPGmART2AM0v0AAI-gL9Zyt8004.png

返回值

local result = ble:adv_create(opts)

result

wKgZO2mARW-AF-KmAADVyaCADxw821.png

示例

wKgZO2mARcyAXxTfAAHyr6FSUu8063.png

ble_device:adv_start()

功能

開始廣播

注意事項(xiàng)

對(duì)于外圍設(shè)備模式, 如果被斷開了連接, 則需要重新開始廣播, 才能被重新搜索到

參數(shù)

返回值

local result = ble_device:adv_start()

result

wKgZO2mARfuAdFnoAADWOb7FtyU134.png

示例

wKgZO2mARjiACVn-AAAxEErsShs747.png

ble_device:adv_stop()

功能

主動(dòng)停止廣播

注意事項(xiàng)

參數(shù)

返回值

local result = ble_device:adv_stop()

result

wKgZO2mARleAGRKLAADUl3fX4_I681.png

示例

wKgZPGmARySANA8BAAAv3H5NtPs054.png

ble_device:write_notify(opts,value)

功能

寫入帶通知的特征值

注意事項(xiàng)

外圍設(shè)備使用,主動(dòng)向中心設(shè)備發(fā)送通知數(shù)據(jù)

參數(shù)

opts

wKgZO2mAR0KARO4vAAD-6fh6hHQ415.png

value

wKgZO2mAR3CAAttdAACApW-___A364.png

返回值

local result = ble_device:write_notify(opts,value)

result

wKgZO2mAR6WAZtzTAADUmSnZrjc052.png

示例

wKgZO2mAR7qAT0_CAACqUlRPtK0817.png

ble_device:write_indicate(opts,value)

功能

寫入帶指示的特征值

注意事項(xiàng)

外圍設(shè)備使用,主動(dòng)向中心設(shè)備發(fā)送指示數(shù)據(jù)

參數(shù)

opts

wKgZO2mAR0KARO4vAAD-6fh6hHQ415.png

value

wKgZO2mAR3CAAttdAACApW-___A364.png


返回值

local result = ble:write_indicate(opts,value)

result

wKgZPGmASKqADpwdAADRGU_r6S8026.png

示例

wKgZO2mASRKAVV35AACqe5xSiM0656.png

ble_device:write_value(opts,value)

功能

寫入特征值

注意事項(xiàng)

參數(shù)

opts

wKgZO2mAR0KARO4vAAD-6fh6hHQ415.png

value

wKgZO2mAR3CAAttdAACApW-___A364.png

返回值

local result = ble_device:write_value(opts,value)

result

wKgZO2mASdeAHZKVAADU6F53iqc450.png

示例

wKgZO2mASfGAdmUkAAC04LqKF7E351.png

ble_device:read_value(opts)

功能

讀取特征值

注意事項(xiàng)

參數(shù)

opts

wKgZPGmAShmAE1H9AAEDMurogPI516.png

返回值

local result = ble_device:read_value(opts)

result

wKgZPGmASkCAeyWfAAD7aYfldOI408.png

示例

wKgZPGmASmGAJlAeAACum2IrJ9Q906.png

ble_device:notify_enable(opts,enable)

功能

開關(guān)通知監(jiān)聽

注意事項(xiàng)

中心設(shè)備使用,配置是否接收外圍設(shè)備發(fā)送的通知消息

參數(shù)

opts

wKgZO2mASpOAdsCIAAEHAgLcMy8445.png

enable

wKgZPGmASuGASNcAAACOuRTKe6k963.png


返回值

local result = ble_devie:notify_enable(opts,enable)

result

wKgZO2mASvmAKXeJAADgJg8eZHE132.png

示例

wKgZO2mASxqATtKBAACQDSf4riw505.png

ble_device:indicate_enable(opts,enable)

功能

開關(guān)指示監(jiān)聽

注意事項(xiàng)

中心設(shè)備使用,配置是否接收外圍設(shè)備發(fā)送的指示消息

參數(shù)

opts

wKgZPGmAS0KAB_JEAAEFTaN014w192.png

enable

wKgZO2mAS46ATBVEAACLKvHvHPY510.png


返回值

local result = ble_device:indicate_enable(opts,enable)

result

wKgZPGmAS6GAfSKmAADgyQ4TXwE067.png

示例

wKgZPGmAS8yAKYrjAACQplMnzZQ748.png

ble_device:adv_decode(data)

功能

解碼廣播數(shù)據(jù)

注意事項(xiàng)

廣播數(shù)據(jù)通常來自于ble.EVENT_SCAN_REPORT 事件的ble_param.data

參數(shù)

data

wKgZPGmAS-OAGcIEAACJXlPRHjg672.png

返回值

local adv_data = ble_device:adv_decode(data)

adv_data

wKgZO2mATD6AAyZhAAHCrooX2FM654.png

示例

wKgZO2mATFqAfoN0AAC22oHGHG4594.png

ble.mac()

功能

獲取藍(lán)牙MAC

注意事項(xiàng)

參數(shù)

返回值

local mac = ble.mac

mac

wKgZPGmATHiAZpi4AAHGx6PcVko031.png

示例

wKgZPGmATKeAGCm6AABaXny6bSM960.png

五、LuatOS上的BLE 應(yīng)用開發(fā)流程

本部分將深入一項(xiàng)具體實(shí)踐:在「外圍設(shè)備模式」下進(jìn)行 BLE 應(yīng)用開發(fā)。

5.1 總體設(shè)計(jì)框圖

wKgZO2mATUGAZcpzAAGf8vz0u5s205.png

5.2 分析項(xiàng)目代碼

這個(gè)ble peripheral demo中的readme文件,以及代碼中的注釋都比較詳細(xì),接下來我用vscode直接打開這份demo項(xiàng)目代碼,和大家一起分析下項(xiàng)目代碼;

程序結(jié)構(gòu):

wKgZPGmATWqAOjPkAACbTAjfiiA572.png

文件說明:

main.lua:主程序入口文件。

ble_peripheral_main.lua:ble 外圍設(shè)備主程序,進(jìn)行 ble 初始化,設(shè)置廣播內(nèi)容,處理各類 ble 事件(連接、斷開連接、寫入請(qǐng)求等)。

ble_peripheral_receiver.lua:BLE 外圍設(shè)備接收數(shù)據(jù)處理。

ble_peripheral_sender.lua:BLE 外圍設(shè)備發(fā)送數(shù)據(jù)處理。

ble_timer_app.lua:ble 外圍設(shè)備定時(shí)器處理邏輯,啟動(dòng)兩個(gè)循環(huán)定時(shí)器,一個(gè)是以 notify 方式主動(dòng)向中心設(shè)備推送數(shù)據(jù)(需中心設(shè)備先開啟 notify 訂閱),另一個(gè)是使用 write 方式,更新特征值數(shù)據(jù),中心設(shè)備需要主動(dòng)讀取特征值獲取最新數(shù)據(jù)。

ble_uart_app.lua:ble 外圍設(shè)備接 uart 處理邏輯,將收到的中心設(shè)備的寫入數(shù)據(jù),通過 uart 發(fā)送到 pc 端串口工具。

check_wifi.lua:Air8000 的藍(lán)牙功能依賴 WiFi 協(xié)處理器,需確保 WiFi 固件為最新版本。本腳本文件檢查當(dāng)前 Air8000 模組的 WiFi 固件是否為最新版本,若不是則自動(dòng)啟動(dòng)升級(jí)(需插入可聯(lián)網(wǎng)的 SIM 卡)


5.3 Air8000開發(fā)板上運(yùn)行演示這個(gè)項(xiàng)目

準(zhǔn)備硬件環(huán)境:

1、Air8000開發(fā)板一塊+2.4gwifi天線一根:

天線裝到開發(fā)板上

2、TYPE-C USB數(shù)據(jù)線一根 + USB轉(zhuǎn)串口數(shù)據(jù)線一根,Air8000開發(fā)板和數(shù)據(jù)線的硬件接線方式為:

Air8000開發(fā)板通過TYPE-C USB口供電;(外部供電/USB供電 撥動(dòng)開關(guān) 撥到 USB供電一端)

TYPE-C USB數(shù)據(jù)線直接插到核心板的TYPE-C USB座子,另外一端連接電腦USB口;

六、BLE外圍設(shè)備模式常見問題分析

6.1 燒錄示例demo后,無法搜到藍(lán)牙

Air8000

1、首先檢查demo,固件是否是最新的,若不是則需更新的最新的版本測(cè)試,若已經(jīng)是最新的,看第2步

2、luatools日志全局搜 AIRLINK_READY,查看WIFI固件版本打?。ㄒ?yàn)锳ir8000的藍(lán)牙功能依賴WiFi協(xié)處理器)

wKgZO2mATkGABBecAAExmBrsjUs706.png


version后面的數(shù)字代表的是wifi固件的版本,目前最新發(fā)布的是14。

如果不是最新的14,此時(shí)需要升級(jí)wifi固件,目前有兩種wifi的升級(jí)方式,可自由選擇:

(1)4g遠(yuǎn)程升級(jí)wifi

在示例demo中的main.lua中,會(huì)有下面這句話,打開require "check_wifi"即可通過4g升級(jí)wifi,不過注意要插上能夠正常上網(wǎng)的sim卡。

wKgZO2mATmOAFhfQAABFNt5HEDc897.png

(2)本地線刷升級(jí)wifi

參考下面這篇文檔,進(jìn)行線刷升級(jí)wifi固件

https://docs.openluat.com/air8000/luatos/app/updatwifi/update/

若升級(jí)好后,測(cè)試依舊有問題,請(qǐng)向技術(shù)人員反饋。

Air8101

首先檢查demo,固件是否 都是最新的,若不是則需更新demo以及固件版本測(cè)試;若檢查已經(jīng)是最新的還是測(cè)試有問題,請(qǐng)向我們技術(shù)人員反饋。

6.2 使用Air8000/Air8101 作為外圍設(shè)備,向已經(jīng)建立連接的手機(jī)藍(lán)牙調(diào)試軟件發(fā)送數(shù)據(jù),發(fā)現(xiàn)手機(jī)調(diào)試軟件接收到的數(shù)據(jù)不全。

原因:

MTU設(shè)置的問題,Air8000/Air8101支持的MTU默認(rèn)是256字節(jié),如果手機(jī)上的藍(lán)牙調(diào)試軟件的MTU較小,會(huì)以小的為準(zhǔn)。

解決方案:

1、可以通過Air8000讀到對(duì)端藍(lán)牙設(shè)備的MTU大小,根據(jù)讀到的MTU的大小做分包處理即可。(讀取對(duì)端設(shè)備MTU的功能還在開發(fā)中)

2、調(diào)大對(duì)端藍(lán)牙設(shè)備的MTU。

七、LuatOS 上的中心設(shè)備模式應(yīng)用開發(fā)流程

7.1 前置知識(shí)了解

7.1.1 UUID

7.1.1.1 UUID 是什么?

UUID 是藍(lán)牙 GATT 協(xié)議的 “數(shù)字身份證”,通過標(biāo)準(zhǔn)化的唯一標(biāo)識(shí)機(jī)制,實(shí)現(xiàn)了跨廠商設(shè)備的功能互認(rèn)(標(biāo)準(zhǔn) UUID)與廠商個(gè)性化功能的擴(kuò)展(自定義 UUID)

藍(lán)牙協(xié)議通過 UUID 實(shí)現(xiàn)設(shè)備間的標(biāo)準(zhǔn)化通信,使用藍(lán)牙對(duì)外提供服務(wù)的設(shè)備,需要有對(duì)應(yīng)的服務(wù)功能,服務(wù)是藍(lán)牙設(shè)備中功能劃分的單元,每個(gè)服務(wù)都對(duì)應(yīng)著一種特定的功能或數(shù)據(jù)傳輸需求。

例如,當(dāng)一個(gè)藍(lán)牙設(shè)備(如智能手環(huán))向外界廣播服務(wù)時(shí),會(huì)攜帶對(duì)應(yīng)的 UUID,其他設(shè)備(如手機(jī))通過識(shí)別這些 UUID,就能知道該設(shè)備提供哪些功能(如心率監(jiān)測(cè)、數(shù)據(jù)傳輸?shù)龋?,并建立針?duì)性的連接。

一個(gè)藍(lán)牙設(shè)備可以包含多個(gè)服務(wù)(Service),每個(gè)服務(wù)通過一個(gè) UUID(服務(wù) UUID) 進(jìn)行標(biāo)識(shí)。

每個(gè)服務(wù)下包含多個(gè)特征(Characteristic),每個(gè)特征都擁有一個(gè)獨(dú)立的 UUID(特征 UUID)作為其唯一標(biāo)識(shí)。

特征是最小的數(shù)據(jù)單元,我們通過讀寫特征來與設(shè)備交互。

1、服務(wù)(Service)

是什么:服務(wù)是藍(lán)牙設(shè)備功能的邏輯分組,類似于一個(gè)"功能模塊"。

例如:心率監(jiān)測(cè)服務(wù)、電池電量服務(wù)等。

作用:定義設(shè)備能做什么(如測(cè)量心率、監(jiān)控電量)。通過 UUID 唯一標(biāo)識(shí)。

示例

wKgZPGmAUc6AOr7bAABWYwubgJY715.png

2、特征(Characteristic)

是什么:特征是服務(wù)的子元素,是服務(wù)中的具體數(shù)據(jù)點(diǎn),用于實(shí)際的數(shù)據(jù)讀寫操作。

例如:心率值、電池電量百分比。

作用:存儲(chǔ)具體數(shù)據(jù)(如 71 bpm)。通過 UUID 和 屬性(Properties) 定義操作權(quán)限(讀/寫/通知等)。

示例

wKgZO2mAUgSAfIo1AABFTDKjlZE966.png

3、描述符(Descriptor)

是什么:描述符是特征的子元素,是特征的附加信息,用于細(xì)化特征的行為或配置。

例如:?jiǎn)⒂脭?shù)據(jù)通知、設(shè)置數(shù)據(jù)格式。

作用:配置特征的行為(如開啟實(shí)時(shí)通知)。補(bǔ)充描述特征(如單位、數(shù)據(jù)范圍)。

最常見描述符:。

Client Characteristic Configuration Descriptor (CCCD)

用于啟用/禁用特征的 NOTIFY 或 INDICATE 功能。

三者的層級(jí)關(guān)系:

wKgZO2mAUliAHBwUAACnTtituTA352.png

實(shí)際示例(手環(huán)):

wKgZO2mAUnWAeQVKAAFGxMEfY3o798.png

7.1.1.2 UUID 的格式:

藍(lán)牙 UUID 的標(biāo)準(zhǔn)格式為 128 位,通常表示為 32 個(gè)十六進(jìn)制字符,以 8-4-4-4-12 的格式分組,共 36 個(gè)字符(包括 4 個(gè)連字符):

格式:8-4-4-4-12

示例:0000180D-0000-1000-8000-00805F9B34FB

標(biāo)準(zhǔn) UUID:

由藍(lán)牙技術(shù)聯(lián)盟(Bluetooth SIG)定義,用于常見服務(wù)。

標(biāo)準(zhǔn)的 UUID 為:0000xxxx-0000-1000-8000-00805F9B34FB。

為了節(jié)省帶寬,標(biāo)準(zhǔn) UUID 通常使用 16 位或 32 位短格式,實(shí)際通信時(shí)自動(dòng)擴(kuò)展為 128 位。每一個(gè)藍(lán)牙技術(shù)聯(lián)盟定義的屬性有一個(gè)唯一的 16 位 UUID,以代替上面的基本 UUID 的‘x’部分。

若 16 bit UUID 為 xxxx,那么 128 bit UUID 為 0000xxxx-0000-1000-8000-00805F9B34FB。

若 32 bit UUID 為 xxxxxxxx,那么 128 bit UUID 為 xxxxxxxx-0000-1000-8000-00805F9B34FB。

自定義 UUID:

用于私有服務(wù)或廠商特定功能,需開發(fā)者自行生成,通常使用 UUID 隨機(jī)生成器生成 128 位 UUID,確保全球唯一性

7.1.1.3 UUID 的分類

藍(lán)牙規(guī)定好的 uuid 如下:

0x180x 開頭 → 只能當(dāng) Service UUID

0x2Axx 開頭 → 只能當(dāng) Characteristic UUID

0x29xx 開頭 → 只能當(dāng) Descriptor UUID

0x180x 開頭 UUID(Service UUID)

0x180x 區(qū)間只能當(dāng) Service UUID。

wKgZO2mAUyCAAMOAAABo_enU3H4279.png

0x2Axx 開頭 UUID(Characteristic UUID)

0x2Axx (0x2A00 – 0x2AFF) 區(qū)間只能當(dāng) Characteristic UUID。

wKgZO2mAU0eAN2IiAAC_3iuGJ2I346.png

0x29xx 開頭 UUID(Descriptor UUID)

0x29xx 開頭只能當(dāng) Descriptor UUID,即描述符 UUID。

這里僅介紹一個(gè)使用最頻繁的 UUID:0x2902

0x2902 - Client Characteristic Configuration(CCC,客戶端特征配置描述符)

這是一個(gè)可寫的描述符,允許客戶端設(shè)備(如手機(jī)、電腦)配置如何從服務(wù)器設(shè)備(BLE 外設(shè))接收數(shù)據(jù)更新。主要用于啟用或禁用通知(Notifications) 和指示(Indications) 功能。

BLE 實(shí)時(shí)數(shù)據(jù)推送(如傳感器數(shù)據(jù)、狀態(tài)更新)都需要通過正確配置 0x2902 描述符來實(shí)現(xiàn)。

UUID 格式:


完整 UUID:00002902-0000-1000-8000-00805f9b34fb

縮寫:0x2902

類型:Descriptor(描述符)

有效值:

0xFFxx 開頭 UUID(Vendor Specific)

0xFF00 ~ 0xFFFF 區(qū)間為 SIG 的公共預(yù)留池(Vendor-Specific 區(qū)間) 任何廠商都可以臨時(shí)借用。

這個(gè)區(qū)間 SIG 作為公共預(yù)留區(qū)間,一般用作示例測(cè)試參考,屬于臨時(shí)方案,想要作為產(chǎn)品,要么去 SIG 申請(qǐng)正式分配,要么直接用 128-bit 自建 UUID。

注意事項(xiàng):

1、整個(gè) 16-bit 空間都由 Bluetooth SIG 的官方文檔 《Assigned Numbers》統(tǒng)一管理

2、商用不要使用已存在的 UUID,可以用 128-bit 自定義 UUID,或者在 SIG 申請(qǐng)正式分配。

3、同一設(shè)備,不同特征 UUID 任何時(shí)候都不能一樣。

4、自定義的 128-bit UUID,服務(wù) UUID 可以和 特征 UUID 一樣,SIG 規(guī)定的 16-bit 的服務(wù)和特征值的 UUID 不能一樣。

wKgZPGmAVH2AJ8WnAANLcJJ25c4084.png

7.1.2 Properties

特征的關(guān)鍵屬性(Properties)

特征通過 “屬性” 定義數(shù)據(jù)的操作方式,常見屬性包括:

wKgZO2mAVMuAROLjAAEVXLSDSrw583.png

7.2 demo 項(xiàng)目總體設(shè)計(jì)框圖

demo 項(xiàng)目的總體設(shè)計(jì)框圖如下:

wKgZPGmAVP-AazCXAAJBha-e1-s571.png

7.3 源碼分析

7.3.1 文件說明

wKgZO2mAVVCAf1jaAABjDsMGRWA774.png

1、main.lua:主程序入口文件。

2、ble_client_main.lua:BLE 中心設(shè)備主程序,進(jìn)行 BLE 初始化,處理各類 BLE 事件(連接、斷開連接、掃描報(bào)告、GATT 操作完成等)。

3、ble_client_receiver.lua:BLE 中心設(shè)備接收數(shù)據(jù)處理。

4、ble_client_sender.lua:BLE 中心設(shè)備發(fā)送數(shù)據(jù)處理。

5、ble_timer_app.lua:BLE 中心設(shè)備定時(shí)器處理邏輯,啟動(dòng)兩個(gè)循環(huán)定時(shí)器,一個(gè)用于定時(shí)讀取外圍設(shè)備特征值 UUID 數(shù)據(jù),一個(gè)用于定時(shí)向外圍設(shè)備特征值 UUID 發(fā)送數(shù)據(jù)。

6、ble_uart_app.lua:BLE 中心設(shè)備接 uart 處理邏輯,將收到的 notify 數(shù)據(jù),通過 uart 發(fā)送到 pc 端串口工具。

7、check_wifi.lua:Air8000 的藍(lán)牙功能依賴 WiFi 協(xié)處理器,需確保 WiFi 固件為最新版本。本腳本文件檢查當(dāng)前 Air8000 模組的 WiFi 固件是否為最新版本,若不是則自動(dòng)啟動(dòng)升級(jí)(需插入可聯(lián)網(wǎng)的 SIM 卡)

7.3.2 ble_client_main.lua

本文件為 ble client 主應(yīng)用功能模塊,整個(gè)應(yīng)用通過 sysplus.taskInitEx 啟動(dòng)主任務(wù),實(shí)現(xiàn)了完整的 BLE 中心設(shè)備功能,包括設(shè)備發(fā)現(xiàn)、連接管理、數(shù)據(jù)收發(fā)和異?;謴?fù)機(jī)制。核心業(yè)務(wù)邏輯為:

7.3.2.1 初始化與配置

加載依賴模塊( ble_client_receiver 用于數(shù)據(jù)接收處理, ble_client_sender 用于數(shù)據(jù)發(fā)送處理)。

定義配置參數(shù)(目標(biāo)設(shè)備名稱、服務(wù) UUID、特征值 UUID、超時(shí)時(shí)間等)。

調(diào)用 ble_init(),初始化藍(lán)牙功能。

7.3.2.2 設(shè)備掃描與連接

創(chuàng)建并啟動(dòng) BLE 掃描(默認(rèn)參數(shù):公共地址模式、掃描間隔 100ms、掃描窗口 100ms)。

通過 is_target_device 函數(shù)過濾掃描到的設(shè)備(匹配設(shè)備名稱)。

發(fā)現(xiàn)目標(biāo)設(shè)備后停止掃描并發(fā)起連接。

連接超時(shí)處理和重連機(jī)制。

7.3.2.3 事件處理

通過 ble_event_cb 回調(diào)函數(shù)處理各類 BLE 事件:

連接成功(EVENT_CONN)

斷開連接(EVENT_DISCONN)

掃描報(bào)告(EVENT_SCAN_REPORT)

GATT 操作完成(EVENT_GATT_DONE)

讀取特征值完成(EVENT_READ_VALUE)

7.3.2.4 業(yè)務(wù)功能

GATT 服務(wù)發(fā)現(xiàn)完成后,自動(dòng)啟用目標(biāo)特征值的通知監(jiān)聽。

接收并處理來自其他模塊的讀取請(qǐng)求(READ_REQ)。

通過消息隊(duì)列與其他模塊通信。

7.3.2.5 異常處理

掃描超時(shí)或連接失敗時(shí)觸發(fā)異常處理。

斷開連接后自動(dòng)清理消息隊(duì)列并嘗試重連。

異常情況下 5 秒后重新開始掃描連接。

7.3.3 ble_client_receiver.lua

7.3.3.1 主要功能

數(shù)據(jù)分類處理 :接收兩類數(shù)據(jù)(外圍設(shè)備通知數(shù)據(jù)和主動(dòng)讀取到的數(shù)據(jù))。

數(shù)據(jù)分發(fā) :根據(jù)數(shù)據(jù)類型(通過特征值 UUID 區(qū)分)發(fā)布到不同的消息隊(duì)列,供其他模塊處理。

7.3.3.2 核心實(shí)現(xiàn)

提供proc(service_uuid, char_uuid, data)接口函數(shù),接收服務(wù) UUID、特征值 UUID 和數(shù)據(jù)。

通過判斷特征值 UUID 是否匹配配置中的target_notify_char或target_read_char來區(qū)分?jǐn)?shù)據(jù)類型。

對(duì)于外圍設(shè)備的通知數(shù)據(jù),通過sys.publish("RECV_BLE_NOTIFY_DATA", ...)發(fā)布。

對(duì)于主動(dòng)讀取到的數(shù)據(jù),通過sys.publish("RECV_BLE_READ_DATA", ...)發(fā)布。

7.3.3.3 數(shù)據(jù)流轉(zhuǎn)

當(dāng)ble_client_main模塊接收到EVENT_READ_VALUE事件時(shí),會(huì)調(diào)用此模塊的 proc 函數(shù)。

本模塊將數(shù)據(jù)分類后發(fā)布到對(duì)應(yīng)的消息主題。

其他訂閱了這些消息主題的模塊可以接收并處理數(shù)據(jù)。

7.3.4 ble_client_sender.lua

其他模塊只需發(fā)布"SEND_DATA_REQ"消息即可請(qǐng)求中心設(shè)備向外圍設(shè)備發(fā)送數(shù)據(jù)。

7.3.4.1 主要功能

消息訂閱:訂閱"SEND_DATA_REQ"消息,接收其他模塊的發(fā)送請(qǐng)求。

隊(duì)列管理:維護(hù)發(fā)送隊(duì)列 send_queue,存儲(chǔ)待發(fā)送的數(shù)據(jù)項(xiàng)(包含服務(wù) UUID、特征值 UUID、數(shù)據(jù)、回調(diào)信息)。

任務(wù)調(diào)度:通過任務(wù)處理函數(shù) ble_client_sender_task_func 處理各類 BLE 事件。

數(shù)據(jù)發(fā)送:按順序發(fā)送隊(duì)列中的數(shù)據(jù),并通過回調(diào)通知發(fā)送結(jié)果。

7.3.4.2 核心實(shí)現(xiàn)

其他模塊通過sys.publish("SEND_DATA_REQ", ...)發(fā)布 發(fā)送請(qǐng)求。

send_data_req_proc_func函數(shù)將請(qǐng)求數(shù)據(jù)加入發(fā)送隊(duì)列,并通知任務(wù)。

任務(wù)處理函數(shù)根據(jù) BLE 事件狀態(tài)(連接成功、斷開連接等)處理隊(duì)列數(shù)據(jù)。

send_item_func函數(shù)負(fù)責(zé)實(shí)際發(fā)送數(shù)據(jù)。

send_item_cbfunc函數(shù)處理發(fā)送結(jié)果,調(diào)用用戶回調(diào)。

7.3.4.3 事件處理

CONNECT_OK:BLE 連接成功,開始發(fā)送隊(duì)列數(shù)據(jù)。

SEND_REQ:有新數(shù)據(jù)需要發(fā)送,繼續(xù)處理隊(duì)列。

DISCONNECTED:連接斷開,清空隊(duì)列并通知所有發(fā)送請(qǐng)求失敗。

7.3.5 ble_uart_app.lua

UART 初始化:打開 UART1 接口,配置波特率 115200、數(shù)據(jù)位 8、停止位 1、無奇偶校驗(yàn)。

數(shù)據(jù)接收:訂閱 "RECV_BLE_NOTIFY_DATA" 消息,接收來自 BLE 外圍設(shè)備的通知數(shù)據(jù)。

數(shù)據(jù)轉(zhuǎn)發(fā):將接收到的 BLE 數(shù)據(jù)(包含服務(wù) UUID、特征值 UUID 和實(shí)際數(shù)據(jù))格式化后通過 UART1 發(fā)送到 PC 端。

7.3.6 ble_timer_app

7.3.6.1 主要功能

創(chuàng)建兩個(gè)獨(dú)立的 5 秒循環(huán)定時(shí)器

一個(gè)用于定時(shí) 發(fā)送 數(shù)據(jù)到外圍設(shè)備特定特征值 UUID。

一個(gè)用于定時(shí) 讀取 外圍設(shè)備特定特征值 UUID 的數(shù)據(jù)。

7.3.6.2 核心實(shí)現(xiàn)

定義了目標(biāo)服務(wù) UUID( FA00 )和特征值 UUID(寫: EA02 ,讀: EA03 )。

實(shí)現(xiàn)數(shù)據(jù)發(fā)送結(jié)果回調(diào)函數(shù) send_data_cbfunc ,用于處理發(fā)送成功/失敗的通知。

實(shí)現(xiàn)兩個(gè)定時(shí)器回調(diào)函數(shù):send_data_req_timer_cbfunc:發(fā)布SEND_DATA_REQ消息到 ble_client_sender 模塊。read_data_req_timer_cbfunc:發(fā)送READ_REQ請(qǐng)求到 ble_client_main 模塊。

啟動(dòng)兩個(gè) 5 秒循環(huán)定時(shí)器,分別綁定上述兩個(gè)回調(diào)函數(shù)。

7.3.6.3 數(shù)據(jù)流轉(zhuǎn)

發(fā)送流程:定時(shí)器觸發(fā) → 發(fā)布SEND_DATA_REQ消息 →ble_client_sender處理 → 回調(diào)通知結(jié)果。

讀取流程:定時(shí)器觸發(fā) → 發(fā)送READ_REQ請(qǐng)求 →ble_client_main處理 → 結(jié)果通過事件返回。

7.4 日志分析

接下來用兩個(gè) Air8000 核心板,一個(gè)燒錄外圍設(shè)備的 demo,另一個(gè)燒錄中心設(shè)備的 demo,來演示中心設(shè)備如何讀,寫操作。

1、中心設(shè)備訂閱外圍設(shè)備特征通知(Notify)

wKgZPGmAVjOAVjndAAaH8stWT6A814.png

2、中心設(shè)備寫入特征值(Write)

wKgZO2mAVlWAe8RiAAjdUYiDbII907.png

3、中心設(shè)備主動(dòng)讀取特征值數(shù)據(jù)(Read)

wKgZO2mAVnuAUHJQAAYXSDs9hiY126.png

八、LuatOS 上的廣播模式應(yīng)用開發(fā)流程

8.1 前置知識(shí)了解

8.1.1 ibeacon 介紹

1、ibeacon 技術(shù)是 Apple 公司在 2013 年 9 月發(fā)布的一種基于 BLE 藍(lán)牙的通信協(xié)議,主要用于短距離傳送少量數(shù)據(jù)。

它通過周期性廣播包含唯一標(biāo)識(shí)符(UUID、Major、Minor)的數(shù)據(jù)包,使智能設(shè)備在接收信號(hào)后,結(jié)合信號(hào)強(qiáng)度(RSSI)估算距離,實(shí)現(xiàn)室內(nèi)定位、場(chǎng)景觸發(fā)等功能。

2、ibeacon 規(guī)定了一個(gè) 30 個(gè)字節(jié)的廣播包。其中需要重點(diǎn)解析的是后21 個(gè)字節(jié)(即從 UUID 開始),此前字節(jié)重在標(biāo)識(shí)是否為 ibeacon 協(xié)議。

ibeacon 廣播數(shù)據(jù)包的完整格式如下:

wKgZO2mAVtiAAA-MAAB1-5MtO8E729.png

一個(gè) 30 字節(jié)的完整的 iBeacon 可做如下拆解:

AD Structure1(Advertising Data Structure

長(zhǎng)度字段(1 字節(jié)):此處一般為 0x02(即十進(jìn)制 2),表示該 AD Structure 后續(xù)數(shù)據(jù)的總字節(jié)數(shù)

類型字段(1 字節(jié)):0x01(Flags,廣播標(biāo)志位)

數(shù)據(jù)(1 字節(jié)):0x06(Flags 的值,表示可被發(fā)現(xiàn)且支持 BLE 通用模式,F(xiàn)lags 見 7.2 章節(jié))

AD Structure2

長(zhǎng)度字段(1 字節(jié)):此處一般為 0x1A(即十進(jìn)制 26)表示后續(xù)數(shù)據(jù)的總字節(jié)數(shù)

類型字段(1 字節(jié)):固定為 0xFF,表示廠商特定數(shù)據(jù)。

數(shù)據(jù)(此處為公司標(biāo)識(shí)符)(2 字節(jié)):蘋果的公司 ID 為 0x004C(小端存儲(chǔ)為 0x4C 0x00)。

iBeacon 有效載荷(仍屬于 AD Structure2)

iBeacon 類型標(biāo)識(shí)符(1 字節(jié)):固定為 0x02,表示子類型為 iBeacon

iBeacon 數(shù)據(jù)長(zhǎng)度(1 字節(jié)):固定為 0x15,表示 ibeacon 后續(xù)數(shù)據(jù)長(zhǎng)度為 21 字節(jié)后續(xù)數(shù)據(jù)長(zhǎng)度為需要重點(diǎn)解析的 21 字節(jié)

Proximity UUID(16 字節(jié)):設(shè)備的唯一標(biāo)識(shí)符(如 UUID)。

Major(2 字節(jié)):用于區(qū)分區(qū)域(如建筑樓層)。

Minor(2 字節(jié)):用于更細(xì)粒度的定位(如具體房間)。

Tx Power(1 字節(jié)):校準(zhǔn)信號(hào)強(qiáng)度的參考值(RSSI at 1m)。

AD Structures 是什么?

在 BLE 協(xié)議中,設(shè)備通過廣播包(Advertising Packet)向外發(fā)送數(shù)據(jù)。

一個(gè)廣播包可能包含多個(gè) AD Structure(Advertising Data Structure),每個(gè) AD Structure 用于描述不同的信息(例如設(shè)備名稱、服務(wù) UUID、廠商數(shù)據(jù)等)。

每個(gè) AD Structure 的格式固定為:

[長(zhǎng)度(1字節(jié))] + [類型(1字節(jié))] + [數(shù)據(jù)(N字節(jié))]

長(zhǎng)度字段(1 字節(jié)):表示類型 + 數(shù)據(jù)的總字節(jié)數(shù)(即類型1字節(jié) + 數(shù)據(jù)N字節(jié))。

類型字段(1 字節(jié)):定義數(shù)據(jù)的用途(例如0xFF表示廠商數(shù)據(jù),0x09表示設(shè)備名稱)。

數(shù)據(jù)字段(N 字節(jié)):具體內(nèi)容,長(zhǎng)度由長(zhǎng)度字段-1決定(因?yàn)轭愋驼?1 字節(jié))。

AD Structure 的解析規(guī)則:

順序無關(guān):AD Structure 的順序不固定。

長(zhǎng)度限制:總長(zhǎng)度不超過 31 字節(jié)(若為擴(kuò)展廣播,可更長(zhǎng),但 iBeacon 不支持)。

類型唯一性:同一類型可能重復(fù)出現(xiàn)(例如多個(gè)廠商數(shù)據(jù)塊)。


在解析時(shí),可以通過以下步驟遍歷所有 AD Structure:

從廣播包首字節(jié)開始。

讀取長(zhǎng)度字段(1 字節(jié)),確定當(dāng)前 AD Structure 的總長(zhǎng)度(包括類型和數(shù)據(jù))。

讀取類型字段(1 字節(jié)),判斷數(shù)據(jù)類型。

根據(jù)類型,處理后續(xù)數(shù)據(jù)。

常見 AD Structure 類型對(duì)照表:

其中標(biāo)志位,長(zhǎng)度,類型我們不需要處理,我們只需要關(guān)注 ibeacon 的有效載荷部分,接下來詳細(xì)介紹下這部分字段內(nèi)容:

廠商標(biāo)識(shí)符(2 字節(jié)):是藍(lán)牙技術(shù)中用于唯一標(biāo)識(shí)設(shè)備制造商或品牌方的 2 字節(jié)(16 位)編碼,范圍是0x0000~0xFFFF(即 0~65535),它的核心作用是區(qū)分不同廠商的藍(lán)牙設(shè)備,確保數(shù)據(jù)解析和兼容性。

ibeacon 類型標(biāo)識(shí)符(1 字節(jié)):固定為 0x02, 表示子類型為 ibeacon。

ibeacon 數(shù)據(jù)長(zhǎng)度(1 字節(jié)):固定為 0x15,表示 ibeacon 數(shù)據(jù)長(zhǎng)度 21 字節(jié)。

Proximity UUID(16 字節(jié)):通用唯一標(biāo)識(shí)符。

這是一個(gè) 128 位(16 字節(jié))的唯一標(biāo)識(shí)符,用于區(qū)分你所在的 iBeacon 網(wǎng)絡(luò)。 例如,一個(gè)商店的所有 iBeacon 可以使用同一個(gè) UUID,這樣你的應(yīng)用就可以知道用戶進(jìn)入了該商店區(qū)域。 通常,一個(gè)組織或一個(gè)應(yīng)用使用同一個(gè) UUID,然后通過 Major 和 Minor 來進(jìn)一步細(xì)分區(qū)域和設(shè)備。

Major(2 字節(jié)):主標(biāo)識(shí),用于區(qū)分同一組織(UUID 相同)下的不同區(qū)域或組別。

Major 是一個(gè) 16 位的無符號(hào)整數(shù),用于將一組相關(guān)的設(shè)備進(jìn)行分組。 例如,一個(gè)連鎖商店的每個(gè)分店可以使用相同的 Major 值,這樣應(yīng)用就知道用戶進(jìn)入了哪個(gè)分店。

Minor(2 字節(jié)):次標(biāo)識(shí),用于在同一個(gè) Major 組內(nèi)進(jìn)行更細(xì)粒度的區(qū)分。

Minor 也是一個(gè) 16 位的無符號(hào)整數(shù),用于標(biāo)識(shí)特定的 iBeacon。 例如,在一個(gè)分店內(nèi),每個(gè)貨架或區(qū)域可以有一個(gè)唯一的 Minor 值。這樣,應(yīng)用就可以知道用戶接近哪個(gè)具體的貨架。

Signal Power(1 字節(jié)):校準(zhǔn)信號(hào)強(qiáng)度的參考值,單位 dBm。(該位為 8 位有符號(hào)數(shù)據(jù),范圍為-128 到 127,最高位是符號(hào)位

這個(gè)字段是 8 位有符號(hào)整數(shù),表示在距離 iBeacon 設(shè)備 1 米處測(cè)量到的信號(hào)強(qiáng)度(RSSI)。這個(gè)值用于校準(zhǔn),幫助估算與設(shè)備之間的實(shí)際距離。設(shè)備接收到信標(biāo)的信號(hào)強(qiáng)度(RSSI)后,與這個(gè)校準(zhǔn)值進(jìn)行比較,通過信號(hào)衰減模型來估算距離。 例如:0xC0 對(duì)應(yīng)-64dBm

十六進(jìn)制 0xC0 的二進(jìn)制表示為 11000000

作為有符號(hào)整數(shù),最高位 1 表示負(fù)數(shù)

取反加 1 計(jì)算補(bǔ)碼值:01000000 = 64

因此,0xC0 對(duì)應(yīng)十進(jìn)制-64

注:

1、如何獲取廠商標(biāo)識(shí)符?

(1)向藍(lán)牙技術(shù)聯(lián)盟(SIG)直接申請(qǐng)。

(2)使用已授權(quán)廠商的 ID,申請(qǐng)得到其授權(quán)。

2、Signal Power 是 8 位有符號(hào)整數(shù),例如:0xC0 的二進(jìn)制表示是 1100 0000,最高位 1 代表負(fù)數(shù),對(duì)應(yīng)十進(jìn)制是-64。

3、廠商標(biāo)識(shí)符是按照小端序存儲(chǔ)的,例如:Apple 的公司 ID 是0x004C(大端序),但在藍(lán)牙數(shù)據(jù)包中按規(guī)范存儲(chǔ)為4C 00(小端序)。

注意:Apple 的 ID 是 0x004C,但是 demo 中需按照 0x4C,0x00 的方式寫入存儲(chǔ)。

原因:在 BLE 協(xié)議中,公司 ID 按照小端序存儲(chǔ)。

大端序:高位字節(jié)存儲(chǔ)在低地址,低位字節(jié)存儲(chǔ)在高地址,0x004C在大端序中存儲(chǔ)為00 4C

wKgZO2mAV6uAdjD3AAA3gASHbpY758.png

小端序:高位字節(jié)存儲(chǔ)在高地址,低位字節(jié)存儲(chǔ)在低地址,0x004C 在小端序中存儲(chǔ)為4C 00

wKgZO2mAWBeARADhAAA3Q1DVO2Y163.png

8.1.2 ibeacon 如何利用 Signal Power 和 RSSI 進(jìn)行距離估算?

ibeacon 通過 Signal Power(出廠校準(zhǔn)信號(hào)強(qiáng)度) 和 RSSI(接收信號(hào)強(qiáng)度) 估算設(shè)備與 ibeacon 之間的距離,其核心原理基于藍(lán)牙信號(hào)衰減模型。簡(jiǎn)單來講就是設(shè)備出廠前先根據(jù)實(shí)際情況,測(cè)算在 1 米距離時(shí)的信號(hào)強(qiáng)度是多少,作為基準(zhǔn)值,然后基于藍(lán)牙信號(hào)衰減模型,根據(jù)實(shí)際信號(hào)值 RSSI 推算出實(shí)際距離。以下是具體方法和實(shí)現(xiàn)步驟:

注意:不同的藍(lán)牙設(shè)備或相同設(shè)備不同的工況甚至不同的場(chǎng)地環(huán)境,都會(huì)影響 Signal Power 值,因此這個(gè)值雖然可以測(cè)量,但一定程度上是個(gè)經(jīng)驗(yàn)值,很難測(cè)準(zhǔn)。故 ibeacon 的距離估算功能只是估算大概范圍,并不能用于精準(zhǔn)定位。

1、關(guān)鍵概念

2、距離估算公式

iBeacon 使用 對(duì)數(shù)路徑損耗模型(Log-distance Path Loss Model)計(jì)算距離:

wKgZPGmAWFKAA1lvAAAVR_I9j5s791.png

d:估算距離(米)。

n:環(huán)境衰減因子(通常 2~4,空曠環(huán)境=2,普通室內(nèi)=2.5-3,復(fù)雜環(huán)境多障礙物=3.5-4),環(huán)境越復(fù)雜信號(hào)衰減越快。

Tx Power:Beacon 的校準(zhǔn)信號(hào)強(qiáng)度(通過實(shí)際環(huán)境測(cè)量擬合,需預(yù)先標(biāo)定)。

RSSI:手機(jī)實(shí)際測(cè)得的信號(hào)強(qiáng)度。

3、示例計(jì)算

Tx Power = -60 dBm

RSSI = -80 dBm

n = 2.5(室內(nèi)環(huán)境)

wKgZO2mAWJeASHg7AABB4FbRGxw695.png

8.2 源碼分析

8.2.1 文件說明

1、main.lua:主程序入口文件。

2、ble_ibeacon.lua:iBeacon 功能的具體實(shí)現(xiàn),負(fù)責(zé)藍(lán)牙初始化、廣播配置和異常處理。

3、check_wifi.lua:Air8000 的藍(lán)牙功能依賴 WiFi 協(xié)處理器,需確保 WiFi 固件為最新版本。本腳本文件檢查當(dāng)前 Air8000 模組的 WiFi 固件是否為最新版本,若不是則自動(dòng)啟動(dòng)升級(jí)(需插入可聯(lián)網(wǎng)的 SIM 卡)

8.2.2 ble_ibeacon.lua

8.2.2.1 全局變量定義

device_name :廣播設(shè)備名稱,

adv_state :廣播狀態(tài)標(biāo)志,用于跟蹤 iBeacon 廣播的開啟/關(guān)閉狀態(tài),

ibeacon_data :iBeacon 廣播數(shù)據(jù)包,包含以下結(jié)構(gòu):

廠商標(biāo)識(shí)符(2 字節(jié)):0x004C,本例演示的是 ibeacon,所以采用 Apple 的 ID:0x004C(iBeacon 是 Apple 的專有技術(shù),采用 Apple 的 ID 才能顯示成 ibeacon)

ibeacon 類型標(biāo)識(shí)符(2 字節(jié)):固定為 0x02,0x15, 表示子類型為 ibeacon。

Proximity UUID(16 字節(jié)):0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10

Major(2 字節(jié)):0x00,0x01

Minor(2 字節(jié)):0x00,0x02

Signal Power(1 字節(jié)):0xC0

wKgZO2mAWPuAeZjJAAFL49QRyyk213.png


8.2.2.2 事件回調(diào)函數(shù) (ble_callback)

處理 BLE 設(shè)備的各種事件:

ble.EVENT_ADV_START :廣播成功啟動(dòng)時(shí)設(shè)置 adv_state 為 true

ble.EVENT_ADV_STOP :廣播停止時(shí)設(shè)置 adv_state 為 false

wKgZO2mAWTWAWJHaAAD2AGK3dwI787.png

8.2.2.3 核心任務(wù)函數(shù) (ble_ibeacon_task_func)

這是模塊的主要功能實(shí)現(xiàn),采用無限循環(huán)結(jié)構(gòu)確保廣播穩(wěn)定運(yùn)行:

初始化藍(lán)牙核心 :創(chuàng)建 bluetooth_device 實(shí)例

初始化 BLE 功能 :創(chuàng)建 ble_device 實(shí)例并注冊(cè)回調(diào)

配置廣播參數(shù) :通過 adv_create 方法設(shè)置:

廣播地址模式 (ble.PUBLIC)

廣播通道 (ble.CHNLS_ALL)

廣播間隔 (intv_min/max = 120)

廣播數(shù)據(jù) (包含標(biāo)志位、iBeacon 數(shù)據(jù)和設(shè)備名稱)

啟動(dòng)廣播 :調(diào)用 adv_start()方法

狀態(tài)監(jiān)控 :通過 while adv_state 循環(huán)監(jiān)控廣播狀態(tài)

異常處理 :使用 goto EXCEPTION_PROC 標(biāo)簽統(tǒng)一處理各種初始化失敗情況

資源清理與重試 :在異常情況下停止廣播并重新初始化,間隔 5 秒后重試

wKgZPGmAWXmAFVpIAAV6GAk0dds152.png

8.3 日志分析

luatools 日志比較簡(jiǎn)單,只有開啟廣播的 log 打印

wKgZO2mAWcSASb6lAAbrkWPOso4226.png

重點(diǎn)看 nrf connect 掃描出來的 ibeacon 信息:

wKgZO2mAWfOAYgeJAAO8EBvxwO8239.png

九、LuatOS 上的掃描模式應(yīng)用開發(fā)流程

9.1 前置知識(shí)了解

9.1.1 掃描窗口和掃描間隔

掃描窗口(scan_window):

是指 BLE 設(shè)備在掃描過程中,打開接收器去監(jiān)聽廣播設(shè)備的時(shí)間段。這個(gè)時(shí)間段是設(shè)備實(shí)際進(jìn)行掃描操作的時(shí)間,也稱為掃描事件的持續(xù)時(shí)間。掃描窗口的單位通常是 0.625ms,并且它的值必須小于或等于掃描間隔。

掃描間隔(scan_interval):

表示兩次掃描事件之間的間隔時(shí)間。掃描間隔的單位與掃描窗口相同,單位也是 0.625ms。

注:

1、如果掃描窗口與掃描間隔一樣長(zhǎng),表明主機(jī)一直在掃描。

2、掃描窗口和掃描間隔是在 ble_device:scan_create 創(chuàng)建掃描需要填寫的參數(shù)。

默認(rèn)參數(shù), addr_mode=0, scan_interval=100, scan_window=100

wKgZPGmAWn-AESqvAAC9eghKQBQ279.png

9.1.2 掃描到的廣播數(shù)據(jù)如何解碼?

ble.EVENT_SCAN_REPORT 事件的 ble.param 包含如下內(nèi)容:

addr_type :整數(shù)類型,表示藍(lán)牙設(shè)備的地址類型

adv_addr :設(shè)備的廣播地址,可以通過 :toHex() 方法轉(zhuǎn)換為十六進(jìn)制字符串形式的 MAC 地址

rssi :整數(shù)類型,表示接收信號(hào)強(qiáng)度,單位為 dBm

data :二進(jìn)制數(shù)據(jù)類型,表示接收到的原始廣播數(shù)據(jù),可以通過 :toHex() 方法轉(zhuǎn)換為十六進(jìn)制字符串

其中的廣播數(shù)據(jù) data 可以通過 ble_device:adv_decode(data) 來解碼。

ble_device:adv_decode(data)

功能

解碼廣播數(shù)據(jù)

注意事項(xiàng)

廣播數(shù)據(jù)通常來自于 ble.EVENT_SCAN_REPORT 事件的ble_param.data

參數(shù)

data

wKgZPGmAS-OAGcIEAACJXlPRHjg672.png

返回值

local adv_data = ble_device:adv_decode(data)

adv_data

wKgZO2mATD6AAyZhAAHCrooX2FM654.png

示例

wKgZO2mATFqAfoN0AAC22oHGHG4594.png

9.2 源碼分析


9.2.1 文件說明

1、main.lua:主程序入口文件。

2、ble_scan.lua:ble_scan.lua 是 Air8000 的藍(lán)牙掃描功能實(shí)現(xiàn)模塊,主要負(fù)責(zé)初始化藍(lán)牙框架、配置并執(zhí)行設(shè)備的掃描操作,并通過回調(diào)函數(shù)處理掃描到的設(shè)備信息。

3、check_wifi.lua:Air8000 的藍(lán)牙功能依賴 WiFi 協(xié)處理器,需確保 WiFi 固件為最新版本。本腳本文件檢查當(dāng)前 Air8000 模組的 WiFi 固件是否為最新版本,若不是則自動(dòng)啟動(dòng)升級(jí)(需插入可聯(lián)網(wǎng)的 SIM 卡)

9.2.2 ble_scan.lua

9.2.2.1 全局變量定義

scan_state :掃描狀態(tài)標(biāo)志,用于跟蹤 BLE 掃描的開啟/關(guān)閉狀態(tài),初始值為 false 表示未掃描

wKgZO2mAW9iAPB9hAAAwz_NpulQ607.png

9.2.2.2 處理掃描報(bào)告事件 (handle_scan_report)

功能:當(dāng)掃描到 BLE 設(shè)備時(shí),處理掃描報(bào)告事件。

處理內(nèi)容:記錄并輸出發(fā)現(xiàn)設(shè)備的信息,包括 RSSI 值、設(shè)備地址和廣播數(shù)據(jù)等,可以根據(jù)需求篩選數(shù)據(jù)。

示例演示了如何篩選 ibeacon 廣播數(shù)據(jù)。

wKgZPGmAW_KAGgdIAARTI2ncYzE491.png

9.2.2.3 事件回調(diào)函數(shù) (ble_callback)

處理 BLE 設(shè)備的各種掃描事件:

ble.EVENT_SCAN_INIT :掃描初始化成功時(shí),記錄日志并設(shè)置 scan_state 為 true

ble.EVENT_SCAN_REPORT :接收到掃描報(bào)告時(shí),調(diào)用 handle_scan_report 函數(shù)處理掃描數(shù)據(jù)

ble.EVENT_SCAN_STOP :掃描停止時(shí),記錄日志并設(shè)置 scan_state 為 false

wKgZO2mAXHaAJ9avAAGSL_azXHk063.png

9.2.2.4 核心任務(wù)函數(shù) (ble_scan_task_func)

這是模塊的主要功能實(shí)現(xiàn),采用無限循環(huán)結(jié)構(gòu)確保掃描穩(wěn)定運(yùn)行:

初始化藍(lán)牙核心 :創(chuàng)建 bluetooth_device 實(shí)例

初始化 BLE 功能 :創(chuàng)建 ble_device 實(shí)例并注冊(cè)回調(diào)

配置掃描參數(shù) :通過 scan_create()方法設(shè)置掃描參數(shù)(地址模式、掃描間隔、掃描窗口等)

啟動(dòng)掃描 :調(diào)用 scan_start()方法開始掃描周圍 BLE 設(shè)備

狀態(tài)監(jiān)控 :通過 while scan_state 循環(huán)監(jiān)控掃描狀態(tài)

異常處理 :使用 goto EXCEPTION_PROC 標(biāo)簽統(tǒng)一處理各種初始化失敗情況

資源清理與重試 :在異常情況下停止掃描并重新初始化,間隔 5 秒后重試

wKgZPGmAXLCAdF4cAAOgJebI_Kg327.png

9.3 日志分析

luatools 日志,可以查看掃描到的 ibeacon 的廣播包數(shù)據(jù)信息

wKgZO2mAXOOACtWcAAhRa1Fum88451.png

最后再結(jié)合 ibeacon 應(yīng)用,進(jìn)行簡(jiǎn)單的距離估算:

代碼:

wKgZO2mAXQWAGNeXAAIPtpXiEk0915.png

十、常見問題

10.1 ibeacon 應(yīng)用,為什么無法顯示名稱?

答:

wKgZO2mAXUaARkXQAADixFPeaYo223.png

一個(gè)完整的 BLE 廣播數(shù)據(jù)包最長(zhǎng)可以有 37 個(gè)字節(jié),其中前 6 個(gè)字節(jié)固定用于設(shè)備 MAC 地址,剩下的 31 個(gè)字節(jié)才是我們可以自由配置的廣播數(shù)據(jù)區(qū)域。這 31 個(gè)字節(jié)會(huì)被劃分為若干個(gè)廣播數(shù)據(jù)結(jié)構(gòu)體(AD Structure)。

也就是 BLE 廣播包 廣播數(shù)據(jù)區(qū)域不超過 31 字節(jié),那么 iBeacon 包含的數(shù)據(jù)和包含 flag 的 AD Structure 已經(jīng)占了 30 個(gè)字節(jié),如果要設(shè)置設(shè)備命名,會(huì)超出 31 字節(jié)。

可能有人會(huì)問,不是還有 1 個(gè)字節(jié)的空間嗎,設(shè)備名稱用一個(gè)字節(jié)不可以嗎?

答:

名稱:"1"(1 字符)。

AD Structure 長(zhǎng)度:1(數(shù)據(jù)) + 1(類型) + 1(長(zhǎng)度) = 3 字節(jié)。

總長(zhǎng)度:27(iBeacon) + 3(Flags) + 3(名稱) =33 字節(jié)→ 仍超出。

10.2 什么是 Flags?

ble.FLAGS 說明

在 BLE 中,標(biāo)志(flags)通常出現(xiàn)在廣播數(shù)據(jù)中,這些標(biāo)志用于指示設(shè)備的能力和可發(fā)現(xiàn)性等。

根據(jù)藍(lán)牙核心規(guī)范(Bluetooth Core Specification),廣播數(shù)據(jù)中的 Flags 字段是一個(gè) 8 位的位圖(bitmask),每個(gè)位代表特定的含義,以下是各個(gè)位的定義(從 LSB 到 MSB):

Bit 0: LE Limited Discoverable Mode(有限可發(fā)現(xiàn)模式)

Bit 1: LE General Discoverable Mode(通用可發(fā)現(xiàn)模式,設(shè)備持續(xù)可被發(fā)現(xiàn))

Bit 2: BR/EDR Not Supported(不支持經(jīng)典藍(lán)牙)

Bit 3: Simultaneous LE and BR/EDR to Same Device Capable(同一設(shè)備同時(shí)支持 BLE 和經(jīng)典藍(lán)牙)

Bit 4: Simultaneous LE and BR/EDR to Different Devices Capable(支持同時(shí)連接不同設(shè)備的 BLE 和經(jīng)典藍(lán)牙)

Bit 5-7: 保留(Reserved)

注意:Bit 0 和 Bit 1 不能同時(shí)被設(shè)置。如果同時(shí)設(shè)置,則視為無效。

Bit1 和 Bit2 被設(shè)置時(shí),F(xiàn)lags 字段的值為 0x06(二進(jìn)制 0000 0110),

Bit2 被設(shè)置時(shí),F(xiàn)lags 字段的值為 0x04(二進(jìn)制 0000 0100)。

10.3 常見的 BLE 斷開連接 reason

wKgZO2mAXa2ADkycAADdPDDENi8323.png

示例:

1、中心設(shè)備和外圍設(shè)備在數(shù)據(jù)傳輸過程中,把外圍設(shè)備斷電

中心設(shè)備會(huì)提示 8 的錯(cuò)誤碼,即數(shù)據(jù)傳輸過程中超時(shí)斷開連接。

wKgZO2mAXeSAP22OAAbr-SBUYZw266.png

2、中心設(shè)備和外圍設(shè)備連接時(shí),中心設(shè)備主動(dòng)發(fā)起 disconnect

中心設(shè)備會(huì)提示 22 的錯(cuò)誤碼,即本地主機(jī)終止連接。

wKgZPGmAXhOAYb_7AAa1NkZyTXU776.png

外圍設(shè)備會(huì)提示 19 的錯(cuò)誤碼,即遠(yuǎn)程用戶終止連接。

wKgZO2mAXk2AJ2PjAAg5o6Ay-Wg454.png

今天的內(nèi)容就分享到這里了~

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 藍(lán)牙
    +關(guān)注

    關(guān)注

    119

    文章

    6293

    瀏覽量

    178282
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2943

    文章

    47715

    瀏覽量

    412544
  • BLE
    BLE
    +關(guān)注

    關(guān)注

    13

    文章

    772

    瀏覽量

    66224
  • LuatOS
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    2645
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    由淺入深,藍(lán)牙4.0/BLE協(xié)議棧開發(fā)攻略大全(3)

    本文將結(jié)合TI推出的CC254x SoC 系列,講解環(huán)境的搭建藍(lán)牙4.0協(xié)議棧的開發(fā)來深入學(xué)習(xí)藍(lán)牙4.0的
    發(fā)表于 08-22 09:55 ?4.3w次閱讀

    Visual_C++入門實(shí)踐

    Visual_C++入門實(shí)踐
    發(fā)表于 08-12 21:37

    FPGA與VHDL快速工程實(shí)踐入門提高

    本帖最后由 eehome 于 2013-1-5 10:04 編輯 FPGA與VHDL快速工程實(shí)踐入門提高
    發(fā)表于 08-14 13:14

    【TI CC2541申請(qǐng)】在linux平臺(tái)下開發(fā)BLE套件

    申請(qǐng)理由:項(xiàng)目描述:公司有一些消費(fèi)電子項(xiàng)目已經(jīng)用到了cc2541 藍(lán)牙,我想申請(qǐng)一套在linux下開發(fā),因?yàn)楣疽院?b class='flag-5'>開發(fā)單片機(jī)全部在linux+eclipse+gdb平臺(tái)下
    發(fā)表于 09-12 18:35

    初級(jí)小白實(shí)戰(zhàn)資料,零基礎(chǔ)入門rk3399平臺(tái)下linux4.4+android8.1開發(fā)

    實(shí)踐經(jīng)驗(yàn)入門放棄,沒有找到正確的方法,所謂萬事開頭難,本次直播就是帶大家快速入門編譯And
    發(fā)表于 07-27 17:53

    LuatOS是什么?

    ,讓萬物互聯(lián)更簡(jiǎn)單!LuatOS —— 不局限于合宙產(chǎn)品,不局限于通信模塊,更注重各軟硬件平臺(tái)的可移植性,開啟了合宙通信面向物聯(lián)網(wǎng)嵌入式開發(fā)的開源新生態(tài)。LuatOS是什么?
    發(fā)表于 11-08 06:27

    開發(fā)工具包定制硬件的軟件遷移是否有任何最佳實(shí)踐?

    開發(fā)工具包定制硬件的軟件遷移是否有任何最佳實(shí)踐?設(shè)置了一個(gè)工作演示,并開發(fā)了我自己的針對(duì)我的特定應(yīng)用使用 ESP32S3 的定制板。如果
    發(fā)表于 03-02 08:32

    無基礎(chǔ)藍(lán)牙開發(fā)入門資料

    無基礎(chǔ)藍(lán)牙開發(fā)入門資料,適合藍(lán)牙入門者查閱。
    發(fā)表于 11-10 16:15 ?29次下載

    PFGA與VHDL快速工程實(shí)踐入門提高

    PFGA與VHDL快速工程實(shí)踐入門提高,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 11-10 14:20 ?12次下載

    圖靈程序設(shè)計(jì)叢書《Python編程:入門實(shí)踐

    圖靈程序設(shè)計(jì)叢書《Python編程:入門實(shí)踐
    發(fā)表于 12-30 14:49 ?0次下載

    LuatOS的故事——通信模塊系統(tǒng)級(jí)主控

    ? ? ? ? 全面優(yōu)化供應(yīng)鏈 提升開發(fā)效率, 縮短開發(fā)時(shí)間 切實(shí)解決工程師痛點(diǎn) 選擇Air101 從容做產(chǎn)品,不再芯慌慌 現(xiàn)貨發(fā)售 | 現(xiàn)貨發(fā)售 | 現(xiàn)貨發(fā)售 大批量采購價(jià)格更優(yōu) 請(qǐng)聯(lián)絡(luò)在線客服/銷售經(jīng)理 更多新品即將上市 敬請(qǐng)關(guān)注合宙Luat最新資訊 原文標(biāo)題:
    的頭像 發(fā)表于 10-13 18:00 ?1672次閱讀
    <b class='flag-5'>LuatOS</b>的故事——<b class='flag-5'>從</b>通信模塊<b class='flag-5'>到</b>系統(tǒng)級(jí)主控

    迅為視頻教程 | RKNPU2 入門實(shí)踐一套搞定!

    迅為視頻教程 | RKNPU2 入門實(shí)踐一套搞定!
    的頭像 發(fā)表于 06-20 17:00 ?1906次閱讀
    迅為視頻教程 | RKNPU2 <b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b><b class='flag-5'>實(shí)踐</b>一套搞定!

    入門精通:基于開源代碼的BLE四種模式開發(fā)詳解

    通過分析BLE低功耗藍(lán)牙的四種核心工作模式,結(jié)合可下載、可修改的開放源碼,本教程為開發(fā)者提供一套系統(tǒng)、實(shí)用的開發(fā)學(xué)習(xí)路徑。 BLE(Blue
    的頭像 發(fā)表于 10-09 18:00 ?424次閱讀
    <b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b>精通:基于開源代碼的<b class='flag-5'>BLE</b>四種模式<b class='flag-5'>開發(fā)</b>詳解

    探索Murata Type2EG BLE評(píng)估套件:入門實(shí)踐

    探索Murata Type2EG BLE評(píng)估套件:入門實(shí)踐 在物聯(lián)網(wǎng)和無線通信飛速發(fā)展的今天,藍(lán)牙
    的頭像 發(fā)表于 12-18 09:40 ?313次閱讀

    Renesas QuickConnect Beginners Kit 快速上手:入門實(shí)踐

    Renesas QuickConnect Beginners Kit 快速上手:入門實(shí)踐 在當(dāng)今快速發(fā)展的電子科技領(lǐng)域,快速原型開發(fā)和高
    的頭像 發(fā)表于 12-29 09:25 ?190次閱讀