1、第4章 LTE无线通信技术开发4.4 LTE路网气象监测系统开发与实现EducationSolutions目录ContentsInternet+LTE数据发送机制LTE数据发送接口LTE协议设计21:14/3开发场景:路网气象监测系统设计为了方便路网气象信息的获取,需要在相关偏远路段添加气象监测传感器,而通常气象环境的变化都伴随着大气压力的剧烈变化,因此对偏远路段的气压监测可以有效预知恶劣天气的发生,并适时向过往车辆发布气象信息和为相关路段的维护提供参考。路网气象监测如下图所示21:14/4任务目标智慧交通中节点的道路环境信息采集与数据定时上报是指挥交通物联网中的重要环节,本节以路网气象监测系
2、统设计为例学习在应用接口下的传感器数据开发,学习并掌握数据上报逻辑和应用接口的使用。21:14/5采集类程序逻辑分析数据采集的可以归纳为四种逻辑事件,逻辑事件归纳如下:定时查询当前传感器数值。根据软件设计逻辑来决定传感器数值是否上报。根据软件设计逻辑来控制传感器上报时间间隔。能够接收到远程的查询指令反馈最新的传感器数值21:14/6采集类程序逻辑分析l 数据采集程序流程21:14/7采集类程序逻辑分析l 采集类协议设计1)每条数据以“”作为起始字符;2)“”内参数多个条目以“,”分隔;3)数据上行格式参考:value=12,status=14)数据下行查询命令参考:value=?,status
3、=?,程序返回:value=12,status=1协议类型协议格式方向说明发送协议 airPressure=X节点到远程设备X表示为大气压力查询协议 airPressure=?远程设备到节点查询节点大气压力21:14/8采集类程序接口分析传感器应用接口21:14/9采集类程序接口分析智传感器应用接口函数:函数名称函数说明sensorInit()硬件设备初始化sensoUpdate()上传传感器实时数据ZXBeeUserProcess()解析接收到的下行控制命令PROCESS_THREAD(sensor,ev,data)传感器采集进程21:14/10采集类程序接口分析无线数据包收发函数:无线数据
4、包解析函数:函数名称函数说明ZXBeeInfSend()节点发送无线数据包给汇集节点ZXBeeInfRecv()处理节点收到无线数据包函数名称函数说明ZXBeeBegin()增加ZXBee通信协议的帧头“”ZXBeeEnd()增加ZXBee通信协议的帧尾“”,并返回封包后的数据包指针ZXBeeAdd()ZXBee通信协议的数据包中添加数据ZXBeeDecodePackage()对接收到的无线数据包进行解包21:14/11采集类应用接口分析气象监测系统架构图如下所示:21:14/12项目实践硬件中使用了气压传感器作为气压信息的来源,通过气压传感器定时获取空气指令信息并上报,以此完成数据发送。外接
5、传感器使用的是FBM320,通过IIC总线与STM32F103芯片进行通信 硬件功能设计21:14/13项目实践协议类型协议格式方向说明发送协议airPressure=X节点到远程设备X表示为大气压力查询协议airPressure=?远程设备到节点查询节点大气压力采集类传感器节点LTEAirPressure工程实现了大气压力采集系统,该程序实现了以下功能:1)节点入网后,每隔20s上行上传一次大气压力传感器数值。2)应用层可以下行发送查询命令读取最新的大气压力传感器数值。LTEAirPressure工程采用类josn格式的通信协议(参数=值,参数=值,),具体如下:21:14/14项目实践启动
6、sensor进程(sensor.c-PROCESS_THREAD(sensor,ev,data)函数)PROCESS_THREAD(sensor,ev,data)static struct etimer et_update;/static struct etimer et_check;PROCESS_BEGIN();ZXBeeInfInit();sensorInit();etimer_set(&et_update,CLOCK_SECOND*20);while(1)PROCESS_WAIT_EVENT_UNTIL(ev=PROCESS_EVENT_TIMER);if(etimer_expired
7、(&et_update)sensorUpdate();etimer_set(&et_update,CLOCK_SECOND*20);PROCESS_END();21:14/15项目实践void sensorUpdate(void)char pData16;char*p=pData;/大气压力采集updateAirPressure();ZXBeeBegin();/智云数据帧格式包头/上报大气压力值sprintf(p,%.1f,airPressure);ZXBeeAdd(airPressure,p);p=ZXBeeEnd();/智云数据帧格式包尾if(p!=NULL)ZXBeeInfSend(p,
8、strlen(p);/将需要上传的数据发送到智云平台sensorUpdate(),该函数调用updateAirPressure()函数更新空气质量数据,并通过ZXBeeBegin()、ZXBeeAdd(char*tag,char*val)、ZXBeeEnd(void)函数实现对数据的封包,最后调用zxbee-inf.c-ZXBeeInfSend(char*p,int len)函数将数据包发送给应用21:14/16项目实践void ZXBeeInfRecv(char*buf,int len)char*p;leds_on(1);clock_delay_ms(50);p=ZXBeeDecodePac
9、kage(buf,len);if(p!=NULL)ZXBeeInfSend(p,strlen(p);leds_off(1);调用zxbee-inf.c-ZXBeeInfRecv()函数对无线数据的解包,并将解包后返回的应答数据包发送给应用层。21:14/17无线节点接收数据处理函数ZXBeeUserProcess()相关代码段如下项目实践int ZXBeeUserProcess(char*ptag,char*pval)int ret=0;char pData16;char*p=pData;/控制命令解析if(0=strcmp(airPressure,ptag)/查询执行器命令编码if(0=st
10、rcmp(?,pval)updateAirPressure();ret=sprintf(p,%.1f,airPressure);ZXBeeAdd(airPressure,p);return ret;21:14/18传感器驱动函数函数名称函数说明fbm320_init()大气压力传感器初始化fbm320_data_get()获取空气质量传感器MP-503实时气体浓度数据fbm320_read_id()FBM320_ID读取Coefficient()大气压力系数换算Calculate()大气压力换算fbm320_read_reg()读取传感器寄存器数据fbm320_write_reg()写入传感器寄存器数据fbm320_read_data()读取传感器数据21:14/19项目实践实验中传感器主动上报数据的时间间隔为20s,ZCloudWebTools工具的实时数据查看发送的空气质量值。21:14/20项目实践地址中输入LTE节点地址:LTE:868323027919627,数据输入:airPressure=?,可以实时查询大气压力数据。21:14/21项目思考LTE的数据上报场景有哪些?LTE数据发送为何要定义数据协议?LTE的数据发送使用了哪个接口函数?