Подключение I2C датчика температуры и влажности DHT12 к Arduino и вывод данных на LCD1602 HD44780

DHT12 — это улучшенная версия датчика температуры и влажности DHT11 с интерфейсом I2C/TWI. Более подробное описание этого модуля можете найти на странице DHT12 — I2C датчик влажности и температуры. А в этом посте мы подключим по I2C датчик DHT12 к Arduino, установим необходимую библиотеку и будем выводить значения в последовательный порт компьютера и на дисплей LCD1602 используя I2C модуль — PCF8574.

Установка библиотеки DHT12

Для работы с датчиком я использую библиотеку DHT12.zip. Библиотеку можно установить из самой среды следующим образом:

  1. В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Добавить .ZIP библиотеку…Подключение I2C датчика температуры и влажности DHT12 к Arduino - Добавить .ZIP библиотеку...
  2. Выбираем .ZIP архив (DHT12.zip) и кликаем Open/Открыть.Подключение I2C датчика температуры и влажности DHT12 к Arduino - Выбор архива .ZIP
  3. Библиотека установлена.Подключение I2C датчика температуры и влажности DHT12 к Arduino - Библиотека Добавлена.

Ещё можно распаковать архив и добавить в папку «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 достаточно просто. Схема подключения показана на рисунке.

Схема подключения DHT12 к Arduino Pro MiniНе нужно забывать про подтягивающие резисторы на 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);
}

Результат

Открываем монитор порта. В него будут выводиться значения влажности и температуры.

Подключение I2C датчика температуры и влажности DHT12 к Arduino - Результат

Подключение 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 выглядит следующим образом:

Схема подключения I2C PCF8574 LCD1602 и DHT12 к ArduinoВ данном случае можно не использовать дополнительные подтягивающие резисторы, так как они присутствуют на модуле 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 к Arduino и вывод на LCD1602 - Результат

Материалы

DHT12 — I2C датчик влажности и температуры
Подключение LCD1602 к Arduino по I2C (HD44780/PCF8574)
LiquidCrystal_I2C

Похожие записи

Комментарии 10

Добавить комментарий для Алексей Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *