温湿度DHT11+LCD1602-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7810|回复: 13

温湿度DHT11+LCD1602

[复制链接]
发表于 2019-7-20 15:10 | 显示全部楼层 |阅读模式
(本人常年潜水,最近做一个小东西,有兴趣的小伙伴可以做一做)
利用 DHT11 + LCD1602 做的一个温湿度传感器。
dht库下载  百度网盘分享地址:
链接:https://pan.baidu.com/s/1vb8bAFagZ93LPUOjM_sv-Q
提取码:pfag
下面这段程序是集合了很多个温湿度程序提出来,算是比较简单的吧!
(代码奉上

#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);  //定义显示屏接脚位
#include <dht11.h>
#include <Wire.h>
dht11 DHT;
#define DHT11_PIN 8
void setup()                                                                                    
{
  lcd.begin(16,2); //设置LCD显示的数目。16 X 2:16列2行。
  Serial.begin(9600);// 设置串口波特率9600
  Serial.println("Type,\tHumidity(%),\tTemperature(C)");//串口输出”Type, status, Humidity(%), Temperature(C)”
}
void loop()
{
  float chk;//chk用于存储DHT11传感器的数据
  Serial.print("DHT11 \t");
  chk = DHT.read(DHT11_PIN);//读取DHT11传感器的数剧                                                  
//串口显示温湿度值
   Serial.print(DHT.humidity,1);
   Serial.print("\t");
   Serial.println(DHT.temperature,1);
//  lcd.setCursor(0,1);  //将闪烁的光标设置到column 0, line 1 (注释:从0开始数起,line 0是显示第一行,line 1是第二行。)
//  lcd.print(millis()/1000); //开机后屏幕现实以秒计时的时间
lcd.setCursor(0,0);
lcd.print("Humidity:");//在lcd第一行显示"Humidity(%)"
lcd.print((float)DHT.humidity,1);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Temperature:");//在lcd第二行显示"Temperature(C)"
lcd.print((float)DHT.temperature,1);
lcd.print("C");
delay(1000);
}

IMG20190720145510.jpg
IMG20190720145334.jpg
1563168642922.jpeg
IMG20190716104055.jpg
IMG20190720145510.jpg
发表于 2019-7-20 15:57 | 显示全部楼层
建议使用spi的LCD1602,这样可以省下板子上的很多端口
发表于 2019-7-20 15:57 | 显示全部楼层
本帖最后由 ryc 于 2019-7-20 16:00 编辑

#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);  //定义显示屏接脚位
#include <dht11.h>
#include <Wire.h>
dht11 DHT;
#define DHT11_PIN 8
void setup()                                                                                    
{ uint8_t c[8]={0x1C,0x14,0x18,0x06,0x09,0x08,0x09,0x06,};
  lcd.begin(16,2); //设置LCD显示的数目。16 X 2:16列2行。
  Serial.begin(9600);// 设置串口波特率9600
  Serial.println("Type,\tHumidity(%),\tTemperature(C)");//串口输出”Type, status, Humidity(%), Temperature(C)”
}
void loop()
{
   lcd.createChar(0,c);
   float chk;//chk用于存储DHT11传感器的数据
   Serial.print("DHT11 \t");
   chk = DHT.read(DHT11_PIN);//读取DHT11传感器的数剧                                                  
    //串口显示温湿度值
    Serial.print(DHT.humidity,1);
    Serial.print("\t");
    Serial.println(DHT.temperature,1);
     //  lcd.setCursor(0,1);  //将闪烁的光标设置到column 0, line 1 (注释:从0开始数起,line 0是显示第一行,line 1是第二行。)
     //  lcd.print(millis()/1000); //开机后屏幕现实以秒计时的时间
     lcd.setCursor(0,0);
     lcd.print("Humidity:");//在lcd第一行显示"Humidity(%)"
     lcd.print((float)DHT.humidity,1);
     lcd.print("%");
     lcd.setCursor(0,1);
     lcd.print("Temperature:");//在lcd第二行显示"Temperature(C)"
     lcd.print((float)DHT.temperature,1);
     lcd.write(byte(0));
     delay(1000);
}

发表于 2019-7-20 15:58 | 显示全部楼层
稍微改一下,那个c太扎眼:)
发表于 2019-7-20 16:18 | 显示全部楼层
Creeper666 发表于 2019-7-20 15:57
建议使用spi的LCD1602,这样可以省下板子上的很多端口

我觉得这种项目不用spi
原因:
1、他不需要增加后续模块,多出来的端口没有用
2、spi虽然只有四根io线,但是速度要低很多
 楼主| 发表于 2019-7-20 17:07 | 显示全部楼层
Creeper666 发表于 2019-7-20 15:57
建议使用spi的LCD1602,这样可以省下板子上的很多端口

我去试试看看
发表于 2019-7-20 17:24 | 显示全部楼层
ryc 发表于 2019-7-20 16:18
我觉得这种项目不用spi
原因:
1、他不需要增加后续模块,多出来的端口没有用

spi只有四根线,两根电源两根数据,接线更方便;况且这个项目只显示温湿度,对数据刷新要求又不是很高,spi速度足够了
发表于 2019-7-20 17:34 | 显示全部楼层
Creeper666 发表于 2019-7-20 17:24
spi只有四根线,两根电源两根数据,接线更方便;况且这个项目只显示温湿度,对数据刷新要求又不是很高,s ...

这位兄台,请你看看,spi总共是六根线,iic是四根线
对于刷新速度,我发现需求不是很大,再快了,连lcd都刷新不过来,好像没有必要用普通接线。
(iic还是可以用滴)
谢谢您
发表于 2019-7-20 20:15 | 显示全部楼层
Creeper666 发表于 2019-7-20 15:57
建议使用spi的LCD1602,这样可以省下板子上的很多端口

zhi pei同学,被怼了吧,好好学习不听
发表于 2019-7-20 20:16 | 显示全部楼层
ryc 发表于 2019-7-20 17:34
这位兄台,请你看看,spi总共是六根线,iic是四根线
对于刷新速度,我发现需求不是很大,再快了,连lcd都 ...

都可以的,没关系,不用这么计较。当然程序有点问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 11:34 , Processed in 0.102751 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表