ESP32 Arduino 经典蓝牙 SPP 通信实战:双节点自动配对与LED控制
1. 硬件准备与环境搭建
在开始ESP32经典蓝牙通信项目前,我们需要准备以下硬件组件:
- ESP32开发板 ×2(推荐使用NodeMCU-32S或ESP32 DevKitC)
- LED灯 ×1(用于服务端状态指示)
- 220Ω电阻 ×1(限流保护LED)
- 面包板和杜邦线 若干
开发环境配置步骤如下:
-
安装Arduino IDE(1.8.x或更高版本)
-
添加ESP32开发板支持:
- 打开Arduino IDE,进入"文件 > 首选项"
- 在"附加开发板管理器网址"中添加:
https://dl.espressif.com/dl/package_esp32_index.json - 打开"工具 > 开发板 > 开发板管理器",搜索并安装"esp32"
-
安装必要库文件:
- BluetoothSerial库(ESP32 Arduino核心已内置)
- 可选:PlatformIO插件(VS Code用户)
硬件连接示意图:
ESP32客户端:
无需外接元件
ESP32服务端:
GPIO2 ----[220Ω]----LED----GND
2. 蓝牙SPP通信基础原理
经典蓝牙SPP(Serial Port Profile)通过模拟传统串口通信实现设备间数据传输。ESP32的蓝牙协议栈架构如下:
| 协议层 | 功能描述 |
|---|---|
| 应用层 | 用户自定义的数据处理逻辑 |
| RFCOMM | 模拟串口电缆的协议 |
| L2CAP | 逻辑链路控制与适配协议 |
| HCI | 主机控制器接口 |
| 基带层 | 物理层无线通信处理 |
关键参数对比:
| 连接方式 | 平均耗时 | 适用场景 |
|---|---|---|
| connect(slaveName) | 20-30秒 | 动态IP环境 |
| connect(address) | 5-10秒 | 固定设备 |
实测传输性能:
- 开放环境双向传输速率:1.2-1.5Mbps
- 有效通信距离:10-20米(无遮挡)
3. 服务端完整实现
服务端代码负责创建蓝牙服务、处理连接请求并响应客户端指令:
#include "BluetoothSerial.h"
#include <Arduino.h>
#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Bluetooth not available or not enabled. It is only available for the ESP32 chip.
#endif
// 硬件配置
#define LED_PIN 2
BluetoothSerial SerialBT;
// 安全配置
const char *pin = "1597"; // 配对密码
String device_name = "ESP32-LED-CTRL"; // 设备名称
// 连接状态检测
unsigned long lastConnectTime = 0;
const unsigned long CONNECT_TIMEOUT = 15000; // 15秒超时
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// 蓝牙初始化
SerialBT.begin(device_name);
SerialBT.setPin(pin);

&spm=1001.2101.3001.5002&articleId=83480492&d=1&t=3&u=639fedefd288441382c67620a618c039)
954

被折叠的 条评论
为什么被折叠?



