Arduino + TFT显示室内温湿度(DHT11)
电子元件
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库)。

接线
DHT11 | Arduino UNO |
---|
VCC(+) | 3.3V或5V |
GND(-) | GND |
out | D2 |
ST7735 | Arduino UNO |
---|
GND | GND |
VCC | 3.3V或5V |
SCL | D13 |
SDA | D11 |
RES | D8 |
DC | D9 |
CS | D10 |
BLK | D7 |
代码
#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <Adafruit_ST7789.h>
#define DHTPIN 2
#define DHTTYPE DHT11
#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);
tft.initR(INITR_144GREENTAB);
pinMode(TFT_BLK, OUTPUT);
digitalWrite(TFT_BLK, HIGH);
tft.fillScreen(ST7735_BLACK);
printTFT();
dht.begin();
}
void loop() {
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
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();
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("%");
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: ");
}
测试
