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.
online pharmacy prescription
sildenafil dosages
canadian pharmacy presription and meds
купить аккаунт заработок на аккаунтах
Account Acquisition Sell Pre-made Account
Accounts marketplace Account Selling Service
Account Purchase Account Selling Service
prices for viagra
Buy accounts https://buyaccounts001.com
sildenafil citrate 100mg coupons
viagra reddit
account trading platform account selling service
marketplace for ready-made accounts verified accounts for sale
buy and sell accounts account buying service
secure account purchasing platform social media account marketplace
website for buying accounts account trading platform
database of accounts for sale account buying platform
account store guaranteed accounts
database of accounts for sale secure account purchasing platform
gaming account marketplace website for buying accounts
gaming account marketplace account trading
account catalog https://best-social-accounts.org/
secure account sales accounts marketplace
account marketplace buy pre-made account
sell pre-made account account market
account purchase account selling service
account sale account market
account marketplace accounts marketplace
account trading platform account market
generic tadalafil: cheap Cialis online — reliable online pharmacy Cialis
safe online pharmacy: same-day Viagra shipping — Viagra without prescription
legal Modafinil purchase purchase Modafinil without prescription doctor-reviewed advice
purchase Modafinil without prescription: purchase Modafinil without prescription — safe modafinil purchase
http://modafinilmd.store/# buy modafinil online