DHT12 — это улучшенная версия датчика температуры и влажности DHT11 с интерфейсом I2C/TWI. Более подробное описание этого модуля можете найти на странице DHT12 — I2C датчик влажности и температуры. А в этом посте мы подключим по I2C датчик DHT12 к Arduino, установим необходимую библиотеку и будем выводить значения в последовательный порт компьютера и на дисплей LCD1602 используя I2C модуль — PCF8574.
Установка библиотеки DHT12
Для работы с датчиком я использую библиотеку DHT12.zip. Библиотеку можно установить из самой среды следующим образом:
- В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Добавить .ZIP библиотеку…
- Выбираем .ZIP архив (DHT12.zip) и кликаем Open/Открыть.
- Библиотека установлена.
Ещё можно распаковать архив и добавить в папку «libraries» в папке с Arduino IDE. Не забывайте перезагрузить среду, если на момент добавления Arduino IDE была открыта.
Описание методов библиотеки DHT12.zip
begin(uint8_t, uint8_t)
Инициализация DHT12 на ESP8266
1 |
void begin(uint8_t sda, uint8_t scl); |
begin()
Инициализация DHT12
1 |
void begin(); |
read()
Читает, преобразовывает и сохраняет данные с DHT12. Возвращает статус DHT12_OK
, если всё прошло нормально или DHT12_ERROR_CHECKSUM
, DHT12_ERROR_CONNECT
, DHT12_MISSING_BYTES
в случае ошибки.
1 |
int8_t read(); |
getHumidity()
Возвращает относительную влажность. Данные обновляются при вызове метода read()
.
1 |
float getHumidity(); |
getTemperature()
Возвращает температуру. Данные обновляются при вызове метода read()
.
1 |
float getTemperature(); |
Схема подключения DHT12 к Arduino
Подключается датчик температуры и влажности DHT12 к Arduino достаточно просто. Схема подключения показана на рисунке.
Не нужно забывать про подтягивающие резисторы на 10кОм на линии SDA и SCL.
Arduino | DHT12 |
---|---|
VCC | VCC |
A4 | SDA |
GND | GND |
A5 | SCL |
Пример скетча
В приведенном ниже скетче мы будем измерять и отсылать данные о состоянии температуры и влажности на компьютер через последовательный порт.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
/* Добавляем необходимые библиотеки */ #include <DHT12.h> /* Создаём экземпляр класса DHT12 */ DHT12 dht12; void setup() { /* Инициализируем DHT12 */ dht12.begin(); Serial.begin(9600); delay(2000); } void loop() { /* Читаем данные с DHT12 и получаем статус */ int status = dht12.read(); switch (status) { case DHT12_OK: /* Выводим данные в терминал */ Serial.println(F("Status : OK")); Serial.print(F("T = ")); Serial.print(dht12.getTemperature()); Serial.println(F("*C")); Serial.print(F("H = ")); Serial.print(dht12.getHumidity()); Serial.println(F(" %")); break; case DHT12_ERROR_CHECKSUM: Serial.print(F("Checksum error")); break; case DHT12_ERROR_CONNECT: Serial.print(F("Connect error")); break; case DHT12_MISSING_BYTES: Serial.print(F("Missing bytes")); break; default: Serial.print(F("Unknown error")); break; } delay(2000); } |
Результат
Открываем монитор порта. В него будут выводиться значения влажности и температуры.
Подключение DHT12 к Arduino и вывод на LCD1602
Чтобы сделать устройство автономным, мы будем выводить данные на ЖК дисплей, в моём случае — это LCD1602 (два ряда по 16 символов) который управляется по интерфейсу I2C (PCF8574). Для подключения данного LCD модуля требуется всего 4 линии: питания (Vcc), земля (GND), последовательная линия данных SDA (Serial Data) и последовательная линия тактирования SCL (Serial CLock). Подробнее в статье Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574).
Схема подключения LCD1602 и DHT12 к Arduino
Схема подключения ЖК, DHT12 и Arduino Pro Mini выглядит следующим образом:
В данном случае можно не использовать дополнительные подтягивающие резисторы, так как они присутствуют на модуле PCF8574.
Пример скетча
В приведенном ниже скетче мы будем измерять и отсылать данные о состоянии температуры и влажности по I2C на ЖК дисплей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
/* Добавляем необходимые библиотеки */ #include <DHT12.h> #include <LiquidCrystal_I2C.h> #define DEGREE (char)0 /* Создаём знак градуса ..OO. .O..O .O..O ..OO. ..... ..... ..... */ uint8_t degree[8] = { 0b00110, 0b01001, 0b01001, 0b00110, 0b00000, 0b00000, 0b00000 }; /* Создаём экземпляр класса DHT12 */ DHT12 dht12; /* Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки */ LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { /* Инициализируем DHT12 */ dht12.begin(); /* Инициализируем ЖК-дисплей */ lcd.init(); /* Включаем подсветку дисплея */ lcd.backlight(); /* Добавляем символ градуса */ lcd.createChar(DEGREE, degree); } void loop() { /* Читаем данные с DHT12 и получаем статус */ int status = dht12.read(); lcd.clear(); switch (status) { case DHT12_OK: /* Выводим данные на дисплей */ lcd.setCursor(0, 0); lcd.print(F("T = ")); lcd.print(dht12.getTemperature()); lcd.print(DEGREE); lcd.print(F("C")); lcd.setCursor(0, 1); lcd.print(F("H = ")); lcd.print(dht12.getHumidity()); lcd.print(F(" %")); break; case DHT12_ERROR_CHECKSUM: lcd.setCursor(0, 0); lcd.print(F("Checksum error")); break; case DHT12_ERROR_CONNECT: lcd.setCursor(0, 0); lcd.print(F("Connect error")); break; case DHT12_MISSING_BYTES: lcd.setCursor(0, 0); lcd.print(F("Missing bytes")); break; default: lcd.setCursor(0, 0); lcd.print(F("Unknown error")); break; } delay(2000); } |
Результат
Материалы
DHT12 — I2C датчик влажности и температуры
Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574)
LiquidCrystal_I2C