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

电子元件

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: ");
}


测试

在这里插入图片描述

  • 14
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值