抗击疫情取得阶段性胜利,PCB板也做好了,今天就把这个项目贴出来吧。! R# j$ Q/ A2 h7 L7 t. f5 H7 ? 0 ~6 _, `+ Q' J) ?; I: Z 整体概述- `; z6 n5 ^5 C: ^8 L 首先看看整体的,我们做了一个1+3的温湿度采集器,一个主模块(Zigbee的Coordinator)接在电脑上,另外3个独立的板子,采集了温湿度数据上报到主模块。 E4 M, K* \2 c+ W. ] 单片机板子上有一个拨码开关,其中1,2是有用的,组合可以设置成4种模式:- u& t0 O" a0 Q2 \9 G* ?1 p, H7 l 1-OFF,2-OFF:将DRF1609H设置成Router,等待Modbus指令上报数据9 i, t* e! p5 B4 M2 @# E 1-ON,2-OFF:将将DRF1609H设置成End Device,等待Modbus指令上报数据6 n2 k+ C3 e2 u6 E7 E2 D* t 1-ON,2-OFF:将将DRF1609H设置成End Device,主动上报数据 1-ON,2-ON:将将DRF1609H设置成End Device,主动上报数据,低功耗模式- C8 T4 k5 o/ M Modbus上报数据: 单片机板子上已经内置了Modbus协议,2条指令,分别是写地址、读数据。 + t* Q7 K6 ]$ F1 a6 i6 { 1,写地址指令:" ~& x% z: u) j FE:从机地址(0xFE为万能地址,对所有的板子有效) 06:写指令码3 C9 [ p5 t8 L7 q7 M& h 00 01:写数据的地址(本项目中,只有写从机地址这一个功能,只有0x0001有效) 00 01:写入的从机地址 0D C5:CRC-16校验码* y% {( t8 O) ?- E! J2 I+ P" R 7 B0 j. p7 O& n9 x/ i6 f! s2 G2 s 下面是从机1-10的写地址指令,可以直接取用。
写地址是通过主模块(串口调试助手),无线对单片机板子修改:9 k% p9 U5 u% a$ t* U! Q% g / T3 G. Z( c! I; t6 c$ v$ S6 {: S& g3 L 2,读数据指令: 读数据可以使用标准的Modbus软件,如ModbusPoll,设置如下所示: % v8 r: q8 d" J" Q: j( B 0 \2 `# Y$ K$ w2 Z/ ?2 f+ G, z" _# n 3个板子一起读数据的截图: 低功耗上报数据: 在模式拨码开关设置成:1-ON,2-ON,单片机首先给DRF1609H模块设置成End Device,然后启动低功耗模式,低功耗模式下,10秒上报一次数据,2个5号电池,可以使用一年。 ( i. y( _' I9 n% U/ j$ M 测试Zigbee模块:) o# P/ m4 {% ~* P T5 N 这个项目的通讯采用的是Zigbee模块,主要考虑以下几点:( n. T" b6 ^ e( l- [! O C& o 1,Zigbee不依赖于外部网络或设备,如WIFI或GPRS,不需要额外增加东西,同时安装也比较简单,至少不需要TCP/IP等网络知识;+ u4 @. Z9 B! l 2,相对于433M的模块,Zigbee通讯要快很多,如果采集的点比较多,这个优势就很明显了,昨天看一个资料,说LoRa,如果要容纳500点上报数据,则要求每个点至少间隔1小时上报一次,每次最多10个字节,而在我们这个项目中,如果是500个点,每个点的上报间隔只要100秒(即每个点预留200MS的时隙即可),每次10个字节。8 I" c( @* V. `3 } 3,Zigbee的自动路由,在工业现场,有些采集点可能放在锅炉底下、铁柜子里面,等等,由于Zigbee的自动路由,可以在旁边再放一个Router模块,这样,数据就可以自动路由出来,这也是Zigbee的优势之一。 V% G9 ~+ a F% w3 J8 U0 e- m 厂家配套的软件,可以读取Zigbee的网络拓扑,还是很方便的:% f4 g2 j, C9 H3 U ' j0 D5 g( o3 B9 W2 h |