构建基础板:具有桥接Modbus传感器连接到Lorawan无线连接的能力
扫描二维码
随时随地手机看文章
我从硬件库存的墓地中复活了旧主板。这个板曾经是创业公司的MVP产品。两年前,当初创公司还处于炒作阶段,有很多投资者想要慷慨地为初创公司提供资金时,我们看到了工业物联网领域的巨大机遇。我和其他创始人正在迈出第一步,以实现建立这家主要专注于工业物联网应用的创业公司的想法。
我从这些制造业中注意到的一件事是他们使用标准的工业测量工具,这导致了一个相似之处,这些工具使用标准接口称为MODBUS。从这个机会,这个硬件诞生了桥接MODBUS到Lorawan/无线数据。
在本项目中,主要目标是恢复硬件,使其能够从Modbus传感器采集数据,将数据保存到SDCard或内部数据缓冲区,进行数据转换,并将数据发送到云端。
具有MODBUS协议能力的土壤传感器正在这个项目中用于PoC(概念验证),因为这是我的垃圾抽屉中唯一支持MODBUS的传感器。
主图
从下面的图表中,它大致解释了将在这个项目中实现的想法。从下到上有带modbus RTU - RS485接口的土壤传感器,可采集土壤质量信息。为了获取传感器内部的数据,主板需要借助UART到RS485板转换器进行modbus RTU数据查询。通过这样的查询命令,我们将能够收集土壤的温度、体积含水量(VWC)和电导率(EC)。
一旦板获得土壤数据,主板将对实际值进行转换,并将转换发送到lorawan网关。为了能够发送lorawan协议和lorawan无线电,ESP32S3将需要RFM95支持来完成这些事情。RFM95和ESP32S3之间通过SPI接口通信,在主板内部进行物理连接。
Lorawan网关将接收来自主板的数据,并将数据存储在Lorawan本地服务器内部。在此lorawan网关中,采用RAK网关模块作为集中器,Balena鳍板作为网关基板。基板本身能够运行RPi OS和Chirpstack作为lorawan服务器。从这个阶段开始,我们可以查看主板/节点发送的数据。
Thingsboard需要作为仪表板,以提供传感器数据的交互式视图。Lorawan网关可能需要一个桥接器来执行数据传输到Thingsboard。在Thingsboard免费版中,不支持Chirpstack - Thingsboard集成,因此可能需要在Chirpstack - Thingsboard之间创建手动桥接。
硬件列表
要建立这个项目,需要几个硬件:
•自定义Modbus到Lorawan板
•Lorawan网关
•UART/TTL转RS485
•支持Modbus-RTU的土壤测量传感器
•云服务器/ Thingsboard服务器
明确地,建立自定义Modbus - Lorawan板:
•ESP32S3
•RFM95W
•MPPT太阳能充电器
•SD卡数据接口和插槽。
硬件图
从主板到传感器的连接图解释如下。主板通过USB接口供电,为主板上的各个模块和部件供电。电压转换3.3V也分配到外板提供板支撑,本项目为RS485板转换器。
通过跳线进行Uart连接,将Uart - rs485的TTL端口连接到主板。在转换板的另一侧,引脚A和B连接到传感器引脚。为了使传感器正常工作,本项目采用外接12V适配器,12V输出连接到土壤传感器的输入电源引脚。
为了更好地了解主板,此图对每个模块的连接进行了高级概述。该板的主控板是ESP32S3,能够提供WIFI、BLE等无线连接性能,并带有一些外围设备作为通信接口。
如图所示,ESP32S3通过SPI连接,将命令/数据发送到支持模块(RFM95),并通过SPI接口将数据文件读/写到SDcard。ESP32S3还保留了其他GPIO,可作其他用途。
电源控制器为单板上的所有模块供电。有三种电源可以切换,它们是USB,太阳能电池板和电池。
主板概述
硬件测试
由于该板长期处于休眠状态,因此可能需要进行功能检查以确保该板正常运行。一些功能性检查包括:
•Lorawan连接测试
•SD卡数据Wr/R测试
•Modbus查询测试
有关此检查的更多细节请参见视频/录音。
固件图与实现
下面的图表描述了正确完成这项工作的主要流程图。经过几次试验,由于库问题,需要通过排除SD卡的写入和读取命令来更新此图,其中expressif - Arduino VSPI没有按预期工作,导致错误行为。
首先初始化外设,然后启动lorawan例程/事件。这个lorawan调度时间是每60秒一次,所以lorawan网关每分钟都会收到最新的数据。一旦启动,lorawan固件将自动处理每个事件和调度。
lorawan初始化后开始Modbus数据查询。单板以Modbus数据格式发送Modbus RTU命令。有关modbus RTU的更多细节,我们可以遵循此信息。
来自modbus的RTU代码,基于modbus的数据协议
Modbus地址:0x01
功能码:0x03
起始地址:0x0000
请求的数据长度:0x000A
CDC: 0xC5CD
一旦modbus从/目标发送反馈,固件将modbus值转换为实际值,并将其复制到lorawan数据负载中。
由于需要执行多个测试,因此在此项目上开发了多个固件。主要实现是ESP32S3_RFM_Firmware,涵盖了从获取土壤传感器数据到将数据发送到云的所有过程。
下面的代码是程序运行的主要流程,这个代码是基于上面的固件图编写的。从外设初始化开始,读取数据总线,发送测量数据。我们可能注意到modbus数据查询和lorawan事件是如何共存的。lorawan栈/事件需要与其他栈中的modbus数据查询分离,这种方法可以防止由于lorawan事件和优先级导致主栈溢出。
从代码中还执行了数据modbus转换到其实际值,并将其存储在lorawan有效负载中。modbus查询每20秒触发一次,但数据每1分钟传输一次,这意味着平台和lorawan服务器将接收到最新/最大的数据。
Lorawan到Thingsboard桥
Lorawan - Thingsboard桥是为了克服Thingsboard免费版本的限制而制作的。集成Thingsboard的chirpstack lorawan服务器只提供高级版本,这意味着我们需要节省一些预算来购买许可证。
在这个项目中,通过利用MQTT协议的优势,我们可以轻松地交换数据,从而手动处理简单的桥接。由于该桥只覆盖了少量节点,大量节点的约束条件仍然未知。
桥牌的代码实现如下面的代码所示,它是按照上面的图表创建的。此代码在网关内注册为服务,因此每次网关上电时,网桥将自动运行。
网桥实现的结果如下图所示,网桥能够将数据从Chirpstack网关网桥传输到Thingsboard
结果
硬件组装
给电路板一个合适的外壳,设备就可以测试了。
Chirpstack Lorawan服务器
Thingsboard仪表板
本文编译自hackster.io





