关于上传数据到腾讯云的一些问题
订阅与发布
订阅
如果我们想要接受从腾讯云下发的数据,我们首先得先订阅它的主题。
将红色方框内的长串字符复制粘贴到下图红框处,并将${deviceName}改为自己的设备名即可订阅。
发布
发布和订阅的操作差不多,同样将上图红框处的字符串复制到下图的红框处,并将${deviceName}改为自己的设备名即可发布消息。
发布内容格式
对于初次接触此内容而言,可能不知道发布消息的格式是如何的。我的方法是,先从腾讯云下发一次信息,然后将其复制粘贴到发布内容处,并将control,改成report,即可发布消息。
上传成功!!!
Stm32端上传数据代码
想要上传数据,就先要发布主题
esp8266_send_cmd("AT+MQTTSUB=0,\"$thing/up/property/GR4Z6L0LY5/jioadu123\",0","OK",50);//通过串口发送
u8 MQTT_send_Data[10] = {0}; //定义数组
sprintf((char *)MQTT_send_Data,"AT+MQTTPUB=0,\"$thing/up/property/BK35ZCPROE/test2\",\"{\\\"method\\\":\\\"report\\\"\\,\\\"clientToken\\\":\\\"clientToken-a3beb8b5-8cbb-4714-b023-530a5735ecdb\\\"\\,\\\"params\\\":{\\\"Temperature\\\":%d\\,\\\"Humidity\\\":%d}\\}\",0,0",temp,humi);
esp8266_send_cmd(MQTT_send_Data,"OK",100);//通过串口将MQTT_send_Data的内容上传到腾讯云
//sprintf()函数用于将格式化的数据写入字符串。
若需要代码可以在我上一篇文章获取
STM32与ESP01s连接到腾讯云物联网开发平台IOT
Stm32端接受数据及处理
既然有上传数据,那么就肯定有接收数据,想要接收数据,就先要订阅主题
esp8266_send_cmd("AT+MQTTSUB=0,\"$thing/down/property/GR4Z6L0LY5/jioadu123\",0","OK",50);//通过串口发送
接收了之后肯定要进行处理,在里面提取一些关键信息。我们上传和接收的都是JSON格式的数据。要处理JSON数据,我们有几种方法。
/*第一种 这种方法是最笨的一种方法,要一个个的去数我们所需的关键信息的位置,所以不建议大家用*/
char *str_p;
if(USART3_RX_STA&0x8000)
{
// printf("USART3_RX_BUF=%s\r\n",USART3_RX_BUF);
sprintf(a,"%s",USART3_RX_BUF);
printf("a=%s",a);
str_p = strstr((const char*)a,"Switch");
printf("str_p = %s",str_p);
str_p += 8;
printf("str_pX = %s",str_p);
sscanf(str_p,"%d", &Switch);
printf("Switch = %d",Switch);
if(Switch == 0)
{
LED = 1;
// printf("已开灯");
}
if(Switch == 1)
{
LED = 0;
// printf("已关灯");
}
USART3_RX_STA=0;
}
/*这是第二种方法 因为嵌入式这边,特别是在mcu上,很多时候资源紧缺,所以只能上一些优化过的库。所以我们用的json库是jansson*/
//jansson是可以从Keil官网下载引入的
if(USART3_RX_STA&0x8000)
{
sprintf(a,"%s",USART3_RX_BUF);
message = strstr((const char*)a,"{");
printf("message = %s\r\n",message);
json_t* root = json_loads(message, 0, &err);
json_unpack(root, "{s:s,s:s,s:{s:i}}","method", &method, "clientToken",
&clientToken,"params","params","Switch",&Switch);
printf("Switch=%d\r\n",Switch);
USART3_RX_STA=0;
}
第三种则是引入CJSON库了,这个库我不太会使用,所以就不写出来,这个CJSON的缺点就是太大了,当然,如果你的资源不是那么紧缺,也可以使用。
结束
第二种和第三种的方法的库我放在我的云盘中,大家想用可以自行去取,也可以去Keil官网或者Github去下载。
链接:https://pan.baidu.com/s/1xyduvRbDEfp-z9EfBCRakg?pwd=bhir
提取码:bhir