MQTT中文站
  • 首页
  • MQTT 学习
    • MQTT 入门
    • MQTT 进阶
    • MQTT 编程
    • MQTT 实例
    • MQTT 要点
    • MQTT5 要点
    • MQTT 工具
    • MQTT 客户端库
    • MQTT 服务器
    • Zigbee2MQTT
    • Sparkplug
    • Home Assistant
    • Node-RED
      • Node-RED 安装部署
      • Node-RED 用户指南
      • Node-RED 创建节点
      • Node-RED 示例教程
      • Node-RED 开发流程
      • Node-RED 接口参考
      • Node-RED 配置模板
      • Node-RED 常见问题
  • MQTT 规范
    • MQTT 5 规范
    • MQTT 3.1.1 规范
    • MQTT 3.1 规范
    • MQTT-SN v1.2规范
    • Sparkplug® v3.0.0规范
  • 产品中心
  • 解决方案
    • 环境监测
    • 工业制造
    • 智慧水利
    • 水利管网
    • 积水监测
    • 综合管廊
    • 档案库房
    • 交通物流
    • 智慧城市
    • 智慧农业
    • 智慧养殖
    • 能源电力
    • 石油石化
    • 智能家居
    • 物联网
    • 汽车与出行
  • 使用文档
  • MQTT 云平台
  • 登录
  • 注册

基于ESP8266的温湿度传感器与MQTT物联网平台通信教程

2 年前 • MQTT 教程

随着物联网技术的不断发展,越来越多的设备需要能够实时监测环境数据并与云平台进行通信。本教程将介绍如何使用ESP8266微控制器、DHT传感器以及MQTT协议,创建一个简单的温湿度传感器,将数据发送到MQTT云平台上,实现实时监测和数据可视化。

所需材料

在开始之前,确保你准备好以下材料:

  1. ESP8266开发板(例如NodeMCU)
  2. DHT传感器(DHT11或DHT22)
  3. 一台电脑
  4. USB数据线
  5. 无线网络(Wi-Fi)接入点
  6. 一个MQTT云平台账户

硬件连接

  1. 将DHT传感器连接到ESP8266开发板。在本示例中,我们将DHT传感器的数据引脚连接到GPIO 5(D1引脚)。
  2. 连接ESP8266到计算机,确保你可以通过Arduino IDE或其他编程工具进行编程。

配置Arduino IDE

在你的计算机上打开Arduino IDE,并确保已安装ESP8266开发板支持。接下来,我们将使用Arduino IDE来编写和上传代码到ESP8266开发板。

编写Arduino代码

下面是示例Arduino代码,用于读取DHT传感器的温湿度数据,并将其发布到MQTT云平台。代码的详细解释见下文。

#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秒后,再次发布
}

代码解释

  1. 首先,我们引入了所需的库,包括ESP8266WiFi库、PubSubClient库(用于MQTT通信)、以及DHT库(用于与DHT传感器通信)。
  2. 我们定义了DHT传感器连接的GPIO引脚(DHTPIN)和传感器类型(DHTTYPE)。
  3. 接下来,我们配置了WiFi连接的相关信息,包括WiFi账号和密码。
  4. 针对MQTT通信,我们配置了MQTT服务器的地址、端口、客户端ID、用户名和密码,以及发布和订阅的主题。
  5. 我们创建了WiFiClient对象和PubSubClient对象,后者将用于与MQTT服务器建立连接和发送消息。
  6. 在setup_wifi函数中,我们初始化WiFi连接。
  7. publish_message函数用于读取DHT传感器的温湿度数据,并将其封装为JSON格式的消息,然后发布到MQTT服务器。
  8. callback函数是MQTT消息回调函数,用于处理从MQTT服务器接收到的消息。
  9. reconnect函数用于重新连接MQTT服务器,如果连接失败,它会定时重试。
  10. 在setup函数中,我们初始化串口通信、WiFi连接、MQTT客户端,以及DHT传感器。
  11. 最后,在loop函数中,我们不断检查MQTT连接状态,执行MQTT客户端的循环操作,发布温湿度数据,并通过延迟等待一段时间来控制数据发布的频率。

总结

通过上述步骤,你可以创建一个基于ESP8266的温湿度传感器,并将其数据发送到MQTT云平台上。这个示例可以作为IoT项目的基础,你可以根据自己的需求扩展功能,例如添加更多传感器、设置数据存储、或者创建数据可视化界面。希望这个教程对你有所帮助,让你更好地理解如何使用ESP8266和MQTT构建物联网应用。

打赏赞(1)微海报分享
esp8266 mqtt 传感器 客户端服务器 通信

MQTT的Arduino客户端库

智能家居控制利器:Zigbee2MQTT 中文详细教程

猜你喜欢

菌菇养殖物联网方案(二)

菌菇养殖物联网方案(二)

08/07
2024
改善基础设施:HiveMQ如何推动智能城市发展

改善基础设施:HiveMQ如何推动智能城市发展

08/07
2024
为什么企业选择全托管HiveMQ云进行MQTT部署

为什么企业选择全托管HiveMQ云进行MQTT部署

07/01
2024
  • 解决方案
    • 智能家居
    • 汽车与出行
    • 工业制造
    • 能源电力
    • 石油石化
    • 交通物流
    • 零售
  • 学习
    • MQTT 规范
    • MQTT 教程
    • MQTT 软件
    • MQTT 客户端库
    • MQTT 服务器
    • 工具和应用程序
  • 关于我们
    • 了解创科慧仁
    • 加入创科慧仁
    • 投资者关系
    • 新闻动态
    • 合作伙伴
    • 联系我们
  • 友情链接
    • Modbus中文网
    • 跳动符号官网
    • 物联网世界
    • RFID世界网
    • 深圳物联网协会
    • isoftstone软通动力
    • 中国发展战略学研究会
    • B.P商业伙伴
  • 在线客服
  • 全国客户服务热线
    4006909885
  • 官方公众号
  • 联系邮箱
    contact@mqtt.cn
Copyright © 2025 MQTT中文站. All rights reserved.Designed by nicetheme. 京ICP备20029519号
在线客服

微信咨询

微信咨询

4006909885

服务热线 7*24小时

电话咨询
  • 首页
  • MQTT 学习
    • MQTT 入门
    • MQTT 进阶
    • MQTT 编程
    • MQTT 实例
    • MQTT 要点
    • MQTT5 要点
    • MQTT 工具
    • MQTT 客户端库
    • MQTT 服务器
    • Zigbee2MQTT
    • Sparkplug
    • Home Assistant
    • Node-RED
  • MQTT 规范
    • MQTT 5 规范
    • MQTT 3.1.1 规范
    • MQTT 3.1 规范
    • MQTT-SN v1.2规范
    • Sparkplug® v3.0.0规范
  • 产品中心
  • 解决方案
    • 环境监测
    • 工业制造
    • 智慧水利
    • 水利管网
    • 积水监测
    • 综合管廊
    • 档案库房
    • 交通物流
    • 智慧城市
    • 智慧农业
    • 智慧养殖
    • 能源电力
    • 石油石化
    • 智能家居
    • 物联网
    • 汽车与出行
  • 使用文档
  • MQTT 云平台
  • 登录
  • 注册
string(5) "2.0.0"