基于ESP8266 NodeMCU + DHT22 记录室内温湿度

简介: 用ESP8266 NodeMCU 和 DHT22模块做了个室内温湿度监控的小系统,DHT22每秒把获取的温湿度发送给开发板,开发板通过HTTP协议把温湿度数据发送到部署在云服务器上的数据管理服务(自己撘的SpringBoot项目和数据库),然后就可以通过h5页面观察室内温湿度的变化。


1. 硬件


  • ESP8266-NodeMCU开发板
  • DHT22温湿度传感器
  • 杜邦线


ESP8266-NodeMCU开发板和DHT22引脚对应关系


27.png

2. 开发


在Arduino依赖的库还是通过【项目】→【加载库】→【管理库】下载安装,不再赘述。


直接上代码:


#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <DHT.h>
DHT dht(D1, DHT22);     //设置Data引脚所接IO口和传感器类型
ESP8266WiFiMulti wifiMulti;           // 建立ESP8266WiFiMulti对象
#define SERVER_IP "http://serverIp/environment/info/add" // 网络服务器地址
WiFiClient client; // 创建 WiFiClient 实例化对象
HTTPClient httpClient; //创建http对象
void setup() {
  Serial.begin(115200);
  wifiMulti.addAP("无线网名", "无线网密码");
  int i = 0;
  while (wifiMulti.run() != WL_CONNECTED) {  // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前
    delay(1000);                             // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU
    Serial.print(i++); Serial.print(' ');    // 将会连接信号最强的那一个WiFi信号。
  }                                          // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是此处while循环判断是否跳出循环的条件。
  Serial.println('\n');                     
  Serial.print("Connected to ");Serial.println(WiFi.SSID());        // 连接的WiFI名称     
  Serial.print("IP address:\t");Serial.println(WiFi.localIP());     // NodeMCU的IP地址
  httpClient.begin(client, SERVER_IP); // 配置HTTP请求地址
  dht.begin();  // 启动DHT22
}
void loop() {
  delay(1000);                                //延时1000毫秒
  float RH = dht.readHumidity();              //读取湿度数据
  float T = dht.readTemperature();            //读取温度数据
  Serial.print("Humidity:");                  //向串口打印湿度数据
  Serial.print(RH);   
  Serial.print("%"); 
  Serial.print("  Temperature:");             //向串口打印温度数据
  Serial.print(T);            
  Serial.println("C");
  String requestBody = "{\"environmentNo\":\"Home\",\"humidity\":";
  requestBody += String(RH);
  requestBody += ",\"temperature\":";
  requestBody += String(T);
  requestBody += "}";
  Serial.print("requestBody:"); Serial.println(requestBody);
  Serial.print("[HTTP] begin...\n");
  //启动连接并发送HTTP报头和报文
  httpClient.addHeader("Content-Type", "application/json");
  int httpCode = httpClient.POST(requestBody);
  Serial.print("[HTTP] POST...\n");
  if (httpCode > 0) {
    Serial.printf("[HTTP] POST... code: %d\n", httpCode);
    if (httpCode == HTTP_CODE_OK) {
      const String& payload = httpClient.getString();
      Serial.println("received payload:\n<<");
      Serial.println(payload);
      Serial.println(">>");
    }
  } else {
    Serial.printf("[HTTP] POST... failed, error: %s\n", httpClient.errorToString(httpCode).c_str());
  }
}


启动后,开发板每秒会向服务器上送一次温湿度数据,跑了一晚上,通过数据管理服务(就是个SpringBoot项目从数据库查一下数据,然后Echarts渲染出来)监控到的温湿度如下:

28.png


29.png

(PS:温度趋势线上有3个高峰不是因为DHT22不准确,第一次是想试一下温湿度监控是否正常,往上面哈了一口气~温度和湿度就飙升上来了……;第二次是早上端着热腾腾的早饭在传感器旁边吃饭;第三次是端着热腾腾的午饭在传感器旁边吃饭……)。




未完待续……


下一步就是把这套系统和加湿器、空调连接起来,当湿度低于最低舒适湿度时(一般舒适湿度在40%~ 70%左右),开发板控制继电器打开加湿器,高于舒适湿度时,开发板控制继电器关闭加湿器;当温度低于最低舒适温度时(一般舒适温度在18℃~25℃左右),开发板控制红外发射模块打开空调制热,当温度高于最高舒适温度时,开发板控制红外发射模块打开空调制冷。下班回家的路上,在手机上可以查看家里的温湿度,也可以通过手机向服务器发送MQTT消息,开发板监听MQTT服务 ,收到MQTT消息后,根据消息内容提前打开空调和加湿器。


30.png


买的继电器模块和红外发射接收模块一周之前就到附近了,但可能因为疫情原因,物流一直没配送……希望疫情赶紧过去吧,一切都赶紧好起来!

相关文章
|
8月前
|
传感器 编解码 物联网
STC89C52+DHT20设计的环境温湿度检测仪
本项目基于STC89C52单片机和DHT20温湿度传感器,实现了一款环境温湿度检测仪。通过传感器采集环境的温度和湿度数据,利用IIC接口的OLED显示屏显示出来,便于用户实时监测环境温湿度状态。
128 1
|
8月前
|
传感器
STM32+ESP8266+QT客户端上位机显示DHT11温湿度与点灯
STM32+ESP8266+QT客户端上位机显示DHT11温湿度与点灯
|
9月前
|
传感器 芯片 数据格式
stm32读取DHT11温湿度传感器
stm32读取DHT11温湿度传感器
170 1
|
10月前
|
传感器
STM32 AHT10温湿度传感器数据
STM32 AHT10温湿度传感器数据 机智云传输温湿度
143 0
|
10月前
|
传感器
野火RA6M5开发板 DHT11温湿度传感器 OLED显示测试学习
野火RA6M5开发板 DHT11温湿度传感器 OLED显示测试学习
79 0
野火RA6M5开发板 DHT11温湿度传感器 OLED显示测试学习
|
10月前
野火STM32F1开发板 IIC 0.96OLED 波形显示
野火STM32F1开发板 IIC 0.96OLED 波形显示
61 0
|
11月前
|
芯片
【STC15单片机】 超声波模块的使用
【STC15单片机】 超声波模块的使用
257 0
|
传感器 存储 IDE
HTU21D温湿度传感器与Arduino连接电路图说明
在本用户指南中,我们将学习如何将 HTU21D 温湿度传感器模块与 Arduino 连接。首先,我们将向您介绍 HTU21D 传感器,包括其引出线、特性以及与 Arduino 的接口。其次,我们将在 Arduino IDE 中安装 Adafruit HTU21D 库以访问传感器数据。最后,我们将看到两个在串行监视器和 SSD1306 OLED 显示器上显示温度和湿度值的示例。
207 0
HTU21D温湿度传感器与Arduino连接电路图说明
|
传感器 数据格式
【STM32】 DHT11温湿度传感器模块学习总结
DHT11模块是一个数字温湿度传感器,是一款含有已经校验数字信号输出的传感器,它其中包含有了电阻式的感知湿度的模块元件和一个可以测温的NTC模块元件,并且和一个高性能的八位单片机相结合。
【STM32】 DHT11温湿度传感器模块学习总结