STM32提高篇: 藍牙通訊

STM32提高篇: 藍牙通訊

  • 一.藍牙通訊介紹
    • 1.藍牙技術類型
  • 二.藍牙協議棧
    • 1.藍牙芯片架構
    • 2.BLE低功耗藍牙協議棧框架
  • 三.ESP32-C3中的藍牙功能
    • 1.廣播
    • 2.掃描
    • 3.通訊
  • 四.發送和接收

一.藍牙通訊介紹

藍牙,是一種利用低功率無線電,支持設備短距離通信的無線電技術,能在包括移動電話、PDAQ、無線耳機、筆記本電腦、相關外設等眾多設備之間進行無線信息交換,藍牙工作在全球通用的2.4 GHz(2.4 至 2.485 GH) ISM(即工業、科學、醫學)頻段,使用IEEE802.11協議。

1.藍牙技術類型

藍牙協議包括兩種技術:BR:Basic Rate和LE:Low Energy。
這兩種技術都包括搜索(discovery)管理、連接(connection)管理等機制,但它們是相互獨立的,不能互通的技術!
廠商如果只實現了一種,那么只能與同樣實現該技術的設備互通。如果廠商要確保能和所有的藍牙設備互通,那么就只能同時實現兩種技術,而不去管是否真的需要。
經典藍牙(BR/EDR)
BR:Basic Rate是正宗的藍牙技術,可以包括可選的EDR(Enhanced Data Rate)技術,以及AMP(Alternate MAC and PHY layer extension)。
BR:最早期的藍牙技術,速度只能達到721.2Kbps,在那個年代,已為高大上了。·EDR:隨著技術的提升,使用EDR技術的藍牙,理論速率可以達到2.1Mbps。
AMP:使用AMP技術的藍牙,理論速率可以達到54Mbps。藍牙自身的物理層和AMP技術差異明顯,BR/EDR和AMP是不能同時使用的。簡單的說,就是:BR和EDR是可以同時存在的,但BR/EDR和AMP只能二選一。
低功耗藍牙(BLE)
上面所講的BR技術的進化路線,就是傳輸速率的加快、加快、再加快。但能量是守恒的,你想傳的更快,代價就是消耗更多的能量。而有很多的應用場景,并不關心傳輸速率,反而非常關心功耗。這就是Bluetooth LE(稱作藍牙低功耗)產生的背景。
低功耗藍牙與經典藍牙使用相同的2.4GHz無線電頻率,因此雙模設備可以共享同一個天線。低功耗藍牙使用的調制系統更簡單。BLE技術相比BR技術,差異非常大,或者說就是兩種不同的技術,湊巧都加一個“藍牙”的前綴而已。目前BLE主要廣泛應用于引IoT(Internet of Things:物聯網)產品領域。

二.藍牙協議棧

藍牙協議棧極其復雜,官方協議說明書大概有800多頁。我們只做一個大致了解。芯片廠家一般都封裝好了,我們直接使用即可。

1.藍牙芯片架構

藍牙的核心系統,由一個Host和一個或多個Controller組成。
(1)BT Host:邏輯實體,在HCI(Host Controller Interface)的上層。
(2)BT Controller:邏輯實體,在HCI(Host Controller Interface)的下層。
根據Host與Controller的組成關系,常見的藍牙芯片也分為以下幾種:
(1)單模藍牙芯片:單一傳統藍牙的芯片,單一低功耗藍牙的芯片。即(1個Host結合1個Controller)
(2)雙模藍牙芯片:同時支持傳統藍牙和低功耗藍牙的芯片。即(1個Host結合多個Controller)
在這里插入圖片描述
藍牙協議是通信協議的一種,一般而言,我們把某個協議的實現代碼稱為協議棧(protocol stack),BLE協議棧就是實現低功耗藍牙協議的代碼。

2.BLE低功耗藍牙協議棧框架

