当前位置: 首页 > news >正文

嵌入式硬件篇---蓝牙模块


文章目录

  • 前言
  • 一、核心技术原理
    • 蓝牙工作流程
      • 设备发现阶段
      • 配对连接阶段
      • 数据传输阶段
  • 二、协议栈架构(以BLE为例)
    • 1.物理层
    • 2.链路层
    • 3.HCI层
    • 4.GATT
  • 三、典型应用场景扩展
    • 1. 室内定位系统(蓝牙5.1+)
    • 2. 运动健康监测
    • 3. 工业控制
  • 四、ESP32开发示例(BLE+经典蓝牙)
    • 1.环境配置
    • 2.BLE服务端代码
    • 3.经典蓝牙串口通信
  • 五、关键技术参数对比
  • 六、开发调试技巧
    • 空中抓包分析
  • 七、最新技术演进(蓝牙5.4)
    • 1.PAwR广播(Periodic Advertising with Responses)
    • 2.加密广播数据
    • 3.LE Audio


前言

本文简单介绍了蓝牙技术


一、核心技术原理

蓝牙模块基于 **2.4GHz ISM频段(2402-2480MHz)**工作,采用 FHSS跳频技术(1600次/秒)和 GFSK调制 实现抗干扰通信,主要包含三大核心阶段:

蓝牙工作流程

设备发现阶段

  1. 通过广播信道(37/38/39)发送 ADV_IND 数据包
  2. 包含设备MAC地址名称服务UUID等信息
  3. 扫描设备使用 SCAN_REQ 请求详细数据

配对连接阶段

  1. 采用 ECDH椭圆曲线加密 生成临时密钥
  2. 经典蓝牙使用PIN码配对(如0000)
  3. BLE采用 LE Secure Connections 安全协议

数据传输阶段

  1. 经典蓝牙:通过 ACL链路 传输大数据(音频/文件)
  2. BLE:基于 ATT协议 的 GATT数据框架
  3. 典型数据包结构:

| Preamble | Access Address | PDU | CRC |
|----------|----------------|-----|-----|
| 1字节 | 4字节 | 2-257B | 3B |

二、协议栈架构(以BLE为例)

±----------------------+
| Application Layer |
±----------------------+
| GATT | GAP | SMP |
±----------------------+
| ATT | L2CAP |
±----------------------+
| HCI |
±----------------------+
| Link Layer |
±----------------------+
| Physical Layer |
±----------------------+

1.物理层

物理层:负责射频信号调制解调

2.链路层

链路层:管理连接状态(Advertising/Connected)

3.HCI层

HCI层:硬件与协议栈的通信接口

4.GATT

GATT:定义服务/特征值的数据结构

三、典型应用场景扩展

1. 室内定位系统(蓝牙5.1+)

使用 AoA/AoD 到达角检测技术
精度可达10cm级别
应用案例:博物馆展品定位导览

2. 运动健康监测

智能跳绳:BLE实时传输计数数据
运动手环:步频/卡路里消耗同步

示例数据结构:
struct SportData {
  uint16_t heart_rate;  // 心率值
  uint32_t step_count;  // 步数
  uint8_t calories;     // 千卡数
};

3. 工业控制

  1. 无线PLC控制器
  2. 设备状态监控(温度/振动数据)
  3. 采用 Bluetooth Mesh 实现车间组网

四、ESP32开发示例(BLE+经典蓝牙)

1.环境配置

#PlatformIO配置
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps = 
    esp32-ble-arduino

2.BLE服务端代码

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>

#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHAR_UUID    "beb5483e-36e1-4688-b7f5-ea07361b26a8"

BLECharacteristic *pCharacteristic;

void setup() {
  BLEDevice::init("MyBLE");
  BLEServer *pServer = BLEDevice::createServer();
  
  BLEService *pService = pServer->createService(SERVICE_UUID);
  pCharacteristic = pService->createCharacteristic(
                      CHAR_UUID,
                      BLECharacteristic::PROPERTY_READ |
                      BLECharacteristic::PROPERTY_NOTIFY
                    );
  
  pCharacteristic->setValue("Hello World");
  pService->start();
  
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pAdvertising->start();
}

