1、第3章 NB-IoT无线通信技术开发3.6 NB-IoT火灾监控系统开发与实现EducationSolutions目录ContentsInternet+NB-IoT数据接收与反馈机制NB-IoT数据接收与发送接口NB-IoT安防应用协议设计22:13/3开发场景:城市火灾监控系统为了能够及时发现火灾并控制火情为消防员救火争取时间,在各个建筑种安装智能火灾警报系统就变的非常重要,当建筑发生火灾,系统将火灾信息发送至消防部门,消防部门即可派出消防车将火灾的发生消灭在萌芽状态以保障声明财产安全。消防灭火如下图所示:22:13/4任务目标智慧城市系统中降低城市火灾发生概率及时处置火灾隐患是保证城市消防
2、安全的重要环节,本节以火灾警报系统为例学习在应用接口下的报警节点的程序开发,学习并掌握控制节点的操作逻辑和应用接口的使用。22:13/5安防类程序逻辑分析远程信息预警可以归纳为四种逻辑事件,逻辑事件归纳如下:节点安全信息定时获取并上报。当节点监测到危险信息时系统能迅速上报危险信息。当危险信息解除时系统能够恢复正常。当监测到查询信息时节点能够响应指令并反馈安全信息。22:13/6安防类程序逻辑分析安防类程序流程:22:13/7安防类程序逻辑分析安防类协议设计:1)每条数据以“”作为起始字符;2)“”内参数多个条目以“,”分隔;3)数据上行格式参考:value=12,status=14)数据下行查
3、询命令参考:value=?,status=?,程序返回:value=12,status=1协议类型协议格式方向说明发送协议fireStatus=X节点到远程设备X表示安全状态查询协议fireStatus=?远程设备到节点查询节点安全状态22:13/8安防类程序接口分析数据警报程序流程22:13/9安防类程序接口分析传感器应用接口函数:函数名称函数说明sensorInit()硬件设备初始化sensoUpdate()上传传感器实时数据和报警状态sensorCheck()实时监测传感器报警状态,并实时预警上报ZXBeeUserProcess()解析接收到的下行控制命令PROCESS_THREAD(s
4、ensor,ev,data)传感器进程22:13/10安防类程序接口分析无线数据包收发函数函数名称函数说明ZXBeeInfSend()节点发送无线数据包给汇集节点ZXBeeInfRecv()处理节点收到无线数据包无线数据包解析函数函数名称函数说明ZXBeeBegin()增加ZXBee通信协议的帧头“”ZXBeeEnd()增加ZXBee通信协议的帧尾“”并返回封包后的数据包指针ZXBeeAdd()ZXBee通信协议的数据包中添加数据ZXBeeDecodePackage()对接收到的无线数据包进行解包22:13/11安防类程序接口分析火灾监控系统设计22:13/12项目实践硬件功能设计从上图中可以
5、得知,火焰传感器为外接传感器,传感器信息的读取是通过GPIO实现的,火焰传感器原理图如下:22:13/13项目实践通信协议设计 协议类型协议格式方向说明发送协议 fireStatus=X节点到远程设备X表示安全状态查询协议 fireStatus=?远程设备到节点查询节点安全状态22:13/14 PROCESS_THREAD(sensor,ev,data)函数项目实践PROCESS_THREAD(sensor,ev,data)static struct etimer et_update;static struct etimer et_check;PROCESS_BEGIN();ZXBeeInfI
6、nit();sensorInit();etimer_set(&et_update,CLOCK_SECOND*20);etimer_set(&et_check,CLOCK_SECOND/10);/100 hzwhile(1)PROCESS_WAIT_EVENT_UNTIL(ev=PROCESS_EVENT_TIMER);if(etimer_expired(&et_check)sensorCheck();etimer_set(&et_check,CLOCK_SECOND/10);if(etimer_expired(&et_update)sensorUpdate();etimer_set(&et_u
7、pdate,CLOCK_SECOND*20);PROCESS_END();22:13/15传感器监测报警代码项目实践void sensorCheck(void)static char lastfireStatus=0;static uint32_t ct0=0;char pData16;char*p=pData;/更新火灾报警状态updateFire();ZXBeeBegin();if(lastfireStatus!=fireStatus|(ct0!=0&clock_time()(ct0+3000)sprintf(p,%u,fireStatus);ZXBeeAdd(fireStatus,p);
8、ct0=clock_time();if(fireStatus=0)ct0=0;lastfireStatus=fireStatus;p=ZXBeeEnd();if(p!=NULL)int len=strlen(p);ZXBeeInfSend(p,len);22:13/16传感器驱动函数函数名称函数说明flame_init(void)火焰传感器初始化char get_flame_status(void)获取火焰传感器状态22:13/17项目实践实验中传感器主动上报数据的时间间隔为20ms,通过ZCloudWebTools工具的实时数据查看发送振动预警的值。地址中输入NB节点地址:NB:863703036243488,数据输入:fireStatus=?,可以实时查询状态。22:13/18项目思考NB-IOT的危险报警场景有哪些?NB-IOT危险报警为何要定义数据协议?NB-IOT的危险报警使用了哪个接口函数?