RS485 Modbus 类型(S007A)
[TOC]
一、实现功能简介
基于 FlexLua 《DTU01万能采集器》实现对市面上常见的 RS485 多合一气象传感器 (PM2.5/PM10/温湿度/光照/噪声/大气压) 的采集,并可通过下面八种无线/有线通信方式中的一种将传感器数据上报至云平台服务器,八种方式分别为:
- 4G 无线 Mqtt 主动传输
- 4G 无线 TCP 主动传输
- WiFi 无线 Mqtt 主动传输
- WiFi 无线TCP 主动传输
- Lora 无线 主动传输
- Lora 无线 被动传输
- 以太网有线主动传输
- 以太网有线被动传输
二、传感器简介
RS485 Modbus 多合一气象传感器百叶箱是一种固定式的多合一地面自动观测设备。观测项目主要包括气温、湿度、大气压、光照度、噪声、PM2.5、PM10等气象要素。气象百叶箱可以广泛应用于农业,养殖业,城市环境测量,农业监控,工业治理等多种环境,以便采集到更加丰富有效的监测数据。
直流供电(默认) | 10-30VDC | |
---|---|---|
最大功耗 | RS485输出 | 0.8W |
精度 | 湿度 | ±3%RH(60%RH,25℃) |
温度 | ±0.5℃(25℃) | |
光照强度 | ±7%(25℃) | |
大气压力 | ±0.15Kpa@25℃ 101Kpa | |
噪声 | ±0.5dB(在参考音准,94dB@1kHz) | |
PM2.5 | 颗粒物计数效率: 50%@0.3μm,98%@>=0.5μm PM2.5精度:±3%FS(@100μg/m3、25℃、50%RH) | |
量程 | 湿度 | 0%RH~99%RH |
温度 | -40℃~+120℃ | |
光照强度 | 0~20万Lux | |
大气压力 | 0-120Kpa | |
噪声 | 30dB~130dB | |
PM10 PM2.5 | 0-1000ug/m3 | |
长期稳定性 | 温度 | ≤0.1℃/y |
湿度 | ≤1%/y | |
光照强度 | ≤5%/y | |
大气压力 | -0.1Kpa/y | |
噪声 | ≤3db/y | |
PM10 PM2.5 | ≤1%/y | |
响应时间 | 温湿度 | ≤1s |
光照强度 | ≤0.1s | |
大气压力 | ≤1s | |
噪声 | ≤1s | |
PM10 PM2.5 | ≤90S | |
输出信号 | RS485输出 | RS485(标准Modbus通讯协议) |
该传感器说明书资料可在
{FlexLua开源网盘}
->{Spec}
->{S007A}
文件夹中找到。
三、DTU01 万能采集器介绍
基于《DTU01采集器》实现采集市面上常见的 RS485 Modbus 多合一气象传感器数据,并将采集到的传感器数据以 Json 字符串的形式通过可选的 4G/WiFi/以太网/Lora 其中一种方式发送给网关或云服务器。在需要电池供电的场景下,还可通过给 DTU01 增加低功耗模块以实现周期性休眠采集,休眠电流可低至 3uA 以内,以实现在电池供电场景下的几个月甚至几年的周期性长期采集。
关于 DTU01 万能采集器:
《DTU01万能采集器》内部核心主控采用 ShineBlink C2M 低代码物联网核心模组,使用该主控核心模组可轻松采集大量市面上常见的传感器数据,并可自由选择通过 4G/WiFi/以太网/Lora 中的一种方 式进行数据通信。本采集器硬件资料和源代码开放且源码极其精简,所以开发者无论是否有嵌入式单片机开发经验,皆可轻松基于源码进行二次开发(例如:新功能增加、边缘数据处理、逻辑判断、特殊协议解析等)。当然如果使用者对编程不感兴趣也可直接参考下面的技术指导文章即可实现大部分场景的需求。
四、DTU01 硬件要求
由于 DTU01 的硬件接口是可配置的,所以需要确认一下您手上的 DTU01 采集器是否满足要求,如果确认已满足就无需再做任何操作,否则请按《DTU01硬件使用指导书》完成下面的硬件配置:
- DTU01 电路板上的 ‘A’ 和 ‘B’ 引脚需配置成 485 接口的 ‘A’ 和 ‘B’,即 S3 选择
- DTU01 电路板上的 ‘+’ 和 ‘-’ 电源输出引脚需配置成 12v 输出(注意在 DTU01 电路板上 ‘+’ 和 ‘-’ 对应 ‘VIN’ 和 ‘GND’)
《DTU01硬件使用指导书》可在
{FlexLua开源网盘}
->{Hardware}
->{DTU01万能采集器}
->{DTU01硬件使用指导书}
文件夹中找到。
五、传感器采集核心代码
参考传感器资料中的 RS485 通信参数以及 Modbus 寄存器点位表,可得如下代码,将以下代码覆盖至对应的 main.lua 源代码文件中即可实现传感器的采集。
--读取RS485多合一气象传感器
--获取到的Json数据形如:{"Humi":72.1, "Temp":26.5, "Noise":71.1, "PM25":35, "PM10":0, "Air":10.0, "Lux":5800}
function ModbusToJson()
--配置RS485 Modbus转Json功能,并设置将要生成的Json字符串最大长度为150字节
LIB_ModbusToJsonConfig(150)--必须小于255
--多合一传感器寄存器地址500~507存储:湿度,温度,噪音,pm2.5,pm10,大气压,光照
LIB_ModbusToJsonAdd(500,"U_AB",1,"Humi")--湿度,16bit无符号AB型,小数点个数1个,Json Key名称"Humi"
LIB_ModbusToJsonAdd(501,"S_AB",1,"Temp")--温度,16bit有符号AB型,小数点个数1个,Json Key名称"Temp"
LIB_ModbusToJsonAdd(502,"U_AB",1,"Noise")--噪音,16bit无符号AB型,小数点个数1个,Json Key名称"Noise"
LIB_ModbusToJsonAdd(503,"U_AB",0,"PM25")--PM2.5,16bit无符号AB型,小数点个数0个,Json Key名称"PM25"
LIB_ModbusToJsonAdd(504,"U_AB",0,"PM10")--PM10,16bit无符号AB型,小数点个数0个,Json Key名称"PM10"
LIB_ModbusToJsonAdd(505,"U_AB",1,"Air")--大气压,16bit无符号AB型,小数点个数1个,Json Key名称"Air"
LIB_ModbusToJsonAdd(506,"U_ABCD",0,"Lux")--光照LUX,32bit无符号AB型,小数点个数0个,Json Key名称"Air"
--参数设置(4800,无校验,1位停止位,功能码"03",从机地址0x01,应答最长等待1000ms,包与包最短间隔100ms)
LIB_ModbusToJsonSend("BAUDRATE_4800","NoneParity","StopBit_1","03",0x01,1000,100)
end
六、八种采集传输方式实现(选一种阅读即可)
(1)4G Mqtt 主动传输(直流供电+电池供电)
周期性采集 RS485 Modbus 多合一气象传感器数据并转换成可读性更强的 Json 字符串,然后通过 4G Mqtt 发送至云端,Json 字符串示例如下:
{"Dev":"TH","Data":{"Humi":72.1, "Temp":26.5, "Noise":71.1, "PM25":35, "PM10":0, "Air":10.0, "Lux":5800},"Err":null}
实现方法如下:
- 请 仔细阅读参考 DTU01 的《软件使用指导书(RS485_4G_MQTT)》,并在 main.lua 源代码文件中修改好"配置信息"
- 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
- 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数
指导书文件和main.lua源代码文件均位于:
{FlexLua开源网盘}
->{Software}
->{DTU01万能采集器}
->{RS485}
->{4G主动发送}
->{MQTT}
文件夹中
(2)4G TCP主动传输(直流供电+电池供电)
周期性采集 RS485 Modbus 多合一气象传感器数据并转换成可读性更强的 Json 字符串,然后通过 4G Tcp 发送至云端,Json 字符串示例如下:
{"Dev":"TH","Data":{"Humi":72.1, "Temp":26.5, "Noise":71.1, "PM25":35, "PM10":0, "Air":10.0, "Lux":5800},"Err":null}
实现方法如下:
- 请仔细阅读参考 DTU01 的《软件使用指导书(RS485_4G_TCP)》,并在 main.lua 源代码文件中修改好"配置信息"
- 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
- 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数
指导书文件和main.lua源代码文件均位于:
{FlexLua开源网盘}
->{Software}
->{DTU01万能采集器}
->{RS485}
->{4G主动发送}
->{TCP}
文件夹中
(3)WiFi Mqtt 主动传输(直流供电+电池供电)
周期性采集 RS485 Modbus 多合一气象传感器数据并转换成可读性更强的 Json 字符串,然后通过 WiFi Mqtt 发送至云端,Json 字符串示例如下:
{"Dev":"TH","Data":{"Humi":72.1, "Temp":26.5, "Noise":71.1, "PM25":35, "PM10":0, "Air":10.0, "Lux":5800},"Err":null}
实现方法如下:
- 请仔细阅读参考 DTU01 的《软件使用指导书(RS485_WIFI_MQTT)》,并在 main.lua 源代码文件中修改好"配置信息"
- 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
- 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数
指导书文件和main.lua源代码文件均位于:
{FlexLua开源网盘}
->{Software}
->{DTU01万能采集器}
->{RS485}
->{WiFi 主动发送}
->{MQTT}
文件夹中
(4)WiFi TCP主动传输(直流供电+电池供电)
周期性采集 RS485 Modbus 多合一气象传感器数据并转换成可读性更强的 Json 字符串,然后通过 WiFi Tcp 发送至云端,Json 字符串示例如下:
{"Dev":"TH","Data":{"Humi":72.1, "Temp":26.5, "Noise":71.1, "PM25":35, "PM10":0, "Air":10.0, "Lux":5800},"Err":null}
实现方法如下:
- 请仔细阅读参考 DTU01 的《软件使用指导书(RS485_WIFI_TCP)》,并在 main.lua 源代码文件中修改好"配置信息"
- 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
- 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数
指导书文件和main.lua源代码文件均位于:
{FlexLua开源网盘}
->{Software}
->{DTU01万能采集器}
->{RS485}
->{WiFi 主动发送}
->{TCP}
文件夹中
(5)Lora 主动传输(直流供电+电池供电)
Lora从机周期性采集 RS485 Modbus 传感器数据并转换成可读性更强的 Json 字符串,然后无线发送至Lora中心点网关(DTU02万能网关),Json 字符串示例如下:
{"LrAddr":1,"Dev":"TH","Data":{"Humi":72.1, "Temp":26.5, "Noise":71.1, "PM25":35, "PM10":0, "Air":10.0, "Lux":5800},"Err":null}
实现方法如下:
- 请仔细阅读参考 DTU01 的《软件使用指导书(RS485_LORA_ACTIVE)》,并在 main.lua 源代码文件中修改好"配置信息"
- 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
- 注意:如果需要使用低功耗电池供电功能,还需在配置信息中配置 SysSleepEn 参数
指导书文件和main.lua源代码文件均位于:
{FlexLua开源网盘}
->{Software}
->{DTU01万能采集器}
->{RS485}
->{Lora主动发送}
文件夹中
Lora通信组网需要结合 DTU02万能网关,DTU02网关可支持以下功能:
- Lora 转 4G 透传
- Lora 转 WiFi 透传
- Lora 转 以太网 透传
DTU02万能网关的资料位于:
{FlexLua开源网盘}
->{Software}
->{DTU02万能网关}
文件 夹中
(6)Lora 被动传输(直流供电)
本设备以 Lora 从机方式工作,等待 Lora中心点网关(DTU02万能网关)发来查询 Json 指令,查询指令格式如下:
--"LrAddr"=1表示云端服务器希望网关去查询其旗下的某个Lora从机地址为1的设备
--例如:"Dev"="TH"表示查询指令标识(例如表示查询某款传感器的数据,该标识在485同时接多个传感器时有用)
{"LrAddr":1, "Dev":"TH"}
当收到以上 Json 指令后,本设备通过 RS485 Modbus 采集连接在本设备上的RS485传感器数据并转换成可读性更强的 Json 字符串,然后通过 Lora 返回给网关(DTU02万能网关),返回的 Json 数据格式如下:
{"LrAddr":1, "Dev":"TH","Data":{"Humi":72.1, "Temp":26.5, "Noise":71.1, "PM25":35, "PM10":0, "Air":10.0, "Lux":5800},"Err":null}
实现方法如下:
- 请仔细阅读参考 DTU01 的《软件使用指导书(RS485_LORA_PASSIVE)》,并在 main.lua 源代码文件中修改好"配置信息"
- 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
指导书文件和main.lua源代码文件均位于:
{FlexLua开源网盘}
->{Software}
->{DTU01万能采集器}
->{RS485}
->{Lora被动发送}
文件夹中
Lora通信组网需要结合 DTU02万能网关,DTU02网关可支持以下功能:
- Lora 转 4G 透传
- Lora 转 WiFi 透传
- Lora 转 以太网 透传
DTU02万能网关的资料位于:
{FlexLua开源网盘}
->{Software}
->{DTU02万能网关}
文件夹中
(7)以太网 Tcp Client 主动传输(直流供电)
周期性采集 RS485 Modbus 传感器数据并转换成可读性更强的 Json 字符串,然后通过 以太网 Tcp Client 发送至云端,Json 字符串示例如下:
{"Dev":"TH","Data":{"Humi":72.1, "Temp":26.5, "Noise":71.1, "PM25":35, "PM10":0, "Air":10.0, "Lux":5800},"Err":null}
实现方法如下:
- 请仔细阅读参考 DTU01 的《软件使用指导书(RS485_ETH_ACTIVE)》,并在 main.lua 源代码文件中修改好"配置信息"
- 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
指导书文件和main.lua源代码文件均位于:
{FlexLua开源网盘}
->{Software}
->{DTU01万能采集器}
->{RS485}
->{Eth主动发送}
文件夹中
(8)以太网 TCP Server 被动传输(直流供电)
本设备的以太网接口以 TCP Server 静态 IP 方式工作,等待 Client 设备发来查询 Json 指令,指令格式如下:
--"Dev"="TH"表示查询指令标识(例如表示查询某款传感器的数据,该标识在485同时接多个传感器时有用)
{"Dev":"TH"}
当收到以上 Json 指令后,本设备通过 RS485 Modbus 采集连接在本设备上的RS485传感器数据并转换成可读性更强的 Json 字符串,然后通过 以太网 返回给 Client 端,返回的 Json 数据格式如下:
{"Dev":"TH","Data":{"Humi":72.1, "Temp":26.5, "Noise":71.1, "PM25":35, "PM10":0, "Air":10.0, "Lux":5800},"Err":null}
实现方法如下:
- 请仔细阅读参考 DTU01 的《软件使用指导书(RS485_ETH_PASSIVE)》,并在 main.lua 源代码文件中修改好"配置信息"
- 将第五节中提供的"传感器采集核心代码"覆盖至相应的 main.lua 源代码文件中
指导书文件和main.lua源代码文件均位于:
{FlexLua开源网盘}
->{Software}
->{DTU01万能采集器}
->{RS485}
->{Eth被动发送}
文件夹中
七、本章相关开源资料汇总
(1)硬件开源资料
硬件 | 开源网盘路径 |
---|---|
《多合一气象传感器说明书》 | {FlexLua开源网盘} ->{Spec} ->{S007A} 文件夹 |
《DTU01万能采集器硬件使用指导书》 | {FlexLua开源网盘} ->{Hardware} ->{DTU01万能采集器} ->{DTU01硬件使用指导书} 文件夹 |
《DTU01万能采集器硬件原理图》 | {FlexLua开源网盘} ->{Hardware} ->{DTU01万能采集器} ->{DTU01硬件原理图} 文件夹 |
(2)软件开源资料
注意:以下八个文档,只需按需选择其中一个阅读即可。
软件 | 开源网盘路径 |
---|---|
《4G Mqtt 主动传输实现指导书》及main.lua源码 | {FlexLua开源网盘} ->{Software} ->{DTU01万能采集器} ->{RS485} ->{4G主动发送} ->{MQTT} 文件夹 |
《4G TCP 主动传输实现 指导书》及main.lua源码 | {FlexLua开源网盘} ->{Software} ->{DTU01万能采集器} ->{RS485} ->{4G主动发送} ->{TCP} 文件夹 |
《WiFi Mqtt 主动传输指导书》及main.lua源码 | {FlexLua开源网盘} ->{Software} ->{DTU01万能采集器} ->{RS485} ->{WiFi主动发送} ->{MQTT} 文件夹 |
《WiFi TCP 主动传输指导书》及main.lua源码 | {FlexLua开源网盘} ->{Software} ->{DTU01万能采集器} ->{RS485} ->{WiFi主动发送} ->{TCP} 文件夹 |
《 Lora 主动传输实现指导书》及main.lua源码 | {FlexLua开源网盘} ->{Software} ->{DTU01万能采集器} ->{RS485} ->{Lora主动发送} 文件夹 |
《 Lora 被动传输实现指导书》及main.lua源码 | {FlexLua开源网盘} ->{Software} ->{DTU01万能采集器} ->{RS485} ->{Lora被动发送} 文件夹 |
《 以太网主动传输实现指导书》及main.lua源码 | {FlexLua开源网盘} ->{Software} ->{DTU01万能采集器} ->{RS485} ->{ETH主动发送} 文件夹 |
《 以太网被动传输实现指导书》及main.lua源码 | {FlexLua开源网盘} ->{Software} ->{DTU01万能采集器} ->{RS485} ->{ETH被动发送} 文件夹 |
(3)其他(非必需)
如对源代码中的实现细节感兴趣,开发者可查阅 《Lua编程学习指导》、《ShineBlink 函数API手册》、《ShineBlink C2M模组资料》:
内容 | 开源网盘路径 |
---|---|
《Lua编程学习指导》 | {FlexLua开源网盘} ->{Tutorial} ->{Lua编程学习指导} 文件夹 |
《ShineBlink 函数API手册》 | {FlexLua开源网盘} ->{Tutorial} ->{ShineBlink 函数API手册} 文件夹 |
《ShineBlink C2M模组资料》 | {FlexLua开源网盘} ->{Tutorial} ->{ShineBlink C2M模组资料} 文件夹 |