DTU 使用 Modbus 透传接入 ThingsCloud 云平台 —— 读取传感器数据和控制继电器

本文档详细介绍了如何使用ThingsEdgeDTU进行ModbusRTU串口透传功能,包括集成模式的设置、接线示例、设备属性定义、Modbus寄存器配置、开关量控制、状态查询任务以及温湿度传感器的配置。通过创建设备类型、定义属性、配置Modbus寄存器和设定Modbus任务,实现了远程控制继电器和实时监测温湿度的功能。此外,还提及了该方法适用于支持串口透传的各类DTU产品。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 Modbus RTU 透传

Modbus RTU 串口透传功能几乎是所有 DTU 产品的标配,我们在教程中也介绍了一些厂商的 DTU 接入示例。

ThingsEdge DTU 使用 Modbus 透传功能和其它 DTU 完全相同,这里列举一些常用方法。

使用 DTU 集成模式

ThingsCloud 对所有 DTU 的接入通常支持两种模式:

  • 集成模式:也就是 DTU 以及它连接的所有传感器等设备,在 ThingsCloud 上体现为一台设备。这种方式适合 DTU 和子设备都比较少的情况。如果数量较多,不利于设备功能定义的复用性。

  • 网关模式:将 DTU 和它的多个子设备,在 ThingsCloud 上对应独立的设备。这样便可以对子设备进行独立的功能定义,便于设备资产的组织和维护管理,非常清晰。

这一节我们先介绍集成模式。为了便于管理,我们用之前的方法新建一个设备类型,改个新的名称。

接线示例

在这个示例中,我们在 DTU 的 RS485 总线上连接了两个 Modbus 设备:

  • 8进8出 IO 控制器,从机站号是 1,波特率 9600
  • 温湿度传感器,从机站号是 2,波特率 9600

其中,在 IO 控制器的继电器端,我们连接了两个指示灯,在IO输入端,连接了两个行程开关。

添加 IO 控制器的属性定义

我们先在 DTU 的设备类型中,找到功能定义,通过添加标准功能,找到对应的设备模型,添加 8 个 IO 输入开关量属性,和 8 个继电器输出开关量属性。

创建好的属性定义如下:

配置 IO 控制器的 Modbus 寄存器

然后在 DTU 的设备类型中,找到Modbus 配置,将刚创建的属性加入 IO 寄存器。如下图:

然后配置正确的从机地址寄存器地址,如下图:

最后,开启属性智能转换,并绑定自定义数据流。如下图:

下发 Modbus 开关量控制

现在我们回到设备的概览面板,可以直接下发继电器输出。

在设备的调试功能中,可以看到属性下发被自动转成了 Modbus 指令,通过自定义数据流下发到了 DTU,再被透传到 IO 控制器,然后接收到了 DTU 回传的 Modbus 回复消息。如下图:

到目前为止,我们已经可以通过 ThingsCloud 控制台远程控制继电器开关。

通过 Modbus 任务查询继电器状态

有时候继电器断电会归位,云平台可能不知道继电器的最新状态,所以我们来建立一个继电器状态查询的 Modbus 任务。如下图:

这里我们将任务的目标类型选为设备类型,而不是设备,这使得任务对该设备类型下的所有设备生效,未来有更多设备添加后不需要再单独创建同样的任务。

推送方式选择 MQTT,自定义数据流填写 stream,这是 DTU 内置连接 ThingsCloud 的默认自定义数据流标识符。

选择 Modbus RTU 下发 任务,用 01 功能码查询继电器状态,这里需要略懂 Modbus 指令,通常可以从设备手册中找到 Modbus 协议。

任务创建成功后,我们可以手动运行一次。如下图:

可以在设备调试中看到 3 条消息,分别是:

  • 下发的 Modbus 查询指令
  • 收到 Modbus 回复指令
  • 解析后转换成属性上报消息

配置温湿度传感器 Modbus 寄存器

接下来我们再配置另一个连接到 DTU 的温湿度传感器,同样先添加功能定义,添加温度和湿度两个属性,如下图:

添加新的属性后,如下图:

接着在 Modbus 配置中,设置温度、湿度属性对应的传感器寄存器,如下图:

不同厂家的温湿度传感器,支持的 Modbus 寄存器略有不同,请您参考实际产品手册。

通过 Modbus 任务查询温湿度

普通的温湿度传感器,只有上报数据的功能,我们来建立一个 Modbus 任务,定时查询温湿度。如下图:

这里我们用到任务的定时功能,我们选 间隔时间重复,如下图:

保存任务后,任务自动启动运行,等待我们设置的间隔时间后,任务首次运行,温湿度数据成功获得。

