菜鸟AI - 让提示词生成更简单! 全站导航 全站导航
AI工具安装 新手教程 进阶教程 辅助资源 AI提示词 热点资讯 技术资讯 产业资讯 内容生成 模型技术 AI信息库

已有账号?

首页 > AI创作与模型 > ESP01S MQTT通信:JSON字符串发送问题与解决
模型技术 MQTT通信

ESP01S MQTT通信:JSON字符串发送问题与解决

2026-06-01
阅读 0
热度 0
作者 菜鸟AI编辑部
摘要

摘要

项目概要与踩坑记录 计划系统梳理ESP01S开发中实际遇到的问题与对应解法,重点记录MQTT通

项目概要与踩坑记录

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

ESP01S使用笔记05--ESP01S 进行 MQTT 通信 发送 JSON 字符串遇到的问题

当前配置采用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。理清这一机制,后续遇到类似场景便能游刃有余。

来源:互联网

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

同类文章推荐

相关文章推荐

更多