1. ESP32蓝牙AT指令基础入门
第一次接触ESP32的蓝牙AT指令时,我完全被各种专业术语搞晕了。BLE、GATT、UUID这些概念听起来高大上,其实用起来比想象中简单得多。ESP32的蓝牙功能分为经典蓝牙和低功耗蓝牙(BLE)两种模式,我们今天重点讨论BLE模式下的AT指令操作。
AT指令是什么?简单说就是通过串口发送的文本命令,比如"AT+BLEINIT=2"这样的字符串。ESP32收到后会执行对应操作并返回结果。这种交互方式特别适合在资源受限的嵌入式系统中使用,不需要复杂的协议栈,一个USB转TTL模块就能搞定。
准备工具清单:
- 安信可ESP32-S模组/开发板
- USB转TTL调试工具(CH340/CP2102都行)
- 串口调试助手(推荐使用Putty或SecureCRT)
- BLE调试APP(nRF Connect或LightBlue)
注意:使用前请确保固件版本支持BLE AT指令,建议下载最新AT固件。我在早期版本上遇到过不少坑,升级后问题都解决了。
2. 快速搭建BLE服务器
2.1 设备初始化与广播设置
先来点干货,5分钟让你的ESP32被手机发现:
AT+BLEINIT=2 # 初始化BLE服务端模式 AT+BLENAME="MyESP32" # 设置设备名称 AT+BLEADVDATA="0201060A094D794553503332" # 设置广播数据 AT+BLEADVSTART # 开始广播这段代码中,广播数据"0201060A094D794553503332"需要解释下:
- 02 01 06:表示BLE Only模式
- 0A 09:后面跟着10字节的完整设备名
- 4D794553503332:"MyESP32"的十六进制ASCII码
我在实际测试中发现,广播间隔对连接成功率影响很大。默认参数下有些手机可能扫描不到设备,这时可以调整广播间隔:
AT+BLEADVINT=100,200 # 设置最小100ms,最大200ms的广播间隔2.2 服务与特征值创建
BLE通信的核心是GATT协议,它定义了服务(Service)和特征值(Characteristic)的层级关系。就像一家餐厅有多个服务部门(服务),每个部门提供不同的菜品(特征值)。
创建基础服务的完整流程:
AT+BLEGATTSSRVCRE # 创建GATT服务 AT+BLEGATTSSRVSTART # 启动服务创建特征值时需要特别注意属性配置。比如要实现透传功能,需要:
- 发送特征:支持Notify或Indicate属性
- 接收特征:支持Write属性
3. 实现稳定BLE透传
3.1 透传参数配置
透传模式就像在两个设备间架设了一条数据管道,一端输入的数据会原样从另一端输出。配置命令如下:
AT+BLESPPCFG=1,1,6,1,5 # 启用透传,使用1号服务的6号特征发送,5号特征接收参数选择有讲究:
- 先用
AT+BLEGATTSCHAR?查询特征列表 - 发送特征要选支持Notify/Indicate的
- 接收特征要选支持Write的
3.2 数据收发实战
开启透传模式后,数据交换变得异常简单:
AT+BLESPP # 进入透传模式 > Hello World # 发送数据 +BLERECV:0,1,5,11,48656C6C6F20576F726C64 # 接收到的数据(十六进制)实测中发现MTU大小会影响传输效率。默认23字节的MTU对于大文件传输太慢了,可以这样优化:
AT+BLECFGMTU=0,200 # 设置MTU为200字节4. 安全配对与加密通信
4.1 静态密钥配对方案
默认的动态配对码每次都要重新输入,用户体验很差。静态密钥方案可以解决这个问题:
AT+BLESECPARAM=1,0,16,3,3 # 设置安全参数 AT+BLESETKEY=123456 # 设置静态配对码 AT+BLEENC=0,3 # 请求加密连接这个方案我在智能门锁项目中使用过,实测小米/华为手机都能稳定连接。注意密钥长度最好6位以上,太简单会被系统拒绝。
4.2 连接参数优化
蓝牙连接不稳定?可能是参数没调好。关键参数有三个:
- 连接间隔(Connection Interval):7.5ms-4s
- 从机延迟(Slave Latency):0-499
- 监控超时(Supervision Timeout):100ms-32s
推荐这样设置:
AT+BLECONNPARAM=0,16,32,0,600 # 间隔20-40ms,超时6s5. 常见问题排查指南
5.1 连接失败排查步骤
遇到连接问题时,可以按照这个checklist排查:
- 确认设备处于可发现状态(LED闪烁)
- 检查手机蓝牙是否开启
- 查看AT指令返回错误码
- 尝试重置蓝牙模块
AT+RESTORE
5.2 性能优化技巧
提升BLE传输速度的三个关键点:
- 增大MTU:最高可设517字节
- 缩短连接间隔:平衡功耗与速度
- 使用数据长度扩展:
AT+BLEDATALEN=0,251
6. 项目实战:环境监测节点
去年我做了一个温湿度监测项目,ESP32通过BLE每5分钟上报数据到手机。核心代码如下:
# 初始化 AT+BLEINIT=2 AT+BLENAME="EnvMonitor" AT+BLEADVDATA="0201060A09456E764D6F6E69746F72" # 创建自定义服务 AT+BLEGATTSSRVCRE AT+BLEGATTSCHAR=1,1,0x2A6E,0x12 # 温度特征 AT+BLEGATTSCHAR=1,2,0x2A6F,0x12 # 湿度特征 # 上报数据 AT+BLEGATTSNTFY=0,1,1,2,2265 # 22.65℃ AT+BLEGATTSNTFY=0,1,2,2,4865 # 48.65%RH这个项目跑了半年多,稳定性非常好。关键是要处理好低功耗设计,我使用了ESP32的深度睡眠模式,两节AA电池能用3个月。