关宇晟
(广西慧云信息技术有限公司,广西 南宁 530007)
将传统人工监测数据升级为物联网监控有多种方式,使用华为云IoTDA 物联网平台的环境数据采集系统可进行数据处理和传送。底层通过RS485 总线采集环境传感器数据,解析环境数据后传输给网关设备,网关设备通过MQTT 协议与华为云物联网平台对接,最终实现在华为云IoTDA 物联网平台展示环境数据、查阅数据、统计报表等监控现场环境数据变化的功能。
系统选用华为云IoTDA 作为物联网云平台,通过云平台可以实现查看上报的传感器数据及一段时间内的数据变化报表,订阅或发布指定话题,数据规则转发等。同时设备可向云平台上报属性、事件。
硬件设备的设计,如图1 所示。用一个拥有RS485 采集的接口,专门用于接入RS485 总线通信的传感器,安装传感器对应的Modbus 协议,解析出传感器的具体数据。若存在多路传感器则需将不同类型的传感器设置为不同的地址,在程序中按照设置好的地址依次读取传感器数据。
图1 系统框架设计
为了方便软件设计和管理,将MQTT 接入华为云IoTDA 的这部分作为一个进程(简称网关),将获取传感器数据的这部分作为另一个进程(简称采集),采集和网关相互独立运行,进程间的通信使用消息队列的方式,将需要上报到云平台的传感器数据交给网关上传。网关进程中运行华为云设备接入的SDK,通过4G或有线网络与华为云IoTDA 物联网平台进行通信。
为了同时实现传感器采集功能和网关功能,需要同时具备这两项功能的芯片,可稳定运行作为产品推广。网关的功能需要运行华为云IoTDA 的SDK,所以需要一个可以运行嵌入式Linux 的核心板,4G 通信功能需要具备USB 功能,有线网络通信需要具有网口,采集功能需要芯片具有串口外设。综上所述,设计选用I.MAX6ULL 作为设备的主芯片,同时具备了上述所需的所有功能,且价格适合,供货稳定。由于整个系统设计的模块较多,仅挑选几个关键环节做说明。
输入电压设计为7 ~21 V 的宽电压,可在室外配合锂电池加太阳能板的供电组合,也可直接使用常规的DC 12V 电源适配器供电。需要注意的是核心板需要先上电,再通过核心板上电后的PMIC_ON_REQ引脚让其他外设再上电,否则会出现核心板不能正常启动的现象。设计中使用了两个SY8303 DCDC 电源通过不同的分压电阻分别提供5 V 和3.3 V 的电压给核心板和外设供电,如图2 所示。
图2 电源设计
如图3 所示,选用BL3085 作为RS485 收发电路,工作电压为3.3 V。为了方便软件编程和节约IO引脚,RS485 电路使用了自动收发设计。此电路控制简单,不需要额外的控制引脚进行干预,缺点为通信速率有一定的限制,设计支持波特率为9600 的串口通信,而市面上使用的RS485 传感器通常波特率也为9600,可正常进行通信使用。
图3 RS485 采集接口设计
嵌入式网络硬件主要分为MAC 和PHY,由于选用的芯片已经集成了MAC,只需要选用一款PHY 芯片配合RJ45 底座即可。在这里选用PHY 芯片为LAN8720A,RJ45 底座为了方便设计选用了内置了网络变压器,而如果选用了没有内置变压器的需要在RJ45 座后额外增加网络变压器,否则网络不能正常工作,如图4 所示。
图4 网口设计
主要设计PCIE 座与SIM 卡槽的连接,卡槽的主要信号线添加TVS,防止在拔插SIM 卡时产生静电,损坏元器件。通过USB 与主芯片进行通信,4G 模块使用3.3 V 电源进行工作。
通过分压电阻来采集硬件设备的输入电压值,由于芯片的基准电压为3.3 V,需要预留最大的输入电压分压之后依然小于3.3 V,否则会有测量不准确甚至烧毁芯片的隐患。系统设计的最高输入电压为21 V,则可使用1∶10 的分压电阻进行分压,最终可能达到的最高输入电压为2.1 V,满ADC 足测量范围。通过上报的设备电压至云平台可以随时观察到设备的供电情况,及时排查故障。
说起“祭红”,民间还有一传说。话说一窑口接到圣旨为宫廷烧制祭红瓷器,前段烧制过程非常顺利,在投柴最后的尾段突然天降暴雨,将干燥的松柴浇湿,瞬间旺盛的窑火暗淡下来,烧窑师傅知道其中的厉害之处,最后关头窑火的变弱必然造成祭红色泽黯淡无光。这样督陶官必然降罪于窑口全体窑工,这将是死罪。烧窑师傅有一位女儿,女儿为救父亲及全体窑工愤然投窑以自己的鲜血染红这一窑祭红瓷器,祭红瓷因此而得名。
一个完整的嵌入式系统主要由U-Boot、kernel 以及rootfs 构成,每一部分的涉及面都十分广而深,现主要介绍一些基础功能。图5 表示整个软件结构。
图5 软件结构
U-Boot 是一段嵌入式Linux 系统启动的引导程序,可对芯片的出厂源码进行编译,根据芯片所使用的的Flash 大小、Ram 大小、启动地址、环境变量等进行配置,引导芯片能够正确地加载kernel 和rootfs。
kernel 即嵌入式Linux 系统的内核部分,需要自己进行裁剪。有许多系统需要的功能是没有编译进内核的,需要手动进行添加。包括4G 上网相关的PPP拨号驱动、USB 相关驱动。串口和ADC 相关的驱动则需要在设备树中进行添加或修改,还有一些基础的LED 显示驱动,输入输出驱动也需要根据原理图中设计好的GPIO 接口来同步编写驱动。
rootfs 是嵌入式Linux 系统里的根文件系统,系统及上层应用的相关库文件、软件、配置文件等都存放在这里。设计选用了一款轻量级的嵌入式系统buildroot 来作为芯片的根文件系统,buildroot 集成了一些常见的第三方库和软件,可以缩短开发周期。
由于嵌入式Linux 的内部资源有限,而基础的rootfs 只需要10M 左右的空间便能构建完成。所以,还需要一个完整的Linux 系统来进行应用程序的开发和编译,编译出的可执行文件是仅能运行在对应的嵌入式Linux 系统中,而不能运行在宿主机中,所以还需要将对应的文件拷贝到芯片当中。
在网关和采集程序运行之前,还需进行一些基础的系统初始化配置。
首先,开启ssh 服务,方便后期的应用程序调试。然后配置4G 自动拨号联网或使用有线网络配置IP地址、网关、子网掩码、DNS 服务器,生成网卡便于网关进程的MQTT 联网服务。最后设置开机自启动程序,确保采集进程和网关进程能够在系统开机后自动运行,设置守护进程确保采集进程和网关进程的正常运作。
在使用华为云IoTDA 的SDK 开发之前,需要做一些前期准备工作,根据huaweicloud-iot-devicesdk-c 开发指南,需要安装openssl 库、paho 库和zlib库,并将对应库拷贝到根文件系统buildroot 中的/usr/lib 下,只要完成3 个库的移植安装,就能对SDK 进行正常的编译。然后需要登录华为云物联网平台创建一个产品和设备并注册设备,同时在产品中添加需要上报的传感器数据类型,这里添加了DataInterval、DeviceID、Voltage、Temperature、Humidity、Illumination等常见传感器类型。通过创建好的设备ID 和认证秘钥,修改SDK 中的username 和password,同时将平台的接入地址和MQTT 端口号进行修改。网关进程中从消息队列中接收到实际的传感器数值,将数值转换为JSON 格式,并打包调用IOTA_PropertiesReport()函数进行设备属性上报,这里需保证每一个字符都与平台设定的数据属性字符相对应,否则会出现解析错误。至此,一个简单的传感器联网系统完成。
将设计好的原理图导出为PCB 文件,进行元器件摆放、布线,注意网口和USB 等高速信号在进行PCB 走线时需要做90 欧姆的阻抗匹配,差分信号进行等长走线。将设计好的PCB 发给厂家进行生产,并购买对应的元器件进行加工焊接。制造完成后使用CAD 按照PCB 接口高度进行开孔设计,设计出对应外壳的开孔大小,提交图纸给外壳厂家生产,最终得到的实际产品如图6。
图6 华为云数据采集硬件设备
硬件设备安装完毕后,将一套温度、湿度、光照度、大气压力多合一传感器通过RS485 总线连接到硬件设备,将设备安装到葡萄大棚内,进行葡萄大棚的生长环境数据监控。通过每天温度、湿度的变化曲线,调整大棚的卷帘开度,将大棚温度控制在适合葡萄生长温度。通过光照度的变化,调整顶棚遮阳板的开度,让葡萄能够进行适宜的光合作用。
硬件设备上电测试完成,基本硬件运行正常后,可开始对传感器数据是否正常上传到IoT 平台进行测试。如图7 所示。
图7 华为云IoT 平台的设备属性数据
可以看到,硬件设备采集到的传感器数值已经成功上传到华为云IoTDA,通过查看每一项传感器数据的报表,可以知道当天的数据变化情况。如在10 ∶45时,温度为23.5 ℃、湿度为46.7%、光照度为7 805 lux,可知当时的温度是比较舒适的,光照较弱,为阴天。
通过华为云物联网平台的数据报表统计,可观察传感器数值的变化情况,从而进行一些环境预警。如在农田里安装温湿度传感器,配合设计的物联网设备使用,定时回传田里的温度数据。当夜间温度出现突然过低的现象时,则可能出现了霜冻天气或一些极端气候,此时通过手机APP 给农户推送预警信息,及时处理,从而降低农产品的不良品率。在河边安装水位计配合物联网设备,出现汛情时及时通知到相关部门,组织人员疏散和抗汛。
完成设计的一款使用华为云IoTDA 作为物联网平台的环境数据采集系统,该系统将传感器数据采集和网关功能做了集成,使用一套设备可完成数据的采集和上报功能。
为将来成千上万的传感器接入物联网提供了一种思路,此物联网接入方案可广泛应用于农业、工业、民生等领域,且具有安装部署方便,低成本等特点,对将来实现万物互联、大数据分析有非常重要的意义。