基于ZigBee的环境监测系统
CC2530 实现环境监测系统
建立在前两讲的基础上,这次直接分享一个基于ZStack进行开发程序的demo
适用于学习ZigBee入门的同学,可在该程序的基础上进行不断拓展。开发后续功能
注:代码放在资源(ZigBee学习入门demo 基于ZStack协议栈开发实现),可自行前去下载
1.系统组成
CC2530 X2
DHT11
MQ2
OLED
2.系统功能
一、终端节点获取温湿度及烟雾浓度信息并在OLED上显示,OLED 通过按键切换显示页面
二、协调器接收数据并串口打印数据到上位机
3.系统网络拓扑
系统由一个协调器节点及一个终端节点组成,采用支持ZigBee协议的CC2530开发板,搭建星形网络拓扑结构,并通过Z-Stack协议栈对网络中节点进行开发控制。终端节点负责采集数据信息、定时触发发送任务事件程序通过ZigBee网络将节点数据发送至协调器,并将数据显示在OLED显示屏上。协调器节点作为系统核心控制器,在通电后立即创建无线网络,当节点加入网络后该设备可以将网络中的数据信息进行收集并汇总处理,随后将系统数据通过串口数据线上传至 PC上位机端。
4.系统终端程序设计
功能原理: 终端基于Z-Stack协议栈开发,上电后先对自身硬件模块、底层及系统相关资源进行初始化。初始化工作完成后,终端节点会主动搜索扫描指定信道,查找协调器创建的网络并向它发送入网请求数据包尝试加入网络,协调器节点会检测信息匹配后允许终端感知节点加入网络。当终端加入网络后,会被分配16位的网络短地址,然后便可用该短地址与协调器节点实现数据通信。当有数据需要发送时,终端将会启动软件系统,将所获取的数据打包发送至协调器节点。
传感器及控制设备,均基于应用层进行程序设计。OSAL不断轮询events & SYS_EVENT_MSG系统任务事件触发设备网络节点判断(SampleApp_NwkState == DEV_END_DEVICE),当确认设备节点角色为终端时,传感器的驱动初始化便在此环境下进行设置。
终端需开发数据汇总发送程序。终端OSAL操作系统轮询不断触发events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT任务事件,进而进入消息发送函数SampleApp_Send_P2P_Message(),在该函数中实现信息整合及发送功能。信息整合:通过设置定长的字符数组,将温度、湿度、烟雾浓度不同的数据值统一打包成字符串一起传递至信息发送程序。信息发送程序需配置点对点单播模式,指定接收节点的16位网络短地址0XFFFF,规范发送的字符串长度,并设置对应的端口号、簇号,以便协调器节点接收存储。
终端部分程序:
void SampleApp_Send_P2P_Message( void )
{
#ifdef D1
unsigned char temp[3], humidity[3], GasData[4];
char strTemp[20];
uint16 nGasData=0;
nGasData = ReadGasData();//获取气体浓度
DHT11(); //获取温湿度
//将温湿度的转换成字符串,供OLED显示
temp[0] = wendu_shi+0x30;
temp[1] = wendu_ge+0x30;
temp[2] = '\0';
humidity[0