基于ESP8266和DHT11的MQTT接入Modbus物联网平台
一、安装Arduino2.安装:直接点击下一步直至安装完成。如下图所示:二、下载ESP8266开发板库:在这面填写ESP8266开发板地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json,保存。
一、安装Arduino
1.下载安装包:点击打开
2.安装:直接点击下一步直至安装完成。如下图所示:
二、下载ESP8266开发板库:
在这面填写ESP8266开发板地址:http://arduino.esp8266.com/stable/package_esp8266com_index.json,保存。
三、设置开发板:
MODBUS 物联网平台 上的准备工作
在实践中,我们通常将 串口服务器 作为透传网关,用于在 Modbus 子设备和云平台之间起到消息转发作用。这里我们使用 串口服务器 的 TCP客户端 模式,准备工作只需要以下几步:
- 创建项目(项目管理→新增项目)。
- 创建设备(设备管理→设备配置→新增设备)
- 填写设备名称,随机生成或者手动填写设备号,在设备协议中选择ModBus RTU,定位设备所在经纬度,保存即可。(设备号复制保存备用)
具体的步骤请浏览:Modbus入门 ,通常几分钟就可以完成.
添加温度、湿度节点
打开设备管理→设备配置→选择刚刚添加的设备,然后点击“ +添加数据 ”。
基于ESP8266和DHT11的MQTT环境监测系统:在Modbus物联网平台上实现实时数据发布示例:
#include <ESP8266WiFi.h> // 引入ESP8266WiFi库
#include <PubSubClient.h> // 引入MQTT客户端库
#include <DHT.h> // 引入DHT库
#define DHTPIN 5 // 定义DHT传感器连接的GPIO端口号为5(对应于D1)
#define DHTTYPE DHT11 // 定义DHT传感器类型为DHT11
DHT dht(DHTPIN, DHTTYPE); // 初始化DHT传感器对象
const char* ssid = "218"; // WiFi账号
const char* password = "A1b2c3d4...5"; // WiFi密码
const char* mqtt_server = "iot.modbus.cn"; // MQTT服务器地址
const int mqtt_port = 1883; // MQTT服务器端口号
const char* mqtt_clientID = "4QR8TZ9ThuL4G"; // MQTT客户端ID; 4QR8TZ9ThuL4G替换成自己的设备号SN
const char* mqtt_user = "ceshi"; // MQTT用户名;替换成自己Modbus云平台账户名
const char* mqtt_password = "123456"; // MQTT密码;替换成自己Modbus云平台密码
const char* mqtt_pub_topic = "/dev/coo/4QR8TZ9ThuL4G"; // MQTT发布主题; 4QR8TZ9ThuL4G替换成自己的设备号SN
const char* mqtt_sub_topic = "/server/coo/4QR8TZ9ThuL4G"; // MQTT订阅主题; 4QR8TZ9ThuL4G替换成自己的设备号SN
WiFiClient espClient; // WiFi客户端对象
PubSubClient client(espClient); // MQTT客户端对象
// 连接WiFi的函数
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("连接到 ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi已连接");
Serial.println("IP地址: ");
Serial.println(WiFi.localIP());
}
// 发布消息的函数
void publish_message() {
float humidity = dht.readHumidity(); // 读取湿度
float temperature = dht.readTemperature(); // 读取温度
char msg[200];
snprintf(msg, sizeof(msg), "[ { \"sensor_device_id\":1 , \"port_id\":1 , \"sdata\":%.1f }, { \"sensor_device_id\":1 , \"port_id\":2 , \"sdata\":%.1f } ]", temperature, humidity);
client.publish(mqtt_pub_topic, msg); // 发布消息到MQTT服务器
}
// MQTT消息回调函数
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("接收到消息 [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
// 重新连接MQTT服务器的函数
void reconnect() {
while (!client.connected()) {
Serial.print("尝试连接MQTT服务器...");
if (client.connect(mqtt_clientID, mqtt_user, mqtt_password )) {
Serial.println("已连接");
client.subscribe(mqtt_sub_topic);
} else {
Serial.print("失败,rc=");
Serial.print(client.state());
Serial.println(" 5秒后再次尝试");
delay(5000);
}
}
}
// 设置串口,WiFi,MQTT服务器和端口,回调函数
void setup() {
Serial.begin(115200); // 设置串口波特率为115200
setup_wifi(); // 设置WiFi
client.setServer(mqtt_server, mqtt_port); // 设置MQTT服务器和端口
client.setCallback(callback); // 设置MQTT回调函数
dht.begin(); // 开始读取DHT传感器数据
}
void loop() {
if (!client.connected()) { // 如果未连接到MQTT服务器
reconnect(); // 重新连接
}
client.loop(); // 执行MQTT客户端循环
publish_message(); // 发布消息
delay(10000); // 延迟10秒后,再次发布
}
这个程序是针对ESP8266微控制器设计的,使用DHT11传感器读取温度和湿度数据,然后通过MQTT协议将数据发送到Modbus物联网平台。这个程序的主要部分包括:
1. **库的引用**:程序引入了`ESP8266WiFi.h`(用于ESP8266的WiFi连接)、`PubSubClient.h`(用于MQTT通信)和`DHT.h`(用于读取DHT11传感器数据)这三个库。
2. **全局变量和对象的定义**:定义了连接WiFi和Modbus物联网平台所需的信息,如WiFi的SSID和密码、MQTT服务器的地址和端口等;创建了DHT对象以及WiFi和MQTT客户端对象。
3. **setup_wifi()函数**:此函数用于连接指定的WiFi网络。
4. **publish_message()函数**:此函数读取DHT11传感器的温度和湿度数据,将数据封装成JSON格式的字符串,然后发布到Modbus物联网平台的特定主题。
5. **callback()函数**:这是一个回调函数,当ESP8266从Modbus物联网平台接收到消息时,此函数将被调用。
6. **reconnect()函数**:如果ESP8266与Modbus物联网平台的连接断开,此函数会尝试重新建立连接。
7. **setup()函数**:这是Arduino程序的启动函数,用于初始化串口通信、连接WiFi、设置Modbus物联网平台的信息和回调函数、开始读取DHT传感器数据。
8. **loop()函数**:这是Arduino程序的主循环,会持续执行。在此函数中,如果ESP8266与Modbus物联网平台的连接断开,会尝试重新连接,然后执行MQTT客户端循环,读取并发布DHT11的温度和湿度数据,每10秒执行一次。
这个程序是一个基于MQTT协议,接入Modbus物联网平台的基础实例。用户可以根据自己的需求进行修改和扩展,以实现更复杂的功能和更广泛的应用。
若有收获,就点个赞吧
更多推荐
所有评论(0)