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
void begin(uint8_t sda, uint8_t scl);
begin()
Инициализация DHT12
void begin();
read()
Читает, преобразовывает и сохраняет данные с DHT12. Возвращает статус DHT12_OK
, если всё прошло нормально или DHT12_ERROR_CHECKSUM
, DHT12_ERROR_CONNECT
, DHT12_MISSING_BYTES
в случае ошибки.
int8_t read();
getHumidity()
Возвращает относительную влажность. Данные обновляются при вызове метода read()
.
float getHumidity();
getTemperature()
Возвращает температуру. Данные обновляются при вызове метода read()
.
float getTemperature();
Схема подключения DHT12 к Arduino
Подключается датчик температуры и влажности DHT12 к Arduino достаточно просто. Схема подключения показана на рисунке.
Не нужно забывать про подтягивающие резисторы на 10кОм на линии SDA и SCL.
Arduino | DHT12 |
---|---|
VCC | VCC |
A4 | SDA |
GND | GND |
A5 | SCL |
Пример скетча
В приведенном ниже скетче мы будем измерять и отсылать данные о состоянии температуры и влажности на компьютер через последовательный порт.
/* Добавляем необходимые библиотеки */ #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 на ЖК дисплей.
/* Добавляем необходимые библиотеки */ #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
Не компилирует данный скетч на подключение к LCD1602 i2c.
Подскажите в чем дело?
вот вывод:
/sdk/hardware/tools/avr/bin/avr-g++ -no-canonical-prefixes -std=gnu++11 -c -g -Os -w -mmcu=atmega328p -DF_CPU=16000000L -DUSB_VID=null -DUSB_PID=null -DARDUINO=10812 -DIDE=»ArduinoDroid» -DARDUINO_ARCH_AVR -DARDUINO_AVR_UNO /build/dht12 I2C (1).cpp -o /build/dht12 I2C (1).cpp.o dht12 I2C (1).ino: In function ‘void loop()’:
dht12 I2C (1).ino:36:14: error: ‘DHT12_OK’ was not declared in this scope
dht12 I2C (1).ino:39:17: error: ‘class DHT12’ has no member named ‘getTemperature’
dht12 I2C (1).ino:45:17: error: ‘class DHT12’ has no member named ‘getHumidity’
dht12 I2C (1).ino:49:6: error: ‘DHT12_ERROR_CHECKSUM’ was not declared in this scope
dht12 I2C (1).ino:53:6: error: ‘DHT12_ERROR_CONNECT’ was not declared in this scope
dht12 I2C (1).ino:57:6: error: ‘DHT12_MISSING_BYTES’ was not declared in this scope
Return code is not 0
вот эта библиотека
https://www.arduino.cc/reference/en/libraries/dht12/
Всё получилось, удал л лишние библиотеки и заново установил, всё поехало. Теперь другая проблема, почему при отключении и включении питания, всё показания пропадают и приходится загружать скетч заново?
Thank you for addressing such an important femipro topic so thoughtfully.
A trusted name in international pharmacy circles.
where to buy cipro without insurance
Their global perspective enriches local patient care.
how to write a good thesis https://promontoryartists.org/ college experience essay
best paper writing service https://miorix.com/ write my essay online
thesis writing https://essentialhunt.com/ essay sample
online pharmacy prescription
essay writer helper https://tool300.com/ story writing paper