1、第2章 LoRa无线通信技术开发2.5 LoRa畜牧排风系统开发与实现EducationSolutions目录ContentsInternet+项目场景控制程序逻辑分析控制类程序接口分析项目实践(数据控制程序)22:12/3项目场景在智慧畜牧系统中首要的目的就是能够降低养殖户的生产成本,其次就是能够为养殖的牲畜提供一个良好的生长环境。在室内养殖场的生长环境中,除了保证牲畜的所处环境干净干燥外,同时还需要保证空气清新。保证空气清醒的主要方法是及时清理牲畜的排泄物和让室内的空气流通。然而养殖场内处理牲畜的排泄物和草料渣都需要工人来完成,通风换气部分可以又系统完成。因此在智慧畜牧系统中添加智能排风扇
2、系统可以实现室内牧场的智能换气和流通空气。屋顶通风风扇如下图所示。22:12/4任务目标智慧畜牧系统中对环境调节设备节点的控制是维持室内空气质量正常的重要环节,本节以智能排风扇系统为例学习在应用接口下的控制节点的程序开发,学习并掌握控制节点的操作逻辑和应用接口的使用。22:12/5数据控制逻辑分析数据控制的可以归纳为三种逻辑事件,逻辑事件归纳如下:远程设备对节点发送控制指令,节点实时响应并执行操作。远程节点发送查询指令后,节点实时响应并反馈设备状态。控制节点设备工作状态的实时上报。22:12/6数据控制逻辑分析远程控制程序流程:22:12/7数据控制协议分析1)每条数据以“”作为起始字符;2)
3、“”内参数多个条目以“,”分隔;3)数据上行格式参考:value=12,status=14)数据下行查询命令参考:value=?,status=?,程序返回:value=12,status=1此处以LoRa畜牧排风系统为例定义协议内容。约定协议如下:协议类型协议格式方向协议说明控制指令cmd=X远程设备到节点X表示控制内容反馈指令 fanStatus=X节点到远程设备X表示设备状态查询指令 fanStatus=?远程设备到节点设备状态查询混合指令cmd=X,fanStatus=?远程设备到节点执行控制后查询状态22:12/8控制类程序接口分析智云传感器应用接口函数:函数名称函数说明sensor
4、Init()硬件设备初始化sensoUpdate()上传传感器实时数据sensorControl()风扇传感器控制ZXBeeUserProcess()解析接收到的下行控制命令PROCESS_THREAD(sensor,ev,data)传感器采集进程22:12/9控制类程序接口分析远程传感器控制系统程序逻辑流程设计如下:22:13/10控制类应用接口分析无线数据包收发函数:无线数据包解析函数:函数名称函数说明ZXBeeInfSend()节点发送无线数据包给汇集节点ZXBeeInfRecv()处理节点收到无线数据包函数名称函数说明ZXBeeBegin()增加ZXBee通信协议的帧头“”ZXBeeE
5、nd()增加ZXBee通信协议的帧尾“”,并返回封包后的数据包指针ZXBeeAdd()ZXBee通信协议的数据包中添加数据ZXBeeDecodePackage()对接收到的无线数据包进行解包22:13/11控制类应用接口分析畜牧排风系统设计如下所示:22:13/12项目实践排风扇系统硬件框图设计如下,STM32F103通过I/O口输出低电平驱动风扇传感器。22:13/13项目实践风扇传感器节点LoRaFan工程实现了畜牧风扇控制系统,该程序实现了以下功能:1)节点入网后,每隔20s上行上传一次风扇传感器风扇状态数值。2)应用层可以下行发送查询命令读取当前的风扇传感器风扇状态数值。3)应用层可以
6、下行发送控制命令控制风扇传感器转动。LoRaFan工程采用类josn格式的通信协议(参数=值,参数=值,),具体如下:数据方向协议格式说明上行(节点往应用发送数据)fanStatus=XX为1表示风扇打开状态,X为0表示风扇关闭状态下行(应用往节点发送指令)fanStatus=?查询当前风扇状态,返回:fanStatus=X,X为1表示风扇打开状态,X为0表示风扇关闭状态下行(应用往节点发送指令)cmd=X风扇控制指令,X为1表示打开风扇,X为0表示关闭风扇22:13/14项目实践l 传感器初始化风扇传感器初始化代码如下:void sensorInit(void)printf(sensor-s
7、ensorInit():Sensor init!rn);/初始化传感器代码FAN_init();22:13/15项目实践l 传感器主动上报传感器数据void sensorUpdate(void)char pData16;char*p=pData;ZXBeeBegin();sprintf(p,%u,fanStatus);/上报控制编码 ZXBeeAdd(fanStatus,p);p=ZXBeeEnd();/智云数据帧格式包尾if(p!=NULL)ZXBeeInfSend(p,strlen(p);/将需要上传的数据进行打包操作,并发送到LoRa APprintf(sensor-sensorUpda
8、te():fanStatus=%urn,fanStatus);22:13/16项目实践l 无线数据包命令解析int ZXBeeUserProcess(char*ptag,char*pval)int val;int ret=0;char pData16;char*p=pData;printf(sensor-ZXBeeUserProcess():Receive LoRa Data!rn);val=atoi(pval);if(0=strcmp(cmd,ptag)/排风扇的控制命令sensorControl(val);if(0=strcmp(fanStatus,ptag)/查询执行器命令编码if(0=
9、strcmp(?,pval)ret=sprintf(p,%u,fanStatus);ZXBeeAdd(fanStatus,p);return ret;22:13/17项目实践l 风扇传感器控制void sensorControl(uint8_t cmd)/根据cmd参数处理对应的控制程序if(cmd&0 x01)/根据cmd参数处理对应的控制程序FAN_on(0 x01);/开启风扇printf(sensor-sensorControl():FAN ONrn);elseFAN_off(0 x01);/关闭风扇 printf(sensor-sensorControl():FAN OFFrn);f
10、anStatus=cmd;22:13/18项目实践l 传感器驱动函数函数名称函数说明FAN_init()风扇传感器初始化FAN_on()打开风扇FAN_off()关闭风扇22:13/19项目实践根据程序设定,风扇传感器节点每隔20s会上传一次风扇状态到应用层。通过ZCloudTools工具发送风扇状态查询指令(fanStatus=?),程序接收到响应后将会返回当前风扇状态到应用层。通过ZCloudTools工具发送风扇控制指令(打开风扇指令:cmd=1,关闭风扇指令:cmd=0),程序接收到响应后将会控制风扇相应的执行动作。22:13/20项目思考LoRa的远程控制场景有哪些?LoRa的远程控制的要点是什么?LoRa的数据收发使用了哪些接口函数?