本科毕业论文---基于无线传感器网络的家居环境检测与控制系统设计论文 联系客服

发布时间 : 星期二 文章本科毕业论文---基于无线传感器网络的家居环境检测与控制系统设计论文更新完毕开始阅读25465f6d5e0e7cd184254b35eefdc8d376ee1480

桂林理工大学本科毕业设计·论文 3.1.2 继电器电路

图3-5 继电器电路图

由于其他传感器电路都是模块化,从最小系统引出相应的引脚接收信号即可。附录原理图后有。

3.2 协调器

由于协调器只是接收终端发过来的数据没有其他的要求,因此,可以在终端的基础上减调所以传感器即可得到,P0_2和P0_3是 USART异步串口通信的引脚,再加一根接地线即可。三根线就可以和PL2303等所有串口芯片设备连接,非常方便。

3.3 本章小结

以上是搭建硬件电路,为以后的协议栈和应用系统程序做基础,把所有终端监测节点做好,并把各类传感器焊上,把协调器搭建好,收集所有终端监测节点发送过来的数据然后发给上位机并转接上位机发下来的指令给个节点控制命令。

14

桂林理工大学本科毕业设计·论文 4 系统软件设计 本章主要有三个内容是软件设计,一个是协调器程序设计,再一个是终端监测节点数据采集程序设计,最后一个是C#设计的上位机程序。本设计是用CC2530芯片的最小系统,现在很多都是用IAR Embedded Workbench for 8051这个开发软件来编程,它的编程语言是C语言。IAR开发环境界面如下

图4-1 IAR开发界面图

4.1 协调器的程序编程

由于协调负责接收其他终端监测节点的数据,发送指令转发上位机的程序等功能,但是本论文主要那它来接收转发数据命令,因而主要有两个主要大程序。由于Zigbee组网都是在协议栈上开发的,把它的网络定义为协调器。协议栈就是一个系统,它本身在自己一直运行,而我们开发主要是在应用层方面,它怎样工作于我们不太大关系,因此我主要在接收上位机指令和接收到数据处理这两个方面着手。

由于上位机和协调器是通过串口通信的,在协议栈内设置好波特率等相关后即可使用,我们自己做一个回调函数,其函数如下:

15

桂林理工大学本科毕业设计·论文 //从串口0读取2个字符,放进uartbuf static void rxCB(uint8 port,uint8 event) {

uint8 uartbuf[2];

HalUARTRead(0,uartbuf,2);

AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc, GENERICAPP_CLUSTERID, 2, uartbuf,

&GenericApp_TransID,

AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ); }

如果收到上位机发送下来的指令,它直接发送给相应的终端监测控制节点,它广播发送给所以的节点。各个节点根据所接受的和自己协议相同时就做出相应的动作。例如发送Aa,它广播给所以的终端监测控制节点,A节点接受后判断和直接的一样,那么继电器就做出动作。

协调器接收数据函数如下:

static void GenericApp _MessageMSGCB ( afIncomingMSGPacket_t *pkt ) {

byte data[7],i;//接受数据格式是 A 11 11 1 1 A是A节点。两位温湿度 气体 人体 switch ( pkt->clusterId ) {

case GENERICAPP_CLUSTERID://接受指令 for(i=0;i<7;i++)

{ data[i]=pkt->cmd.Data[i];}

HalUARTWrite(0, data, 7); //向串口输出接收到的温度字符 HalUARTWrite(0, \ break; } }

如果有事件发生,并且是接受事件,先把数据存起来在Data数组里,然后发送给上位机处理。接收格式在函数注释地方有。 系统流程图如下:

16

桂林理工大学本科毕业设计·论文

开始 硬件网络 否初始化完成 是 发送指令给节点 接受传感信息 否各个环境监测控制节点 是 将信息发送 给PC上位机

图 4-2 系统流程图

4.2 终端监测控制节点

它主要负责采集温湿度、人体、烟雾气体传感器数据,然后发送单播发送给协调器,还有就是接收协调器发过来的指令,控制继电器。其发送函数如下 static void GenericApp_SendTheMessage( void ) {

byte temp[6], i,strTemp[7];

DHT11(); //获取温湿度 //将温湿度的转换成字符串,供LCD显示 temp[0] = wendu_shi+0x30; temp[1] = wendu_ge+0x30; temp[2] = shidu_shi+0x30;

17