AT+MQTTSUB=0,"$sys/*/&/thing/property/post/reply",0
AT+MQTTPUB=0,"$sys/*/&/thing/property/post","{\"id\":\"123\"\,\"params\":{\"CurrentTemperature\":{\"value\":12}\,\"CurrentHumidity\":{\"value\":23}}}",0,0
*:产品ID,&:设备ID
这个是两个上传云平台的AT指,第一个是订阅报文,第二个是发布报文。
一.注意在调试助手的时候调试的时候一定要用转义字符'\'去转义,包括逗号(这个一定要注意)和双引号,字符串内部使用了双引号,就需要使用反斜线(\)来转义这些双引号,以避免与外层的双引号混淆,确保字符串被正确解析。
第二.一定要严格按照平台的格式编写,不然一定错,每个平台都有自己的规范,还有出现了这个错误{"id":null,"code":2402,"msg":"request format error"}多半是发布报文写错了
我就是在value这这里加了[]所以报错了
这个是用串口调试助手发送的指令,但是要用单片机去实现,还需要注意这个返斜杠一定要给上,不要发布不了数据的
#define publish_Command "AT+MQTTPUB=0,"
#define KBBT "\"$sys/6HoA7R27Nv/humiture/thing/property/post\"\,"//可变报头
#define YXZH "\"{\\\"id\\\":\\\"123\\\"\\\,\\\"params\\\":{\\\"CurrentTemperature\\\":{\\\"value\\\":%d}\\\,\\\"CurrentHumidity\\\":{\\\"value\\\":%d}}}\",0,0\r\n"
//订阅主题
#define sub_Command "AT+MQTTSUB=0,"
#define subtopic "\"$sys/6HoA7R27Nv/humiture/thing/property/post/reply\",0\r\n"//有恢复消息的topic
uint8_t ESPSend_DHT(uint32_t CurrentTemperature,uint32_t CurrentHumidity)
{
char buff[200]=publish_Command;
// char Send_Buff[200]={0};//最终发送数据的Buff
strcat(buff,KBBT);
strcat(buff,YXZH);
sprintf(buff,buff,CurrentTemperature,CurrentHumidity);//格式化数据,最终存放到Send_Buff
USART2_SendString(buff);
delay_ms(1000);
printf("%s",buff);
if(Check_Receive_OK()==0)//发布消息失败
{
printf("温湿度数据上传失败\r\n");
return 0;
}
printf("温湿度上传成功\r\n");
return 1;
}
注意反斜杠YXZH的反斜杠有三个
在这个字符串中:
\"
表示字符串中的一个双引号。\\
表示字符串中的一个反斜杠。
因为他要发送的是一个字符串,而字符串中\"代表双引号但是其中的反斜杠也要体现出来,让平台识别所以在YXZH的宏定义中有3个返斜杠