STM32串口数据接收及处理(ESP8266连接阿里云)

本文介绍了如何通过阿里云物联网平台实现设备的下行数据接收与处理,包括MQTT通信、下行数据判断、JSON数据解析,并利用微信小程序进行远程控制,同时强调了数据安全的重要性。
摘要由CSDN通过智能技术生成

当我们成功连接阿里云物联网平台并实现数据上行,就可以开始接收和处理阿里云物联网平台下行的数据了。

        通过阿里云物联网平台的云产品流转,也可以在阿里云物联网平台接收来自微信小程序中的指令或参数,然后将其传输给STM32进行相应的控制操作。这样,就能够实现远程控制和管理硬件设备,使其按照预定的指令运行。

阿里云下行数据处理

  1.下行数据判断

在接收到数据时首先我们要判断是否是下行数据(下行数据的头为'MQTTSUBRECV:'详见ESP8266连接阿里云(AT指令版)

unsigned char *ESP8266_GetMQT(unsigned short timeOut)
{
	char *ptrMQT = NULL;
	
	do
	{
		if(ESP8266_WaitRecive() == REV_OK)								//如果接收完成
		{
			ptrMQT = strstr((char *)esp8266_buf, "MQTTSUBRECV");				//搜索“MQT”头
			if(ptrMQT == NULL)											//如果没找到,可能是MQT头的延迟,还是需要等待一会,但不会超过设定的时间
			{
			//	UsartPrintf(USART_DEBUG, "\"MQT\" not found\r\n");
			}
			else
			{
				ptrMQT = strchr(ptrMQT, ':');							//找到':'
				if(ptrMQT != NULL)
				{
					ptrMQT++;
					return (unsigned char *)(ptrMQT);
				}
				else
					return NULL;
				
				return (unsigned char *)(ptrMQT);
			}
		}
		
		delay_ms(5);
		timeOut--;	
	} while(timeOut >0);
	
	return NULL;														//超时还未找到,返回空指针

}

  2.下行数据接收

判断为下行数据之后对下行数据进行接收和处理(此处同样可以根据下行数据判断处返回的'ptrMQT指针'进行处理从而得到发送来的JSON数据)

//==========================================================
//	函数名称:	ESP8266_ReceiveData
//
//	函数功能:	接收数据
//
//	入口参数:	无
//
//	返回参数:	无
//
//	说明:		
//==========================================================
void ESP8266_ReceiveData(void)
{
	unsigned char timeOut = 200;
	
	unsigned int   msg_len=0;
	unsigned char  msg_body[256] = {0};
	 
//	UsartPrintf(USART_DEBUG,(char *)esp8266_buf);
	
	sscanf((const char *)esp8266_buf,"+MQTTSUBRECV:0,\""SUB_TOPIC"\",%d,%s",&msg_len,msg_body);
	
	UsartPrintf(USART_DEBUG,"len:%d,msg:%s\r\n",msg_len,msg_body);

	Json_Analysis(msg_body);
	
}

  3.下行数据解析

对下行数据进行JSON解析(此处需引入CJOSN文件从而对发送来的数据进行判断和处理)

//==========================================================
//	函数名称:	Json_Analysis
//
//	函数功能:	JSON数据解析
//
//	入口参数:	无
//
//	返回参数:	无
//
//	说明:		
//==========================================================
void Json_Analysis(unsigned char *json_data)
{
	
	cJSON *json, *JSON_Value;
	
	cJSON* root = cJSON_Parse((const char*)json_data);
	
	if(root == NULL)
	{
		UsartPrintf(USART_DEBUG,"cJSON_Error!");
	}
	else
	{
		cJSON* items = cJSON_GetObjectItem(root,"items");
		
		//补光逻辑判断

		cJSON* lighting = cJSON_GetObjectItem(items,"lighting");
		
		if(!lighting)
		{
			//UsartPrintf(USART_DEBUG,"No,Lighting!");
		}
		else
		{
			JSON_Value = cJSON_GetObjectItem(lighting,"value");
			
			if(JSON_Value ->valueint)
			{
				LIGHT_O();
			}
			else
			{
				LIGHT_C();
			}
		}	
	}
	
	cJSON_Delete(root);
}

基于上述基础,就可以通过微信小程序与阿里云进行通讯,实现对单片机的控制。通常情况下,可以在微信小程序中编写前端界面和逻辑,通过微信小程序提供的接口与阿里云进行数据交互,然后由阿里云将指令传输到单片机上,实现对单片机的控制。这样的架构可以实现远程控制单片机的功能,方便用户在任何地方通过微信小程序来操控设备。需要注意的是,在实现过程中要保证通讯安全性,确保数据的可靠传输和操作的准确性。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值