本教程中,您将学习如何在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服务器反馈过来。
开发思路
我们首先要安装两个库DHT
和Adafruit 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 +="
";
ptr +=(int)Temperaturestat;
ptr +="°C\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";
}
版权属于:逍遥子大表哥
本文链接:https://blog.bbskali.cn/1337.html
按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。
此处评论已关闭