首先,为什么要将ZigBee的感测内容通过WiFi界面来传输?
第一,ZigBee协议是出了名的节能,睡眠和自唤醒模式省下了不少能耗,这也是IOT协议的发展很注重的一点。
第二,WiFi组网复杂,ZigBee自组网和分配地址有较大可容性。
第三,web端的显示控制,解决了跨平台的问题,不必为ZigBee的协调器组建类如树莓派或者其他多余的控制终端,节省成本。因此可以低成本分别组建分离控制网络和感测网络,减少代码bug,易于管理和维护。
缺点就是协议栈非常复杂,OSAL(Operating System Abstraction Layer 操作系统抽象层),个人认为是ZigBee是IOT通信介面的过渡协议,会有更加低成本和简单的IOT通信协议出现。
直接按上面优点分三部分
1.系统睡眠唤醒--定时器唤醒
2.多终端控制协调器--组播
3.WEB端-Apache+MySQL+PHP
左上角为cc2530的ZigBee主板,左下角是ESP8266-07,来自于实验室,07有个优点就是可以外接天线,扩大感测发送的距离,减少丢包。请自动忽略电源部分,为了图好看点,换了个插线板的电源放了上去,关键是能用!电源部分后面会有太阳能板供电的实现。
成套价格约为60RMB,包含DC电源,可谓“实在便宜”。
CC2530 —→ ESP8266
P0_2,P0_4 —→ TX
P0_5,P0_6 —→ RX
以上是接线的方法,即串口输出,此接法的好处是同时可在ESP上连接串口通信模块,检测ESP接收和发送的数据,以及CC2530发送给ESP的数据。ESP8266可通过“AT+”的指令发送和接收数据,此处我选择使用NodeMCU的界面,Lua语言开发,可简化程式,并减少字符串判断中易出现的串口数据发送错误。
这就是天线的部分,我没有用天线是因为没有大型农场可以测试,但实测距离,在空旷地带,板载超过200米,外接天线可以达到300米左右,可能有其他因素影响信号,有丢包现象。
上面就是ZigBee的网络节点的Zigbee Topologies 拓扑结构,这里协调器就是红点。
1.系统睡眠唤醒--定时器唤醒
ZigBee的特点就是远距离低功耗的无线传输设备,节点的模块可以进入睡眠模式,在需要传输的时候进行唤醒,节省电量。
我这里选择的是PM2,即低频的晶振(32.768K RCOSC/XOSC)工作,数字核心模块关闭,系统可以通过reset或者外部中断或者睡眠计数器移除唤醒。
相关的寄存器PCON, SLEEPCMD, ST0, ST1, ST2
sleepTimer |= ST0 ;
sleepTimer |= (ulong)ST1 << 8 ;
sleepTimer |= (ulong)ST2 << 16;
sleepTimer += ((ulong)sec * (ulong)32768) :
ST2 = (uchar)(sleepTimer >> 16) ;
ST1 = (uchar)(sleepTimer >> 8) ;
ST0 = (uchar) sleepTimer ;
晶体频率太高比较耗电,32.768原来主要是用在时钟上,比较方便产生1秒的时钟。32768=2的15次方,即 (1/32.768kHz)*32768=1s
2.多终控制协调器--组播
以上图来源网络。上图逐一步骤的显示,关键是要对每个内建函数的理解。还有其他的点对点的点播方式,点的广播,这些不想讲,关键还是看协议栈。
3.WEB端-Apache+MySQL+PHP
下面是截图,感测的数据中,有出现错误。难免。
数据传输用的是php UDP介面,当然这一版本还是直接用HTTP GET的方法,图表用的是EChart,配置简单,图表功能样式也很多,易于操作。
未完待续...会有数据统计和实际运行效果。