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

项目说明

最近将记录一些使用 ESP01S 遇到的问题和解决思路。所有文章中所提及的工具和代码均整理免费分享。

githubgithub.com/snqx-lqh/Pr...

gitee(国内镜像)gitee.com/snqx-lqh/Pr...

项目属于 32 的编号 B007 ,在发布页中,找到对应资料获取方式。

使用 STA 的工作模式,串口连接 STM32,代码在文件夹Stm32Code中,和笔记序号一致。

使用的固件是 (1471)ESP8266-AT-1M.bin

说明一下,ESP01S接的是串口3,调试打印接的是串口1。

本篇文章说明一下,我在使用 MQTT 想要发送 JSON 字符串时遇到的问题,主要就是代码转义。

代码设计

为了通过 ESP01S 的 AT+MQTTPUB 命令发送 JSON 数据,需要处理 C 语言转义 → AT 指令转义 两层转换。

比如我们现在有一个目标发送格式

json 复制代码
{"roll":"12.34","pitch":"56.78"}

JSON 整体作为 AT+MQTTPUB 的第三个参数,参数内双引号和逗号必须用 \ 转义,写成\"\,

c 复制代码
AT+MQTTPUB=0,"ESP01S/angles","{\"roll\":\"12.34\"\,\"pitch\":\"56.78\"}",0,0

然后在 C 语言中,我们要把上面这条指令写成字符串,那么这个字符串中的双引号和\需要用 \ 转义,写成\"\\,为什么C语言中不用再把,转义一遍,因为那只是AT+MQTTPUB中的转义要求,不是C的转义要求,C中我们的转义只要能获得上面的字符串就可以。就需要如此写入:

c 复制代码
sprintf(mqtt_put_message,
"AT+MQTTPUB=0,\"ESP01S/angles\",\"{\\\"roll\\\":\\\"12.34\\\"\\,\\\"pitch\\\":\\\"56.78\\\"}\",0,0\r\n")

为了方便看,我做了换行,换行需要在换行头尾加上"表示续接字符串。 也就是下面这种状态了。

c 复制代码
	// 上报状态信息
	sprintf(mqtt_put_message,
		"AT+MQTTPUB=0,\"ESP01S/angles\","
		"\"{\\\"roll\\\":\\\"%.2f\\\""
		"\\,\\\"pitch\\\":\\\"%.2f\\\"}\","
		"0,0\r\n",
		12.34, 56.78); 
	esp_at_cmd(&esp01s_device, mqtt_put_message , "OK", 2000);  
	printf("AT+MQTTSUB resp: %s\n", esp01s_device.resp_buf); 

所以上面这条信息,真的发送出去的时候就是如下,然后你把这个发送到ESP01S中后,他会再转义一遍有\的部分

c 复制代码
AT+MQTTPUB=0,"ESP01S/angles","{\"roll\":\"12.34\"\,\"pitch\":\"56.78\"}",0,0

最后发送到服务器就是:

c 复制代码
{"roll":"12.34","pitch":"56.78"}
相关推荐
Run_Teenage20 分钟前
嵌入式:理解I2C通信基本原理
stm32·单片机·嵌入式硬件
番茄灭世神44 分钟前
汇顶模拟前端GH3220使用备忘录
c语言·单片机·传感器·模拟芯片·电生理信号处理
G.E.M.小白1 小时前
单片机/嵌入式超全基础面试题(CPU/MCU/寄存器/三极管/数码管/位操作)
单片机·嵌入式硬件
jianqiang.xue2 小时前
ESP-IDF保姆级入门35|SDMMC高速SD卡全解:SDIO接口/4位高速模式/FATFS文件系统/热插拔检测/磨损均衡,掌握嵌入式大容量存储扩展
单片机·esp32
万物智能信息科技3 小时前
RGB并行屏输出—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
单片机·嵌入式硬件·华为·鸿蒙
新晨单片机设计3 小时前
S012A-基于STM32单片机光强检测系统【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件
盛世宏博智慧档案3 小时前
以太网温湿度传感器 TCP/IP、UDP、SNMP 协议怎么选?区别详细分析
单片机·tcp/ip·udp·以太网温湿度传感器
辰域电子4 小时前
STM32项目开源:电子秤计价系统(代码+原理图+仿真)
stm32·单片机·嵌入式硬件·开源·毕业设计·proteus
ysu_03144 小时前
基于 STM32 与 TinyML 的端侧手势识别系统
stm32·单片机·嵌入式硬件·mcu
Brilliantwxx4 小时前
【STM32 】把 printf 搬到串口上 —— C 标准 IO 函数重定向与多文件工程搭建(实战串口电灯)
c语言·开发语言·stm32·单片机·嵌入式硬件·架构·ecmascript