更换新版家用气象站及MODBUS RS485技术应用要点
 结合domoticz系统的构建,2018年在楼顶安装了家用气象站,气象站采用一套HAM友提供的套件,弃用其温度百叶箱(内含主控)及无线液晶屏等显示部件,保留套件中风向风速传感器及雨量传感器,增加一个百叶箱,用BM280测量温湿度与气压,用一块NODEMCU作为主控芯片,测量计算风向风速雨量等信息,通过2.4G无线局域网向Domoticz和OneNET发送数据。这一版气象站问题还是不少的,最大的问题是架设在屋顶,与家里路由器隔了一个带有屏蔽作用的钢筋混凝土的屋顶,WIFI连接十分不稳定,经常出现掉线的情况,想了很多办法,包括在阳台增设无线中继放大器等,始终无法彻底解决连接不稳定问题,曾经考虑过改用有线联网,但气象站的百叶箱太小,放不下ethernet模块和POE模块,加之感觉这套系统中风向风速等传感器的技术比较玩具,例如风向是八个干簧管,通过串接不同阻值电阻指示八个方向,无法准确测量风向,风速是风杯旋转时干簧管通断产生脉冲信号等,雨量传感器虽然采用的是翻斗式的设计,但其受雨口并未按照国标设计等,也就凑合用了下来。
 最近这套系统彻底没数据了,断电重启也无效,这才下定决心进行换版重制。这次选用RS485接口的气象站组件,内置了温湿度气压,以及超声波风向风速传感器,还有一个光学雨量传感器。超声波测量风向风速似乎已经相对成熟,但采用光学方法测量雨量倒是没有想到,搜索了一番发现,似乎这也是一种得到承认的方法,那就试试吧。采用RS485组件的优点是一是数据读取方便,因其采用modbus协议,一个RS485设备可以集成多种传感器,只要发送指令读取每个传感器对应的寄存器数据即可,二是RS485传输距离长,一根RS485电缆从屋顶连下来,主控模块也可放在室内,防护更好,也方便后期调整升级固件。这次采用ethernet连接,不会再出现连接不稳定现象。
 调试过程中的技术问题及解决要点如下:
- Arduino的MODBUS RS485库有很多,作为主站控制的话,SensorModbusMaster是最好用的。虽然作者说这个库用于带自动收发的芯片,例如MAX13487的时候效果更好,但试验下来,如果只用9600这样波特率的话,MAX485芯片工作也完全正常。
- RS485接口电路中AB之间的终端电阻是用于阻抗匹配的,用来减少反射,但是如果RS485接线本身不长的话,加上终端电阻反而是有害无益,调试时发现读取数据很不稳定,设置了8N1的串口协议有时候只能读出7bit数据,百思不得其解,去掉终端电阻就一切正常了。而且加上终端电阻后将大幅度拉低AB间电平,所以加不加,最好试验着看。
- 有人串口ethernet模块如果出现发送的数据语法格式无误,但就是返回代码400的话,大概率是串口工作模式没有处在正确模式上,即发送数据时还处于命令模式,或发送命令模式时还处于数据透传模式,但是ethernet工作过程中可能会出现各种情况,编写程序时难以穷尽所有情况,所以一个讨巧的办法是在进入命令模式时先发送一遍进入数据透传模式,反之亦然,这样如果工作模式正确最多返回一条-1错误,不影响程序正常运行,但如果工作模式不正确,则正好可以纠正到程序设计模式上来,后续工作就一切正常了。