基于esp8266的物联网温湿度监测模块

摘要

基于esp8266(esp01)的物联网(MQTT)温湿度监测模块;实现无线获取温湿度数据;

平台信息

  • Arduino IDE
  • EMQX

原理简介

dht11温湿度底板

  • IO2接到了DHT11_DAT

实现

核心代码

/*
备注:
- esp01s温湿度模块
- MQTT5.0
- server:192.168.100.227:1883
- mqtt://home.qsbye.cn:11883
- emqx账户:emqx,你的密码
硬件:
- io2:dht11_dat
依赖库:
- DHT sensor library
- PubSubClient(MQTT)
*/
#include <ESP8266WiFi.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <PubSubClient.h>

/* start 宏定义 */
#define DHTPIN 2
#define DHTTYPE DHT11
/* end 宏定义 */

/* start 全局变量 */
// DHT11
DHT_Unified g_dht(DHTPIN, DHTTYPE);
uint32_t g_delay_ms;
sensor_t g_sensor;
sensors_event_t g_event;
// WIFI
const char* g_ssid = "xiaomi.home";
const char* g_password = "xiaomiwifi";
String g_hostname = "esp01s-dht11";
WiFiClient g_espclient;
// MQTT
const char *g_mqtt_broker = "home.qsbye.cn";
const char *g_topic = "/weekend/s/dht11";
const char *g_mqtt_username = "emqx";
const char *g_mqtt_password = "你的密码";
const int g_mqtt_port = 11883;
PubSubClient g_mqtt_client(g_espclient);
/* end 全局变量 */

void setup(){
  // 初始化串口
  Serial.begin(115200);
  Serial.print("start init");
  // 初始化WIFI
  WiFi.begin(g_ssid, g_password);
  while (WiFi.status() != WL_CONNECTED){
    Serial.println("wifi connecting");
    delay(1000);
  }// end while
  Serial.print("wifi init ok");
  // 初始化DHT11
  g_dht.begin();
  g_dht.temperature().getSensor(&g_sensor);
  g_dht.humidity().getSensor(&g_sensor);
  g_delay_ms = g_sensor.min_delay / 1000;
  g_dht.temperature().getEvent(&g_event);
  g_dht.humidity().getEvent(&g_event);
  // 初始化mqtt
  g_mqtt_client.setServer(g_mqtt_broker, g_mqtt_port);
  g_hostname += "-";
  g_hostname += String(WiFi.macAddress());// 拼接字符串
  while (!g_mqtt_client.connected()) {
    Serial.println("mqtt connecting");
    if (g_mqtt_client.connect(g_hostname.c_str(), g_mqtt_username, g_mqtt_password)){
      break;
    }
    delay(1000);
  }// end while
}

void loop(){
  String s_message;
  s_message += g_hostname;
  s_message += ";"; 
  g_dht.temperature().getEvent(&g_event);
  s_message += String(g_event.temperature);
  s_message += "°C;";
  g_dht.humidity().getEvent(&g_event);
  s_message += String(g_event.relative_humidity);
  s_message += "%;";
  g_mqtt_client.publish(g_topic,s_message.c_str());
  delay(5000);
}

效果

安装效果 获取到的数据 网页展示数据
posted @ 2024-01-10 05:54  qsBye  阅读(29)  评论(0编辑  收藏  举报