一.硬件介绍:
1.图片:
2.引脚定义:
- VCC:3~5.5V
- DATE:串行数据,单总线
- GND :接地,电源负极
3.串行接口 (单线双向):
DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和数据传送正确时校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集数据后转换到低速模式。
如果想更多了解单总线协议传送门
二.程序介绍:
1.由于DHT库函数比较简单,因此笔者就不再介绍库函数了,直接上代码。
#include <DHT.h>
#define DHTPIN 10 //定义针脚
#define DHTTYPE DHT11 //定义类型,DHT11或者其它
//进行初始设置
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin(); //DHT开始工作
}
void loop() {
// 两次检测之间,要等几秒钟。
delay(2000);
float h = dht.readHumidity();//读湿度
float t = dht.readTemperature();//读温度,默认为摄氏度
Serial.print("Humidity: ");//湿度
Serial.print(h);
Serial.println(" %");
Serial.print("Temperature: ");//温度
Serial.print(t);
Serial.println(" ℃ ");
}
2.效果显示:
三.项目实践:
1.温湿度显示仪
根据我们前一章LCD1602显示屏的学习内容传送门再结合DHT11模块的学习内容我们就可以动手摆了
2.代码展示
#include <LiquidCrystal.h>
#include <DHT.h>
#define DHTPIN 10
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
dht.begin();
}
void loop() {
delay(2000);
float h = dht.readHumidity();//读湿度
float t = dht.readTemperature();//读温度,默认为摄氏度
lcd.setCursor(0,0);
lcd.print("Hum: ");//湿度
lcd.print((int)h);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Tem: ");//温度
lcd.print((int)t);
lcd.print(" %");
图片笔者这里就不这里就不展示了。
不知道为什么LCD屏幕老是乱码,哈。😟😟😟
求教一下,😍😍😍。