其它透传 DTU 的支持

ThingsCloud 的 Modbus RTU 透传方式适用于所有厂商支持串口透传的 DTU 产品,可参考这些示例:

### 使用ESP8266将数据ThingsCloud平台 #### 1. 硬件准备 为了完成此项目,需要以下硬件设备: - ESP8266模块(如NodeMCU) - DHT11温湿度传感器或其他类型的传感器 - 杜邦线若干 - USB转TTL串口模块(如果ESP8266不带USB接口) 确保ESP8266的GPIO引脚已正确连接到DHT11传感器数据输出端[^1]。 --- #### 2. 软件环境配置 在开始之前,需安装并配置好Arduino IDE以及相关库文件: - 安装ESP8266支持包:打开Arduino IDE -> 文件 -> 偏好设置,在“附开发板管理器网址”中输入`http://arduino.esp8266.com/stable/package_esp8266com_index.json`。 - 打开工具菜单,选择对应的开发板型号(如NodeMCU 1.0),波特率设为默认值9600bps。 - 下载必要的库文件:通过库管理器安装`DHT sensor library``WiFiClientSecure.h`用于处理MQTT协议通信[^3]。 --- #### 3. MQTT协议简介 ThingsCloud是一个基于云的服务提供商,它允许开发者利用MQTT消息队列遥测输协议来发送接收来自嵌入式系统的实时数据流。因此,本教程中的核心部分就是构建一个简单的MQTT客户端应用程序运行于ESP8266之上。 --- #### 4. 示例代码实现 以下是完整的示例程序,展示了如何读取DHT11传感器数值并通过Wi-Fi网络将其推送到ThingsCloud平台上: ```cpp #include <ESP8266WiFi.h> #include <PubSubClient.h> // PubSubClient 库负责处理 MQTT 协议 #include <DHT.h> // WiFi ThingsCloud 配置参数 const char* ssid = "Your_SSID"; // 替换为您自己的 Wi-Fi 名称 const char* password = "Your_PASSWORD"; // 替换为您自己的 Wi-Fi 密码 const char* mqtt_server = "mqtt.thingscloud.cn"; const int mqtt_port = 1883; // 默认 MQTT 端口号 const char* client_id = "Unique_Client_ID"; // 初始化 DHT11 传感器 (假设接到了 GPIO2 上) #define DHTPIN 2 // 连接到 ESP8266 的 GPIO2 引脚 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); WiFiClient espClient; PubSubClient client(espClient); void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); // 尝试连接无线路由器 while (WiFi.status() != WL_CONNECTED){ delay(500); Serial.print("."); } randomSeed(micros()); Serial.println(""); Serial.println("WiFi connected"); } void reconnect() { while (!client.connected()) { // 如果断开了,则尝试重连 String clientId = client_id; if (client.connect(clientId.c_str())){ // 成功建立连接后订阅主题 Serial.println("Connected to broker."); } else { Serial.print("Failed, rc="); Serial.print(client.state()); Serial.println(" retrying in 5 seconds..."); delay(5000); } } } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (unsigned int i=0;i<length;i++) { Serial.print((char)payload[i]); } Serial.println(); } void setup(){ Serial.begin(115200); dht.begin(); // 启动 DHT11 传感器驱动 setup_wifi(); client.setServer(mqtt_server, mqtt_port); // 设置服务器地址与端口 client.setCallback(callback); // 注册回调函数 } void loop(){ if(!client.connected()){ reconnect(); // 断线自动恢复机制 } float humidity = dht.readHumidity(); // 获取当前空气相对湿度百分比 float temperature = dht.readTemperature(); // 获取摄氏温度 if(isnan(humidity)||isnan(temperature)){ Serial.println("Failed to read from DHT sensor!"); return; } String msg = "{\"humidity\":" + String(humidity) + ",\"temperature\":" + String(temperature) + "}"; client.publish("/v1/your_device_topic",msg.c_str()); // 发布 JSON 格式的测量结果给指定的主题路径 client.loop(); // 处理入的消息服务质量确认(QoS) delay(10000); // 每隔十秒采集一次新样本 } ``` 上述代码实现了如下功能: - `setup()` 函数初始化了Wi-Fi连接、DHT11传感器以及MQTT客户端对象。 - 主循环(`loop`)周期性地获取最新的环境监测指标,并封装成JSON字符串形式推送至上层云端服务。 --- #### 5. 测试验证 当一切就绪之后,上电启动设备即可观察其行为表现。正常情况下,您应该能够在ThingsCloud控制面板界面下看到由该节点上报来的最新状态信息更新记录。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值