关于Stm32上传数据到腾讯云及接收和数据处理的一些问题

订阅与发布

订阅

如果我们想要接受从腾讯云下发的数据,我们首先得先订阅它的主题。
在这里插入图片描述
将红色方框内的长串字符复制粘贴到下图红框处,并将${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 
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值