要實現一個BLE應用,首先需要一個支持BLE射頻的芯片,然后還需要提供一個與此芯片配套的BLE協議棧,最后在協議棧上開發自己的應用。
可以看出BLE協議棧是連接芯片和應用的橋梁,是實現整個BLE應用的關鍵。
簡單來說,BLE協議棧主要用來對你的應用數據進行層層封包,以生成一個滿足BLE協議的空中數據包,也就是說,把應用數據包裹在一系列的幀頭(header)和幀尾(tail)中。
藍牙協議規定了兩個層次的協議,分別為藍牙核心協議(Bluetooth Core)和藍牙應用層協議(Bluetooth Application)。
藍牙核心協議關注對藍牙核心技術的描述和規范,它只提供基礎的機制,并不關心如何使用這些機制;
藍牙應用層協議,是在藍牙核心協議的基礎上,根據具體的應用需求,百花齊放,定義出各種各樣的策略,如FTP、文件傳輸、局域網等等。
在這里插入圖片描述
而藍牙核心協議(Bluetooth Core)又包含BLE Controller和BLE Host兩部分。Controller負責定義RF、Baseband等偏硬件的規范,并在這之上抽象出用于通信的邏輯鏈路(Logical Link);Host負責在邏輯鏈路的基礎上,進行更為友好的封裝,這樣就可以屏蔽掉藍牙技術的細節,讓Bluetooth Application更為方便的使用。
在這里插入圖片描述
物理層(Physical Layer,PHY)
PHY 層主要負責在物理信道上發送和接收信息包。Bluetooth LE 使用 40 個射頻信道。頻率范圍:2402 MHz 到 2480 MHz。
鏈路層(Link Layer,LL)
LL 層主要負責創建、修改和釋放邏輯鏈路(以及,如果需要,它們相關的邏輯傳輸),以及與設備之間的物理鏈路相關的參數的更新。它控制鏈路層狀態機處于準備、廣播、監聽/掃描、發起連接、已連接五種狀態之一。
主機控制接口層(Host Controller Interface,HCI)
HCI 層向主機和控制器提供一個標準化的接口。該層可以由軟件 API 實現或者使用硬件接口 UART、SPI、USB 來控制。
通用訪問配置文件層(Generic access profile,GAP)
GAP 層代表所有藍牙設備通用的基本功能,例如傳輸、協議和應用程序配置文件使用的模式和訪問程序。GAP 服務包括設備發現、連接模式、安全、身份驗證、關聯模型和服務發現。
邏輯鏈路控制及自適應協議層(Logical Link Control and Adaptation Protocol,L2CAP)
L2CAP 層負責對主機和協議棧之間交換的數據進行協議復用能力、分段和重組操作。
安全管理層(Security Manager,SM)
SMP 層用于生成加密密鑰和身份密鑰。SMP 還管理加密密鑰和身份密鑰的存儲,并負責生成隨機地址并將隨機地址解析為已知設備身份。
屬性協議層(Attribute protocol,ATT)
簡單來說,ATT層用來定義用戶命令及命令操作的數據,比如讀取某個數據或者寫某個數據。BLE引入了attribute概念,用來描述一條一條的數據。Attribute除了定義數據,同時定義該數據可以使用的ATT命令,因此這一層被稱為ATT層。
通用屬性配置文件層(Generic Attribute profile,GATT)
GATT 層表示屬性服務器和可選的屬性客戶端的功能。該配置文件描述了屬性服務器中使用的服務、特征和屬性的層次結構。該層提供用于發現、讀取、寫入和指示服務特性和屬性的接口。

三.ESP32-C3中的藍牙功能

ESP32-C3支持Bluetooth 5(LE)。下載好固件之后(我們前面下載的固件已經支持wifi和藍牙了), STM32仍然可以通過AT指令操作藍牙。
BLE角色劃分:
LL:設備可以劃分為主機和從機,從機廣播,主機可以發起連接。
GAP:定義了 4 種特定角色:廣播者、觀察者、外圍設備 和 中心設備。
GATT:設備可以分為服務端和客戶端。

1.廣播

廣播是指從機(服務器)每經過一個時間間隔發送一次廣播數據包,這個時間間隔稱為廣播間隔,這個廣播動作叫做廣播事件,只有當從機處于廣播狀態時,主機(客戶端)才能發現該從機(服務器)。
在每個廣播事件中,廣播包會分別在37、38和39三個信道上依次廣播,如下圖所示。
在這里插入圖片描述
廣播數據包一般包含可讀的設備名稱,設備是否可連接等信息。

