这篇文章介绍单片机与云平台的通讯协议,了解硬件和云平台的通信格数据式,以及在此协议基础上如何自定义自己的通信协议!
通信协议主要是为了解决设计的标准化问题,通信的各方都按照标准化的协议进行通信发送数据,彼此才能正确接收和理解数据。简单来说一个人说四川方言,一个人说德语,这两人是聊不到一块去的。
通信协议下载链接: https://pan.baidu.com/s/1oAhtvED1rEW9tT5OUNpLLA 提取码: trf2
协议的数据包结构和定义如下:
1、数据说明
1.1、数据类型
协议中传输的数据数据类型如上图
1.2、传输规则
协议采用大端模式传输字和双字
2、数据包结构和定义
完整的数据包包含了七部分,起始符、命令单元、唯一设备号、数据单元加密方式、数据单元长度、数据单元、校验码
数据包结构和定义
3、命令单元
3.1、命令标识
命令标识采用两个字节表示,是发起方的唯一标识,告诉对方这条数据具体是用来干啥的,本系统目前只使用到了实时信息上报和控制命令
命令标识定义
3.1、应答表示
当命令的被动接收方应答标志不是OXFE时,此包表示为应答包。当服务端发送应答时,应变更应答标志,保留报文时间删除其余报文内容并重新计算校验位。
4、时间定义
5、数据单元格式和定义
数据单元由数据采集时间、信息类型标识、信息体构成。其中时间的格式见上面的“4、时间定义”
5.1、信息类型标识定义
这里定义一些信息类型标识,比如0x03是基础控制,单片机收到0x03就知道上位机下发的是控制指令,然后再解析控制的灯、蜂鸣器数据,数据从信息体定义查看。如果你需要自定义,0x80以前的命令都是系统自用,你可以从0x80开始自己定义属于你的命令!
5.2、信息体定义
从这儿能看到信息类型标识0x03,对应的信息体有灯和蜂鸣器两个字节。单片机收到0x03的信息后,肯定有两个字节的控制内容,比如解析灯这个字节是0x02那么就对应的开启灯,对应的解析这两个字节的数据做对应的控制即可;如果发现某个字节是0x00,那么就不做任何操作;
6、校验码
命令的倒数第一位是校验码,采用BCC异或校验法;从命令单元的第一个字节开始,一直到校验码前一字节为止;我在网上找到一个网站很好用,可以验证BCC加密:http://www.ip33.com/bcc.html
js:
function checkCBC(recv){
var bcc=0x00;
for(i=0;i<recv.length-1;i++)
{
bcc^=recv[i];
};
return bcc;
}
c语言:
unsigned char CheckBCC(unsigned char len, unsigned char *recv){
unsigned char bcc = 0x00;
unsigned char i=0;
for(i=0;i<len-1;i++)
{
bcc^=recv[i];
};
return bcc;
}
7、通信示例
建议在做硬件开发时,先用一些PC软件模拟硬件和云平台通信,如果这些软件模拟的数据能正常和云平台通信,那么单片机也采用这种数据格式,很快就调试通;
欢迎各位老板转发和点在看!
本文参考 GB∕T 32960.3-2016 电动汽车远程服务与管理系统技术规范 第3部分:通信协议及数据格式