博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机智云之消息处理的源码分析
阅读量:6905 次
发布时间:2019-06-27

本文共 2338 字,大约阅读时间需要 7 分钟。

hot3.png

在我们通过编辑工具打开了我们的工程以后,我们需要来看看这些底层代码都做了什么样的操作,直接上源码

...while(1)	{		MessageHandle();//今天主要分析这个MessageHandle的操作		KEY_Handle();				IR_Handle();		DHT11_Read_Data(&Device_ReadStruct.Temperature, &Device_ReadStruct.Humidity);		ReportDevStatusHandle();	}...

我们打开MessageHandle的函数定义,代码如下:

void MessageHandle(void){	Pro_HeadPartTypeDef   Recv_HeadPart;//定义接收到的心跳包的通讯格式	memset(&Recv_HeadPart, 0, sizeof(Recv_HeadPart));//设置接收到的心态包内容	memset(&UART_HandleStruct.Message_Buf, 0, sizeof(16));//设置Message内容	if(UART_HandleStruct.Package_Flag)//假如完整的接收到一个包	{				UART_HandleStruct.Message_Len = UART_HandleStruct.UART_Cmd_len + 4;				memcpy(&UART_HandleStruct.Message_Buf, UART_HandleStruct.UART_Buf, UART_HandleStruct.Message_Len );							memcpy(&Recv_HeadPart, UART_HandleStruct.Message_Buf, sizeof(Recv_HeadPart));		memset(&UART_HandleStruct.UART_Buf, 0, sizeof(UART_HandleStruct.Message_Buf));				UART_HandleStruct.Package_Flag = 0;		UART_HandleStruct.UART_Count = 0;		//进行数据包校验		if(CheckSum(UART_HandleStruct.Message_Buf, UART_HandleStruct.Message_Len) != UART_HandleStruct.Message_Buf[UART_HandleStruct.Message_Len - 1]) 		{			Pro_W2D_ErrorCmdHandle();//假如出错,就跳转至处理错误的函数			return ;				}		switch (Recv_HeadPart.Cmd)//假如正确的接收到了包数据以后,根据命令的类型去完成不同的操作		{			case Pro_W2D_GetDeviceInfo_Cmd://获取设备信息命令				Pro_W2D_GetMcuInfo();				break;			case Pro_W2D_P0_Cmd://P0操作命令				Pro_W2D_P0CmdHandle();		 				break;			case Pro_W2D_Heartbeat_Cmd://心跳包命令										Pro_W2D_CommonCmdHandle();				printf("Pro_W2D_Heartbeat ...\r\n");					break;									case Pro_W2D_ReportWifiStatus_Cmd://报告WIFI状态命令				Pro_D2W_ReportDevStatusHandle();				break;			case Pro_W2D_ErrorPackage_Cmd://包信息错误				Pro_W2D_ErrorCmdHandle();				break;						default:				break;		}		}		}

以上的这个函数主要做了一下的事情:

1、接收到某个包信息,不管这个包信息是来自哪里,只要能够被机智云接收到,并且符合机智云的通讯格式就能够被它就收到。当机智云接收到这个包信息以后,就要开始拆包分析对应的数据。

2、从完整的包中拆解除对应的命令,其中命令包括上述的几种类型。

3、根据对应的是命令,完成对应的操作信息。

经过这样三个步骤以后,我们就完成了对包信息的分析处理,这样就为我们通过机器想云平台通讯提供了基础。

通过上面的分析 我们能够了解到,机器与云平台交换的时候,首先是通过我们的WIFI模块来通过数据包的形式去链接网络平台,当我们接收到了来自网络的相关数据包以后,我们的机器在进行对应的包信息拆解分析,最后,我们将对应的控制指令分解出来,通过串口的形式去操作我们本地的硬件设备,如此一来,我们就完成控制命令的交换,实现了遥控的功能。

总结一下:

如何来实现设备远程遥控控制:

1、有统一的通讯格式,来搭载着不同设备之间交互的数据

2、在统一的通讯数据格式的基础上,进行包分析,分解出对应的控制指令。

3、本地设备来通过串口将对应的数据操作命令传达到下位机中,然后执行对应的数据操作操作指令。

通过以上的数据信息,我们就能够在一个云平台的位置进行管理各个地方设备的分布式管理了。同时这样,我们的逼格也就上升到了相当高的一个BIG了。

转载于:https://my.oschina.net/u/257950/blog/407175

你可能感兴趣的文章
五、箭头函数
查看>>
Struts2动态结果(${})and全局结果(global-results)
查看>>
java.util 类 TreeSet<E>
查看>>
程序员的思维修炼6——主动学习
查看>>
Mac 终端使用 - 加密 1. MD5 2.Base64
查看>>
【热门技术】解决Win7 下面很多软件安装不兼容的问题
查看>>
【Android】选项卡使用
查看>>
C#基础解析之Ⅰ【前言】
查看>>
CoordinatorLayout滑动抖动问题
查看>>
算法模板——线性欧拉函数
查看>>
价值观
查看>>
Mock.js——数据模板定义
查看>>
vue单页面应用在iOS版微信下自定义分享的问题
查看>>
【BZOJ】1455 罗马游戏
查看>>
python 的urlparse学习
查看>>
vmtouch命令 -
查看>>
spring boot 实际应用(一) 内置tomcat 实现JMX配置
查看>>
MacOS X APK 最新版本 反编译
查看>>
SharePOint 2010 Mysettings 不能编辑用户信息
查看>>
Spring Boot打包部署和环境配置
查看>>