void loop() {
  // 每2秒发送传感器数据
  int sensorValue = analogRead(A0);
  uint8_t data[2] = {sensorValue >> 8, sensorValue & 0xFF};
  pCharacteristic->setValue(data, 2);
  pCharacteristic->notify();
  delay(2000);
}

3.经典蓝牙串口通信

#include "BluetoothSerial.h"

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32_Classic"); 
}

void loop() {
  if (SerialBT.available()) {
    String command = SerialBT.readStringUntil('\n');
    if(command == "GET_TEMP"){
      float temp = readTemperature();
      SerialBT.println(temp);
    }
  }
}

float readTemperature(){
  // 模拟温度传感器读取
  return random(200, 300)/10.0; 
}

五、关键技术参数对比

参数 经典蓝牙 BLE
峰值电流 30mA 15μA(广播模式)
最大数据速率 3Mbps(EDR) 2Mbps(BLE5.0)
连接建立时间 100-300ms <3ms
典型应用 音频传输 传感器网络

六、开发调试技巧

空中抓包分析

  1. 使用Nordic的nRF Sniffer工具

Wireshark解码蓝牙协议:
nrf_sniffer_ble -c 37 -d COM5 | wireshark -k -i -

  1. 功耗优化实践

调整连接间隔(Connection Interval)

// ESP32设置连接参数
BLEServer *pServer = BLEDevice::createServer();
pServer->updateConnParams(deviceAddress, 60, 120, 0, 400);
  1. 抗干扰设计

采用自适应跳频(AFH)
在代码中添加信道质量监测:

esp_ble_gap_read_rssi(remote_bda);

七、最新技术演进(蓝牙5.4)

1.PAwR广播(Periodic Advertising with Responses)

  1. 支持双向通信的广播模式
  2. 适用于电子价签等应用

2.加密广播数据

  1. 增强ADV_DATA的加密强度
  2. 使用AES-CCM链式加密

3.LE Audio

  1. 支持LC3音频编码\
  2. 实现多设备音频同步传输

通过深入理解蓝牙协议栈各层工作原理,开发者可以更好地优化连接稳定性、降低功耗并实现复杂应用场景需求。实际开发中建议结合具体芯片的SDK(如Nordic nRF5 SDK、TI CC2640 SDK)进行深度定制开发。


相关文章:

  • Node.js技术原理分析系列6——基于 V8 封装一个自己的 JavaScript 运行时
  • Java的输入
  • Tr0ll2靶机详解
  • matlab的s-function模块使用说明
  • Vulhub-wordpress通关攻略
  • 【LangChain入门 6 Chain组件】单链和多链
  • 微信小程序的业务域名配置(通过ingress网关的注解)
  • Java 中处理邮件附件:本地文件 vs 在线 URL
  • 产业观察:ASML2025.3.21
  • Git(12)GitLab持续集成(CICD)
  • 用ArcGIS做一张符合环评要求的植被类型图
  • [过程记录] 《分寝室》 一题做法思考
  • 基于springboot的教务系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 《模型思维》第二十三章 “与集体行动有关的问题” 总结
  • LLM之向量数据库Chroma milvus FAISS
  • AI+视频赋能智慧农业:EasyCVR打造全域可视化农场监管平台
  • AI日报 - 2025年3月20日
  • 《Java核心三问:字符串、equals()、hashCode()的隐藏雷区与完美避坑手册》
  • UltraSearch一键直达文件,高效搜索新体验
  • 双指针算法-day14(分组循环)
  • 微信支付wordpress/企业seo优化服务
  • 给自己做的网站换首页/河北seo推广公司
  • 嘉定网站建设哪里好/整合营销传播的明显特征是
  • 莱芜网站优化/太仓网站制作
  • 深圳多语言网站建设/百度网址大全旧版
  • 石家庄物流网站建设/快速排名教程