Arduino + TFT显示室内温湿度(DHT11)

该文章介绍了如何使用ArduinoUNO配合DHT11温湿度传感器及1.44英寸TFT显示屏(ST7735)来显示室内温湿度。文章详细列出了所需库、接线方式以及相关代码,包括DHT传感器的初始化和读取,以及TFT屏幕的内容绘制。代码中还包括了错误处理和数据显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

电子元件

Arduino UNO

Arduino UNO开发板

DHT11温湿度传感器

在这里插入图片描述

1.44’TFT显示屏(ST7735)

在这里插入图片描述

_DHT11
温度范围0至50ºC +/- 2ºC
湿度范围20至90% +/- 5%
解析度湿度:1% 温度:1ºC
工作电压3 – 5.5 V直流
供电0.5 – 2.5毫安
采样期1秒

依赖库

DHT.h

导入DHT库:依次点击Tools->Manage libraies->搜索DHT,安装下图所示的DHT库。DHT库里包含了DHT11传感器相关的函数。

在这里插入图片描述

Adafruit_GFX.h

在这里插入图片描述

Adafruit_ST7735.h和Adafruit_ST7789.h

Adafruit_ST7735.h和Adafruit_ST7789.h这两个头文件均在下图所示的库中。
Adafruit_ST7735.h和Adafruit_ST7789.h里包含了TFT屏幕的相关函数,主要用来对TFT屏幕的显示内容进行操作。此外TFT_eSpi库也可以操作TFT屏幕,但是在这里不推荐使用TFT_eSpi库。因为使用TFT_eSpi库库后,声明TFT_eSpi对象时占用的空间太大,会导致程序大小超出Arduino UNO的容量,最终烧录失败。(若使用ESP8266芯片时可以使用TFT_eSpi库)。

在这里插入图片描述

接线

DHT11Arduino UNO
VCC(+)3.3V或5V
GND(-)GND
outD2
ST7735Arduino UNO
GNDGND
VCC3.3V或5V
SCLD13
SDAD11
RESD8
DCD9
CSD10
BLKD7

代码

#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <Adafruit_ST7789.h>

//定义DHT引脚
#define DHTPIN 2
#define DHTTYPE DHT11

//定义TFT引脚,Adafruit_ST7735.h头文件中默认SCL接D13,SDA接D11,故此处可以不用重复定义
// #define TFT_SCL 13
// #define TFT_SDA 11
#define TFT_RES 8
#define TFT_DC 9
#define TFT_CS 10
#define TFT_BLK 7

DHT dht(DHTPIN, DHTTYPE);
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RES);


void setup() {
  
  // 初始化串口
  
  Serial.begin(9600);
  // 1.44'tft屏需要此语句初始化!!!
  tft.initR(INITR_144GREENTAB);
  // 背光
  pinMode(TFT_BLK, OUTPUT);
  digitalWrite(TFT_BLK, HIGH);
  // 屏幕背景用黑色填充
  tft.fillScreen(ST7735_BLACK);
  // 输出屏幕上固定的文字
  printTFT();
  dht.begin();  // 启动传感器(千万不要忘记,否则结果会是nan)
}

void loop() {
  // 获取温度和湿度
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // 判断获取的结果不为nan才刷新屏幕
  if(isnan(temperature) || isnan(humidity)){
    tft.setTextSize(3);
    tft.setTextColor(ST7735_RED);
    tft.setCursor(40, 20);
    tft.print("NO");
    tft.setCursor(10, 50);
    tft.print("Sensor!");            
  }else{

    printTFT();
    // 设置ziti颜色、大小、游标(输出位置)
    tft.setTextColor(ST7735_RED);
    tft.setTextSize(2);
    tft.setCursor(60, 50);
    // 输出内容
    tft.print(temperature);

    tft.setTextColor(ST7735_BLUE);
    tft.setTextSize(2);
    tft.setCursor(60, 80);
    tft.print(humidity, 1);
    tft.setCursor(110, 80);
    tft.print("%");        
  }  
  
  
  // 串口输出调试
  Serial.print("temperature: ");
  Serial.print(temperature);
  Serial.print("\thumidity: ");
  Serial.print(humidity);
  Serial.println("%");
  // DHT11采样期为1s,为了避免无效数据,需要延时1~2s
  delay(1000);
  
  
}


void printTFT(){
  tft.fillScreen(ST7735_BLACK);
  tft.setTextColor(ST7735_GREEN);
  tft.setTextWrap(true);
  tft.setTextSize(3);
  tft.setCursor(40, 10);
  tft.print("GUI");

  tft.setTextColor(ST7735_RED);    
  tft.setTextSize(2);
  tft.setCursor(10, 50);
  tft.print("Tem: ");

  tft.setTextColor(ST7735_BLUE);    
  tft.setTextSize(2);
  tft.setCursor(10, 80);
  tft.print("Hum: ");
}


测试

在这里插入图片描述

### 关于DHT11温湿度传感器的显示方法 #### 连接教程 对于DHT11温湿度传感器,通常只需要三根线即可完成基本连接:电源(VCC),接地(GND)和数据(DATA)[^2]。具体来说: - DATA引脚需接入单片机的一个GPIO管脚用于通信。 为了提高信号质量,在DATA线路上建议并联一个约4.7kΩ到10kΩ之间的上拉电阻。 #### 示例代码 下面给出一段基于Arduino平台读取DHT11数值并通过串口监视器打印出来的简单例子[^1]: ```cpp #include "DHT.h" #define DHTPIN 2 // 定义DHT11的数据引脚所连接的数字IO编号 #define DHTTYPE DHT11 // 设置使用的型号为DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { delay(2000); // 延迟两秒等待下一次更新 float humidity = dht.readHumidity(); // 获取相对湿度百分比 float temperature = dht.readTemperature();// 获取摄氏度温度值 if (isnan(humidity) || isnan(temperature)) { // 如果返回NaN,则表示读数失败 Serial.println("Failed to read from DHT sensor!"); return; } int checkSumResult = verifyChecksum(dht.data); // 验证校验码是否正确 if(checkSumResult){ Serial.print("Humidity: "); Serial.print(humidity); Serial.print("% Temperature: "); Serial.print(temperature); Serial.println("°C"); }else{ Serial.println("Check sum failed."); } } // 自定义函数用来验证接收自DHT11的数据包中的检验位 int verifyChecksum(byte* data){ byte checksum=0; for(int i=0;i<4;i++){ checksum+=data[i]; } return checksum==data[4]?1:0; } ``` 此程序会每两秒钟尝试获取当前环境下的温湿度信息,并将其发送给电脑终端进行查看。注意这里还加入了简单的校验机制来确保收到的信息无误。 #### 数据展示的方法 当涉及到实际应用时,除了上述提到的基础功能外,还可以考虑利用LCD显示屏或其他形式的人机界面(HMI)设备更直观地呈现这些参数变化情况。比如可以使用IIC接口的小型字符液晶屏或者TFT彩屏等硬件组件配合相应的库文件轻松实现图形化输出效果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值