本教程中,您将学习如何在NodeMCU上使用DHT11温湿度传感器。并了解温湿度传感器的工作原理,以及如何通过串口监视器查看传感器读取的数值。

设备清单

  • NodeMCU开发板一块
  • DHT11温湿度传感器一个

请输入图片描述
(DHT11模块)

请输入图片描述
(NodeMcu板子)
DHT11是通过测量两个电极之间的电阻来检测水蒸汽的。湿度检测部件表面有电极的保湿基板。

当水蒸气被基板吸收时,离子被基板释放,这个过程将会增加电极之间的导电性。

两个电极之间的电阻变化与相对湿度成比例。

较高的相对湿度会降低电极之间的电阻,而较低的相对湿度会增加电极之间的电阻。

如何在NodeMCU上连接DHT11

请输入图片描述
将DHT11连接到NodeMCU是比较简单的,但连接方式有所不同,具体取决于您使用的是3个引脚的传感器还是4个引脚的传感器。

连接方式如下:

DHT11上标有(+或VCC)引脚的连接nodemcu的+ 3V引脚。

DHT11上标有(S或OUT)引脚的连接nodemcu的D4V引脚。

DHT11上标有(-或GND)引脚的连接nodemcu的GND引脚。

代码如下

#include 

// for DHT11, 
//      VCC: 5V or 3V
//      GND: GND
//      DATA: 2
int pinDHT11 = 2;
SimpleDHT11 dht11(pinDHT11);

void setup() {
  Serial.begin(115200);
}

void loop() {
  // start working...
  Serial.println("=================================");
  Serial.println("Sample DHT11...");
  
  // read without samples.
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
    return;
  }
  
  Serial.print("Sample OK: ");
  Serial.print((int)temperature); Serial.print(" *C, "); 
  Serial.print((int)humidity); Serial.println(" H");
  
  // DHT11 sampling rate is 1HZ.
  delay(1500);
}

使用演示

请输入图片描述

DHT11+WEB版

我们先看看效果
请输入图片描述
DHT11的数据通过web服务器反馈过来。

开发思路

我们首先要安装两个库DHTAdafruit Unified Sensor
请输入图片描述
请输入图片描述

代码如下:

#include 
#include 
#include "DHT.h"

// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

/*Put your SSID & Password*/
const char* ssid = "kali";  // Enter SSID here
const char* password = "12345678900";  //Enter Password here

ESP8266WebServer server(80);

// DHT Sensor
uint8_t DHTPin = D4; 
               
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);                

float Temperature;
float Humidity;
 
void setup() {
  Serial.begin(115200);
  delay(100);
  
  pinMode(DHTPin, INPUT);

  dht.begin();              

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");

}
void loop() {
  
  server.handleClient();
  
}

void handle_OnConnect() {

 Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity 
  server.send(200, "text/html", SendHTML(Temperature,Humidity)); 
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float Temperaturestat,float Humiditystat){
  String ptr = " \n";
  ptr +=" \n";
  ptr +="\n";
  ptr +="\n";
  ptr +="Priess的小窝—智能温湿计\n";
  ptr +="\n";
  ptr +="\n";
  ptr +="\n";
  
   ptr +="

\n";

ptr +="

室内温室检测系统

\n";
ptr +="

\n";
ptr +="

\n";
ptr +="

\n"; ptr +="\n"; ptr +="

\n";
ptr +="

\n";
ptr +="

室内温度:

\n";
ptr +="

";
ptr +=(int)Temperaturestat;
ptr +="°C

\n";
ptr +="

\n";
ptr +="

\n";
ptr +="

\n";
ptr +="

\n"; ptr +="\n"; ptr +="

\n";
ptr +="

\n";
ptr +="

室内湿度:

\n";
ptr +="

";
ptr +=(int)Humiditystat;
ptr +="%

\n";
ptr +="

\n";
//定义温度变量,并且赋值,用于逻辑判断。
int wd = Temperaturestat ;

if (wd>=30){
ptr +="

Hi~ 宝贝今天天气贼热,注入防暑哦!

\n";
}
if (29>=wd&&wd>20){
ptr +="

Hi~ 宝贝今天天气不错吆,尽情的玩耍吧!

\n";
}
if (wd<10){
ptr +="

Hi~ 宝贝今天天气比较冷,多穿点衣服,小心着凉!

\n";
}
ptr +="

\n"; ptr +="\n"; ptr +="\n"; return ptr; }

我在源代码的基础上,添加了温馨提示!当温度为不同的范围,提示不同的问候语。

//定义温度变量,并且赋值,用于逻辑判断。
    int wd = Temperaturestat ;
     
   if (wd>=30){
    ptr +="
Hi~ 宝贝今天天气贼热,注入防暑哦!
\n"; } if (29>=wd&&wd>10){ ptr +="
Hi~ 宝贝今天天气不错吆,尽情的玩耍吧!
\n"; } if (wd=<10){ ptr +="
Hi~ 宝贝今天天气比较冷,多穿点衣服,小心着凉!
\n"; }

请输入图片描述

最后修改:2023 年 08 月 04 日
如果觉得我的文章对你有用,请随意赞赏