2.掃描

掃描是主機監聽從機廣播數據包和發送掃描請求的過程,主機通過掃描,可以獲取到從機的廣播包以及掃描回應數據包,主機可以對已掃描到的從機設備發起連接請求,從而連接從機設備并通信。

3.通訊

主從之間的通信是通過GATT的Profile來完成的,Profile可以理解為配置,數據格式等。
從機作為GATT的Server端,用來定義和存儲Profile。Profile包含一個或者多個Service,每個Service又包含一個或者多個Characteristic,Characteristic是主從通信的最小單元。
主機作為GATT的Client端,用來發現和獲取從機的Service和Characteristic,從而與之通信。
在這里插入圖片描述
關于服務 Service和特征值Characteristic的概念。每個服務和特征值都有自己的唯一標識 UUID,標準UUID為128位,藍牙協議棧中一般采用16位,也就是兩個字節的UUID格式。
一個從機設備包括一個或者多個服務;一個服務中又可以包括一條或者多條特征值,每個特征值都有自己的屬性 Property,屬性的取值有:可讀 Read,可寫 Write 以及通知 Notify。

四.發送和接收

ESP32C3發送AT指令使用藍牙功能。
藍牙初始化:

void Inf_ESP32_BLE_Init(void)
{/* 0. 關閉wifi功能(清理wifi驅動) */Inf_ESP32_SendCmd("AT+CWINIT=0\r\n");/* 1. 初始化為服務器模式 */Inf_ESP32_SendCmd("AT+BLEINIT=2\r\n");/* 2. 創建服務 */Inf_ESP32_SendCmd("AT+BLEGATTSSRVCRE\r\n");/* 3. 開啟提供的所有服務 */Inf_ESP32_SendCmd("AT+BLEGATTSSRVSTART\r\n");/* 4. 設置廣播參數 */Inf_ESP32_SendCmd("AT+BLEADVPARAM=50,50,0,0,7,0,,\r\n");/* 5. 自動廣播參數設置 */Inf_ESP32_SendCmd("AT+BLEADVDATAEX=\"ble-teacher\",\"A102\",\"0112030405\",1\r\n");/* 6. 開始廣播 */Inf_ESP32_SendCmd("AT+BLEADVSTART\r\n");/* 透傳模式: 必須等待有客戶端連接之后才能開啟.連接之前可以先設置一下 透傳 的一些參數*//* 7. 設置透傳的一些參數 */Inf_ESP32_SendCmd("AT+BLESPPCFG=1,1,7,1,5\r\n");
}

發送數據:
直接使用Transmit。

void Inf_ESP32_BLE_SendData(uint8_t data[], uint16_t dataLen)
{if(dataLen == 0) return;HAL_UART_Transmit(&huart2, data, dataLen, 2000);
}

接收數據:

