В этом уроке мы соберём простой монитор температуры и влажности на основе датчика DHT22 и дисплея LCD1602 с интерфейсом I²C. Устройство будет выводить показания на экран и дублировать их в монитор порта Arduino IDE.
DHT22:
LCD1602 I²C:
Перед запуском компиляции программного кода, убедитесь что следующие бибилиотеки установлены:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// === Настройки железа ===
#define DHTPIN 2 // Пин DATA у DHT22
#define DHTTYPE DHT22 // Тип датчика
const uint8_t LCD_ADDR = 0x27; // Адрес I2C дисплея (0x27 или 0x3F)
LiquidCrystal_I2C lcd(LCD_ADDR, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
// === Тайминги ===
const uint32_t READ_PERIOD_MS = 2000; // Интервал чтения DHT22, по умолчанию 2000 мс = 2 секунды.
uint32_t lastRead = 0;
void setup() {
Serial.begin(9600);
Serial.println(F("DHT22 + LCD1602 I2C — мониторинг"));
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("DHT22 Monitor"));
lcd.setCursor(0, 1);
lcd.print(F("Init..."));
dht.begin();
delay(1000);
}
void loop() {
uint32_t now = millis();
if (now - lastRead >= READ_PERIOD_MS) {
lastRead = now;
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(F("Sensor error"));
lcd.setCursor(0, 1);
lcd.print(F("Check wiring"));
Serial.println(F("Failed to read from DHT22!"));
return;
}
// Вывод в Serial
Serial.print(F("T="));
Serial.print(t, 1);
Serial.print(F("C H="));
Serial.print(h, 1);
Serial.println(F("%"));
// Вывод на дисплей
lcd.setCursor(0, 0);
lcd.print(F("T: "));
printPaddedFloat(lcd, t, 4, 1);
lcd.print((char)223); // символ °
lcd.print(F("C "));
lcd.setCursor(0, 1);
lcd.print(F("H: "));
printPaddedFloat(lcd, h, 4, 1);
lcd.print(F("% "));
}
}
// Функция для аккуратного вывода числа фиксированной ширины
void printPaddedFloat(LiquidCrystal_I2C &lcdRef, float value, uint8_t width, uint8_t decimals) {
char buf[16];
dtostrf(value, width, decimals, buf);
lcdRef.print(buf);
}
printPaddedFloat
, которая «добивает» значения пробелами, чтобы старые цифры не оставались на экране.✦ Теперь у вас есть полноценная мини-метеостанция на Arduino!