ESP01S使用笔记05:ESP01S 进行 MQTT 通信 发送 JSON 字符串遇到的问题
项目说明
最近将记录一些使用 ESP01S 遇到的问题和解决思路。所有文章中所提及的工具和代码均整理免费分享。
github : github.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 指令转义 两层转换。
比如我们现在有一个目标发送格式
{"roll":"12.34","pitch":"56.78"}
JSON 整体作为 AT+MQTTPUB 的第三个参数,参数内双引号和逗号必须用 转义,写成"和,:
AT+MQTTPUB=0,"ESP01S/angles","{"roll":"12.34","pitch":"56.78"}",0,0
然后在 C 语言中,我们要把上面这条指令写成字符串,那么这个字符串中的双引号和需要用 转义,写成"和,为什么C语言中不用再把,转义一遍,因为那只是AT+MQTTPUB中的转义要求,不是C的转义要求,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);
所以上面这条信息,真的发送出去的时候就是如下,然后你把这个发送到ESP01S中后,他会再转义一遍有的部分
AT+MQTTPUB=0,"ESP01S/angles","{"roll":"12.34","pitch":"56.78"}",0,0
最后发送到服务器就是:
{"roll":"12.34","pitch":"56.78"}
相关资讯
-
07.10
暗黑4S14灵巫蝙蝠蛰刺BD攻略
-
07.10
三国群英传策定九州开服活动表 三国群英传策定九州开服活动表解析详解
-
07.10
团本自走棋圣骑士如何玩
-
07.10
崩坏星穹铁道绯英如何养成-崩坏星穹铁道绯英养成攻略
-
07.10
梦幻西游159级不磨狮驼岭装备如何展示
-
07.10
冒险家艾略特的千年奇谭传火仪式任务攻略 - 冒险家艾略特的千年奇谭传火仪式任务玩法
游戏推荐
推荐专题
热门阅读
推荐下载
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