esp8266+DHT11温湿传感器 制作web室内温度计

时间:2022-07-24
本文章向大家介绍esp8266+DHT11温湿传感器 制作web室内温度计,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

设备清单

(esp8266)NodeMCU开发板一块
DHT11温湿度传感器一个

DHT11模块

NodeMcu板子

DHT11是通过测量两个电极之间的电阻来检测水蒸汽的。湿度检测部件表面有电极的保湿基板。 当水蒸气被基板吸收时,离子被基板释放,这个过程将会增加电极之间的导电性。 两个电极之间的电阻变化与相对湿度成比例。 较高的相对湿度会降低电极之间的电阻,而较低的相对湿度会增加电极之间的电阻。

NodeMCU连接DHT11

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

连接方式如下

DHT11上标有(+或VCC)引脚的连接nodemcu的+ 3V引脚。
DHT11上标有(S或OUT)引脚的连接nodemcu的D4V引脚。
DHT11上标有(-或GND)引脚的连接nodemcu的GND引脚。

我们首先要安装两个库DHT和Adafruit Unified Sensor

打开Arduino点击 项目>加载库>管理库

安装NodeMcu1.0开发板

打开Arduino点击 文件>首选向 在附加开发板管理网址填这个 https://arduino.esp8266.com/stable/package_esp8266com_index.json

然后点击 工具>开发板>开发板管理器 搜索esp8266然后安装

上传代码

首先选择NodeMcu1.0 工具>开发板>NodeMcu1.0(ESP-12E Module) 然后 代码如下:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#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 = "end";  // Enter SSID here
const char* password = "12345678";  //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 = "<!DOCTYPE html> <html>n";
  ptr +="<head> <meta name="viewport" content="width=device-width,  initial-scale=1.0, user-scalable=no">n";
  ptr +="<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600" rel="stylesheet">n";
  ptr +="<meta charset="UTF-8">n";
  ptr +="<title>智能温湿计</title>n";
  ptr +="<style>html { font-family: 'Open Sans', sans-serif; display: block; margin: 0px auto; text-align: center;color: #333333;}n";
  ptr +="body{margin-top: 50px;}n";
  ptr +="h1 {margin: 50px auto 30px;}n";
  ptr +=" .wd {margin: 50px auto 30px;width: auto;color: #f39c12}n";
  ptr +=" .wd1 {margin: 50px auto 30px;width: auto;color: #3498db}n";
  ptr +=".side-by-side{display: inline-block;vertical-align: middle;position: relative;}n";
  ptr +=".humidity-icon{background-color: #3498db;width: 30px;height: 30px;border-radius: 50%;line-height: 36px;}n";
  ptr +=".humidity-text{font-weight: 600;padding-left: 15px;font-size: 19px;width: 160px;text-align: left;}n";
  ptr +=".humidity{font-weight: 300;font-size: 60px;color: #3498db;}n";
  ptr +=".temperature-icon{background-color: #f39c12;width: 30px;height: 30px;border-radius: 50%;line-height: 40px;}n";
  ptr +=".temperature-text{font-weight: 600;padding-left: 15px;font-size: 19px;width: 160px;text-align: left;}n";
  ptr +=".temperature{font-weight: 300;font-size: 60px;color: #f39c12;}n";
  ptr +=".superscript{font-size: 17px;font-weight: 600;position: absolute;right: -20px;top: 15px;}n";
  ptr +=".data{padding: 10px;}n";
  ptr +="</style>n";
  ptr +="</head>n";
  ptr +="<body>n";
  
   ptr +="<div id="webpage">n";
   
   ptr +="<h1>室内温室检测系统</h1>n";
   ptr +="<div class="data">n";
   ptr +="<div class="side-by-side temperature-icon">n";
   ptr +="<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"n";
   ptr +="width="9.915px" height="22px" viewBox="0 0 9.915 22" enable-background="new 0 0 9.915 22" xml:space="preserve">n";
   ptr +="<path fill="#FFFFFF" d="M3.498,0.53c0.377-0.331,0.877-0.501,1.374-0.527C5.697-0.04,6.522,0.421,6.924,1.142n";
   ptr +="c0.237,0.399,0.315,0.871,0.311,1.33C7.229,5.856,7.245,9.24,7.227,12.625c1.019,0.539,1.855,1.424,2.301,2.491n";
   ptr +="c0.491,1.163,0.518,2.514,0.062,3.693c-0.414,1.102-1.24,2.038-2.276,2.594c-1.056,0.583-2.331,0.743-3.501,0.463n";
   ptr +="c-1.417-0.323-2.659-1.314-3.3-2.617C0.014,18.26-0.115,17.104,0.1,16.022c0.296-1.443,1.274-2.717,2.58-3.394n";
   ptr +="c0.013-3.44,0-6.881,0.007-10.322C2.674,1.634,2.974,0.955,3.498,0.53z"/>n";
   ptr +="</svg>n";
   ptr +="</div>n";
   ptr +="<div class="side-by-side temperature-text">室内温度:</div>n";
   ptr +="<div class="side-by-side temperature">";
   ptr +=(int)Temperaturestat;
   ptr +="<span class="superscript">°C</span></div>n";
   ptr +="</div>n";
   ptr +="<div class="data">n";
   ptr +="<div class="side-by-side humidity-icon">n";
   ptr +="<svg version="1.1" id="Layer_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"n"; width="12px" height="17.955px" viewBox="0 0 13 17.955" enable-background="new 0 0 13 17.955" xml:space="preserve">n";
   ptr +="<path fill="#FFFFFF" d="M1.819,6.217C3.139,4.064,6.5,0,6.5,0s3.363,4.064,4.681,6.217c1.793,2.926,2.133,5.05,1.571,7.057n";
   ptr +="c-0.438,1.574-2.264,4.681-6.252,4.681c-3.988,0-5.813-3.107-6.252-4.681C-0.313,11.267,0.026,9.143,1.819,6.217"></path>n";
   ptr +="</svg>n";
   ptr +="</div>n";
   ptr +="<div class="side-by-side humidity-text">室内湿度:</div>n";
   ptr +="<div class="side-by-side humidity">";
   ptr +=(int)Humiditystat;
   ptr +="<span class="superscript">%</span></div>n";
   ptr +="</div>n";
   //定义温度变量,并且赋值,用于逻辑判断。
    int wd = Temperaturestat ;
     
   if (wd>=30){
    ptr +="<div class="wd">今天天气热,注意防暑哦</div>n";
   }
   if (29>=wd&&wd>20){
    ptr +="<div class="wd1">今天天气不错吆,尽情的玩耍吧</div>n";
   }
   if (wd<10){
    ptr +="<div class="side-by-side humidity-text">今天天气比较冷,多穿点衣服,小心着凉</div>n";
   }
   ptr +="</div>n";
   ptr +="</body>n";
   ptr +="</html>n";
   return ptr;
   }

打开 工具>串口监视器 设置为115200波特率 按一下espp8266上面的的RST就可查看获取的ip地址