/*
當連接成功之后:+BLECONN:0,"7f:b3:6a:19:f4:35"  開啟透傳+BLECONNPARAM:0,0,0,6,0,500+WRITE:0,1,7,1,2,+BLECONNPARAM:0,0,0,40,0,500
選擇服務和特征:+WRITE:0,1,7,1,2,+WRITE:0,1,7,1,2,+WRITE:0,1,7,1,2,+WRITE:0,1,7,1,2,
傳送數據:+WRITE:0,1,5,,4,abcd關閉連接的時候:+BLEDISCONN:0,"41:74:6e:e5:05:a8"*/
void Inf_ESP32_BLE_ReadData(uint8_t data[], uint16_t *dataLen)
{*dataLen = 0;if(rxSize == 0) return;/* 開始對數據進行解析處理 */if(strstr((char *)rxBuff, "+BLECONN:")) /* 表示有客戶端連接進來 */{/* 開啟透傳模式 */printf("有客戶端連接,準備開啟透傳...\r\n");Inf_ESP32_SendCmd("AT+BLESPP\r\n");printf("透傳開啟成功...\r\n");}else if(strstr((char *)rxBuff, "+BLEDISCONN:")){/* 如果連接斷開, 應該關閉透傳模式 */printf("客戶端退出,關閉透傳模式 \r\n");HAL_UART_Transmit(&huart2, "+++", 3, 2000);HAL_Delay(1500);/* 重新廣播 */printf("重新開始廣播\r\n");Inf_ESP32_SendCmd("AT+BLEADVSTART\r\n");}else if(strstr((char *)rxBuff, "+BLECONNPARAM:") || strstr((char *)rxBuff, "+WRITE")){/* 什么都不做 */}else{/* 真正的透傳數據 */memcpy(data, rxBuff, rxSize);*dataLen = rxSize;}memset(rxBuff, 0, rxSize);rxSize = 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80600.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80600.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80600.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

6.1.多級緩存架構

目錄 一、多級緩存基礎與核心概念 緩存的定義與價值 ? 緩存的應用場景(高并發、低延遲、減輕數據庫壓力) ? 多級緩存 vs 單級緩存的優劣對比 多級緩存核心組件 ? 本地緩存(Caffeine、Guava Cache) ? 分布式緩存(…

MySQL的MVCC【學習筆記】

MVCC 事務的隔離級別分為四種,其中Read Committed和Repeatable Read隔離級別,部分實現就是通過MVCC(Multi-Version Concurrency Control,多版本并發控制) 版本鏈 版本鏈是通過undo日志實現的, 事務每次修改…

基于OpenMV+STM32+OLED與YOLOv11+PaddleOCR的嵌入式車牌識別系統開發筆記

基于OpenMV、STM32與OLED的嵌入式車牌識別系統開發筆記 基于OpenMV、STM32與OLED的嵌入式車牌識別系統開發筆記系統架構全景 一、實物演示二、OpenMV端設計要點1. 硬件配置優化2. 智能幀率控制算法3. 數據傳輸協議設計 三、PyTorch后端核心實現:YOLOv11與PaddleOCR的…

C#中常見的設計模式

文章目錄 引言設計模式的分類創建型模式 (Creational Patterns)1. 單例模式 (Singleton)2. 工廠方法模式 (Factory Method)3. 抽象工廠模式 (Abstract Factory)4. 建造者模式 (Builder) 結構型模式 (Structural Patterns)5. 適配器模式 (Adapter)6. 裝飾器模式 (Decorator)7. 外…

Nacos簡介—3.Nacos的配置簡介

大綱 1.Nacos生產集群Web端口與數據庫配置 2.Nacos生產集群的Distro協議核心參數 3.Nacos打通CMDB實現跨機房的就近訪問 4.Nacos基于SPI動態擴展機制來獲取CMDB的數據 5.基于Nacos SPI機制開發CMDB動態擴展 6.Nacos基于CMDB來實現多機房就近訪問 7.Nacos生產集群Prometh…

Jest 快照測試

以下是關于 Jest 快照測試的系統化知識總結,從基礎使用到底層原理全面覆蓋: 一、快照測試核心原理 1. 工作機制三階段 #mermaid-svg-GC46t2NBvGv7RF0M {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GC46t2NBvGv…

第十六屆藍橋杯大賽軟件賽省賽 C/C++ 大學B組 [京津冀]

由于官方沒有公布題目的數據, 所以代碼僅供參考 1. 密密擺放 題目鏈接:P12337 [藍橋杯 2025 省 AB/Python B 第二場] 密密擺放 - 洛谷 題目描述 小藍有一個大箱子,內部的長寬高分別是 200、250、240(單位:毫米)&…

Spring 學習筆記之 @Transactional 異常不回滾匯總

使用springboot時,只要引入spring-jdbc/jpa相關的依賴后,在想要啟用事務的方法上加上Transactional注解就能開啟事務,碰到異常就能自動回滾。大大的提高了編碼的便捷性性,同時也不侵入代碼,保持了代碼的簡潔性。 默認情…

React 與 Vue 虛擬 DOM 實現原理深度對比:從理論到實踐

在現代前端開發中,React 和 Vue 作為最流行的兩大框架,都采用了虛擬 DOM(Virtual DOM) 技術來優化渲染性能。虛擬 DOM 的核心思想是通過 JavaScript 對象模擬真實 DOM,減少直接操作 DOM 的開銷,從而提高頁面…

WordPress AI 原創文章自動生成插件 24小時全自動生成SEO原創文章 | 多語言支持 | 智能配圖與排版

為什么選擇Linkreate AI內容生成插件? ? 全自動化工作流程 - 從關鍵詞挖掘到文章發布一站式完成 ? 多語言支持 - 輕松覆蓋全球市場(中/英等多語種) ? 智能SEO優化 - 自動生成搜索引擎友好的內容結構 ? AI智能配圖 - 每篇文章自動匹配高質…

GPU加速-系統CUDA12.5-Windows10

誤區注意 查看當前系統可支持的最高版本cuda:nvidia-smi 說明: 此處顯示的12.7只是驅動對應的最高版本,不一定是 / 也不一定需要是 當前Python使用的版本。但我們所安裝的CUDA版本需要 小于等于它(即≤12.7)因此即使…

IOT項目——DIY 氣象站

開源項目:ESP32 氣象站 作者:GiovanniAggiustatutto 原文鏈接:原文 開源項目:太陽能 WiFi 氣象站 V4.0 作者:opengreenenergy 原文鏈接:原文 DIY 氣象站 簡介1-制版2-物料 溫度設備塔風向標風速計雨量計框…

5G助力智慧城市的崛起——從概念到落地的技術實踐

5G助力智慧城市的崛起——從概念到落地的技術實踐 引言:智慧城市中的“隱形脈絡” 隨著城市化的快速推進,傳統的城市管理方式已經難以滿足人口增長和資源優化的需求。智慧城市的概念應運而生,通過技術創新實現智能化、可持續發展的城市生態…

【Linux】web服務器的部署和優化

目錄 nginx的安裝與啟用--/usr/share/nginx/html默認發布目錄 nginx的主配置文件--/etc/nginx/nginx_conf nginx的端口 nginx默認發布文件--index.html nginx默認發布目錄 nginx的訪問控制 基于IP地址的訪問控制 基于用戶認證的訪問控制 nginx的虛擬主機--/etc/nginx/…

結合五層網絡結構講一下用戶在瀏覽器輸入一個網址并按下回車后到底發生了什么?

文章目錄 實際應用第一步:用戶在瀏覽器輸入 www.baidu.com 并按下回車1. 瀏覽器觸發域名解析(DNS查詢) 第二步:DNS請求的逐層封裝與傳輸1. 應用層(DNS協議)2. 傳輸層(UDP協議)3. 網絡…

深入理解N皇后問題:從DFS到對角線優化

N皇后問題是一個經典的算法問題,要求在NN的棋盤上放置N個皇后,使得它們互不攻擊。本文將全面解析該問題的解法,特別聚焦于DFS算法和對角線優化的數學原理。 問題描述 在NN的國際象棋棋盤上放置N個皇后,要求: 任意兩個…

Java面試場景篇:分布式鎖的實現與組件詳解

互聯網大廠Java求職者面試:分布式鎖的實現與組件 在一場緊張而又充滿挑戰的面試中,Java架構師馬架構正面對著一位經驗豐富的面試官。以下是他們之間關于分布式鎖實現方式及相關問題的對話。 第一輪提問 面試官:請介紹一下分布式鎖的概念。…

關于使用 讀光-文字檢測-DBNet行檢測模型-中英-通用領域,版本問題

關于使用 讀光-文字檢測-DBNet行檢測模型-中英-通用領域,版本問題 pip install modelscopeSuccessfully installed certifi-2025.4.26 charset-normalizer-3.4.1 colorama-0.4.6 idna-3.10 modelscope-1.25.0 requests-2.32.3 tqdm-4.67.1 urllib3-2.4.0 pip insta…

刷刷刷刷刷RCE

云曦歷年考核 25年春開學考 RCCCE 開啟題目進行代碼審計 GET傳參傳入一個參數cmd&#xff0c;但對參數內容給了黑名單進行過濾 $blacklist /bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|"|\>|\<|\%|\$/i; ls、cat等都…

2024江西ICPC部分題解

題目列表 A - Maliang Learning PaintingC - LiarG - Multiples of 5H - ConvolutionJ - Magic MahjongK - Magic Tree A - Maliang Learning Painting 題目來源&#xff1a;A - Maliang Learning Painting 思路分析 這是個簽到題&#xff0c;直接輸出abc即可 #include<b…