今天是2020年7月7日,天气阴,趁着这段时间,公司的项目比较松懈,于是,自己想法做一个小项目。
第一篇文章,设备端模组透传对接AEP平台测试,https://blog.csdn.net/qq_35547767/article/details/107082563,已经详细介绍了关于怎么使用NB模组,直接使用串口调试助手,发送AT指令,对接AEP平台,达到NB模组上线的目的。
今天第二篇文章,主要介绍使用单片机对接AEP平台的过程,大致原理如下,NB模组和单片机之间,利用单片机的串口,将单片机端需要发送的数据,使用串口发送到NB模组的缓冲区,NB模组再通过NB窄带网络传输到AEP平台。(单片机接收数据则相反)
根据以上的硬件原理图,单片机端需要编写的程序,大概有以下步骤:
①编写单片机端的串口驱动程序,实现单片机与模组之间的数据发送与接收。
②使用单片机的串口发送和串口接收驱动程序,实现向Lireda模组发送AT指令,控制模组的启动以及获取模组的配置信息,最后,使用AT指令发送,需要上传到AEP平台的数据。
③根据AEP平台编码和解码的格式,组包需要发送的数据。
(AEP解码的数据格式,按照以下格式,进行解码)
遵循Object19协议规则:
发送数据内容格式:
帧头: CMDType (1个字节) (命令类型)(业务数据上报、事件上报、无线参数上报,都为0x02类型)
ServiceID (2个字节) (平台分配的服务ID)(根据AEP平台上面的服务列表中的服务,有具体的服务ID)
TaskID:必填字段,2Bytes,由平台分配,用于关联下发指令和回复响应,指令和响应中的TaskID必须一致(主要用于命令下发和响应,上报一般不需要)
帧体: Payload_length:必填字段,2Bytes,Payload的长度 (发送数据内容的实际长度)
Payload:类型为Binary,按照服务定义的属性(或参数)进行编码和解码(数据内容)
最后,根据AEP平台自定义的服务和属性进行组包数据内容,由于AEP平台上面,自带的物模型里面没有我需要的数据组包格式,因此我自定义了服务和属性,如下图:
注意点:
①组包数据时,由于单片机端是采用小端模式存储,低字节在前,因此,发送数据时,需要转换成大端模式,AEP平台端解码时的数据格式,是按照大端模式进行的。
②组包数据里面,包含变长字符串的数据类型是,需要在变长字符串前面,添加2个字节,表示实际变长字符串的长度,实际字符串的长度,需要和变长字符串的实际内容长度一致。
以上两点,是我在组包数据时,遇到的两个问题,最终会导致AEP平台解码失败。以下,是我按照自己的组包格式,上传的数据。
最后,AEP平台上面接收的数据如下图: