ESP01S MQTT通信:JSON字符串发送问题与解决
摘要
项目概要与踩坑记录 计划系统梳理ESP01S开发中实际遇到的问题与对应解法,重点记录MQTT通
项目概要与踩坑记录
计划系统梳理ESP01S开发中实际遇到的问题与对应解法,重点记录MQTT通信环节的转义难点。所有涉及的工具和代码已统一归档,免费分享给嵌入式开发者参考。

当前配置采用STA模式,串口挂载STM32。源码位于Stm32Code目录,笔记编号与文件夹一一对应。烧录固件版本为(1471)ESP8266-AT-1M.bin。
硬件接线要点:ESP01S绑定串口3,调试输出走串口1。理清引脚映射关系,后续调试才能快速定位异常。
本文核心聚焦MQTT发送JSON字符串时遇到的转义冲突——本质是C语言字符串转义与AT指令转义如何协同,实测踩坑点密集。
代码设计要点
调用ESP01S的AT+MQTTPUB下发JSON载荷,必须处理两层转义:C语言层 → AT指令层。
举例说明。目标JSON内容为:
{"roll":"12.34","pitch":"56.78"}
该JSON整体作为AT+MQTTPUB的第三个参数。AT指令内部,双引号和逗号必须用反斜杠转义——双引号写作\",逗号写作\,。第一层AT指令转义后命令:
AT+MQTTPUB=0,"ESP01S/angles","{"roll":"12.34","pitch":"56.78"}",0,0
接着用C语言字符串表达该命令。C语言中双引号和反斜杠同样需要转义——双引号用\",反斜杠用\\。注意:逗号在AT指令中已用\,处理,而逗号在C语言里不是特殊字符,无需额外处理,只需确保最终生成的字符串与上方AT指令完全一致。C代码实现:
sprintf(mqtt_put_message,
"AT+MQTTPUB=0,"ESP01S/angles","{\"roll\":\"12.34\"\,\"pitch\":\"56.78\"}",0,0rn")
为提升可读性,可将长字符串拆为多行,每行头尾用双引号括起实现字符串续接。最终代码结构:
// 上报状态信息
sprintf(mqtt_put_message,
"AT+MQTTPUB=0,"ESP01S/angles","
""{\"roll\":\"%.2f\""
"\,\"pitch\":\"%.2f\"}","
"0,0rn",
12.34, 56.78);
esp_at_cmd(&esp01s_device, mqtt_put_message , "OK", 2000);
printf("AT+MQTTSUB resp: %sn", esp01s_device.resp_buf);
上述代码经C编译器转义后,实际生成的字符串即前一版带反斜杠的AT指令:
AT+MQTTPUB=0,"ESP01S/angles","{"roll":"12.34","pitch":"56.78"}",0,0
ESP01S收到该AT指令后,解析反斜杠转义序列,剔除冗余反斜杠,最终向MQTT服务器提交的JSON即为初始目标:
{"roll":"12.34","pitch":"56.78"}
整个转义链条环环相扣:C语言保护AT指令内反斜杠,AT指令保护JSON内双引号与逗号,ESP01S最后剥离一层,输出干净的可解析JSON。理清这一机制,后续遇到类似场景便能游刃有余。
来源:互联网
本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。