Взаимодействие dht11 dht22 с esp8266 nodemcu с использованием веб-сервера

Комплект подключения

Для подключения можно использовать микроконтроллер Arduino UNO, компактную плату NANO или MEGA – для больших решений. Комплект подключения №1 следующий:

  1. Плата Arduino UNO.
  2. Датчик
  3. Резистор 4,7 кОм.
  4. Беспечная макетная плата.
  5. Проводники для соединения элементов.

Комплект подключения №2:

  1. Плата Ардуино Уно, можно нано.
  2. Модуль
  3. Проводники со штекерами для Arduino.

Комплект подключения №3:

  1. Плата Ардуино Уно.
  2. Модуль
  3. LCD-дисплей.
  4. Проводники со штекерами для Arduino.
  5. Переходник для питания 2 в 1.

Последний комплект сможет не только замерить, но и вывести данные на экран без подключения к компьютеру. То есть, работать автономно.

Доступ к веб-серверу

После загрузки скетча откройте монитор последовательного порта со скоростью 115200 бит/с и нажмите кнопку RESET на NodeMCU. Если всё в порядке, он выведет динамический IP адрес, полученный от вашего маршрутизатора, и покажет сообщение о том, что HTTP сервер запущен.

Рисунок 5 – Монитор последовательного порта – сервер запущен

Затем загрузите браузер и введите IP адрес, указанный в мониторе последовательного порта. ESP8266 NodeMCU должен выдать веб-страницу, показывающую температуру и относительную влажность.

Рисунок 6 – Веб-страница с температурой и влажностью с датчика DHT11/DHT22/AM2302 на веб-сервере ESP8266 (без CSS)

Терморегулятор своими руками: схема

Про конструкцию термостата можно сказать, что она не особа сложна, именно по этой причине большинство радиолюбителей начинают свое обучение именно с этого прибора, а так же именно на нем оттачивают свои навыки и мастерство. Схем прибора можно найти очень большое количество, но самой распространенной является схема с применением, так называемого компаратора.

Данный элемент имеет несколько входов и выходов:

  • Один вход отвечает подачу эталонного напряжения, которое отвечает необходимой температуре;
  • Второй получает напряжения от датчика температуры.

Сам компаратор принимает все поступающие показания и сравнивает их. В случае если будет генерировать сигнал на выходе, то он включит реле, которое подаст ток на обогревательный или холодильный аппарат.

Принцип процесса

DHT11/DHT22 troubleshooting guide

When working with these sensors, you might get the following error messages:

“Failed to read from DHT sensor!”

This message can appear in the serial monitor when the sensor does not return a reading. This can have several causes:

  • Sensor type: Make sure you have uncommented the correct DHTTYPE in the code setup. Check the example above.
  • Sampling rate: The DHT sensors are quite slow, the maximum sampling rate is around 2 seconds. Increasing the delay between measurements might solve this error.
  • Power: Although the DHTxx sensors can work from 3.3 to 5 V, the manufacturer recommends 5 V. In some cases, powering the sensor with 5 V solves the problem. Make sure that your microcontroller also supports 5 V on the GPIO pins.

Fatal error: Adafruit_Sensor.h: No such file or directory

You might get this error when you try to compile the code. This means that you did not (properly) install the Adafruit Unified Sensor library.

Just scroll up a bit in this post and you will see where and how you can download and install the library.

Датчик температуры и влажности DHT11

Существует семейство датчиков влажности и температуры DHT (DHT11, DHT22 и др.), которые используются для построения домашней метеостанции. Одновременно измерять температуру и относительную влажность выглядит оправданным, поскольку второе напрямую зависит от первого. Так, повышение температуры батарей центрального отопления приводит к уменьшению относительной влажности воздуха.

Считается, что оптимальное значение влажности около 50% — именно при такой влажности растения, люди и животные чувствуют себя комфортно.

Датчик температуры и влажности DHT11 является дешёвым датчиком, который удобно использовать в домашних условиях в учебных целях. Он не обеспечивает точные показания и имеет ограниченный диапазон измерений. Но тем не менее, он очень популярен из-за своей простоты. Существуют более дорогие аналоги, в частности его старший брат DHT22.

Датчики DHT состоят из двух основных частей: ёмкостный датчик влажности и термистор. Также в корпусе установлен простенький чип для преобразования аналогового сигнала в цифровой. Считывать цифровой сигнал на выходе достаточно просто, можно использовать любой контроллер, не только Arduino.

Технические характеристики

  • Питание от 3 до 5В
  • Максимально потребляемый ток — 2.5мА при преобразовании (при запросе данных)
  • Рассчитан на измерение уровня влажности в диапазоне от 20% до 80%. Точность измерений в диапазоне 5%
  • Измеряет температуру в диапазоне от 0 до +50 градусов с точностью ±2°C
  • Частота измерений не более 1 Гц (одно измерение в секунду)
  • Размер корпуса: 15.5 мм x 12 мм x 5.5 мм

Сам датчик представляет собой синий прямоугольник с решёткой. Имеет четыре ножки, одна из которых (третья) не используется. Ножки имеют стандартное расстояние между собой и прибор легко устанавливается на макетную плату.

  1. VCC — Питание от 3 до 5 В
  2. DATA (OUT) — Вывод данных
  3. NC — Не подключается
  4. GND — Земля

При подключении используйте подтягивающий резистор к VCC и рекомендуется конденсатор (фильтр по питанию между VCC и GND).

Подключение датчика DHT11, DHT22/AM2302 к плате ESP8266 NodeMCU

Подключить датчик DHT11/DHT22/AM2302 к ESP8266 NodeMCU довольно просто. Начните с установки NodeMCU на макетную плату, чтобы каждая сторона платы NodeMCU была на отдельной стороне макетной платы.

Теперь установите датчик на макетную плату, в стороне от NodeMCU. Подключите вывод VCC датчика к выводу 3,3V на NodeMCU и соедините выводы земли датчика и платы. Также подключите вывод данных датчика к выводу D8 платы ESP8266 NodeMCU. Наконец, нам нужно установить подтягивающий резистор 10 кОм между линией VCC и линией данных, чтобы на ней поддерживался высокий логический уровень для корректной связи между датчиком и NodeMCU. Если у вас датчик установлен на отдельную плату, возможно, вам не нужно добавлять какие-либо внешние подтягивающие резисторы. В этом случае датчик поставляется уже со встроенным подтягивающим резистором.

Когда вы закончите, у вас должно получиться что-то похожее на рисунок ниже.

Рисунок 1 – Подключение DHT11, датчика температуры и влажности, к ESP8266 NodeMCUРисунок 2 – Подключение DHT22, датчика температуры и влажности, к ESP8266 NodeMCU

Характеристики модуля KY-001.

Модуль датчика температуры KY-001 состоит из цифрового датчика температуры DS18B20, светодиода и резистора. Модуль совместим с популярными электронными платформами, такими как Arduino, Raspberry Pi и Esp8266.

  • Собран на цифровом сенсоре DS18B20, напряжение питания от 3.0 V до 5.5 V.
  • Измеряемая температура -55 ° C до +125 ° C, по Фаренгейту — 67 ° F до 257 ° F.
  • В диапазоне от -10 °C до +85 ° C точность измерения ± 0.5 ° C.
  • Время измерения не более 750 миллисекунд.

Каждый DS18B20 имеет уникальный номер, что позволяет подключить к одной шине большое количество датчиков.

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Схема подключения модуля KY-001 (DS18B20) к Arduino NANO.

Схема подключения модуля KY-001 (DS18B20) к Arduino.

Подключите линию питания (посередине) c к +5 Arduino, землю (-) и GND соответственно. Подключите сигнал (S) к контакту 2 на Arduino.

Подключение (слева направо)

  • GND
  • +5V
  • S — Signal, в примере подключаем ко 2 выводу arduino

Скетч вывода температуры с модуля KY-001 (DS18B20) в монитор порта.

Код ниже будет выводить показания температуры с модуля KY-001 (DS18B20) в монитор последовательного порта каждую секунду.

#include <OneWire.h>
OneWire ds(2);
void setup() {
    Serial.begin(9600);
}
void loop() {
    byte i;
    byte data;
    byte addr;
    float celsius;
    // поиск датчика
    if ( !ds.search(addr)) {
        ds.reset_search();
        delay(250);
        return;
    }
    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1); // измерение температуры
    delay(1000);
    ds.reset();
    ds.select(addr); 
    ds.write(0xBE); // начало чтения измеренной температуры
    //показания температуры из внутренней памяти датчика
    for ( i = 0; i < 9; i++) {
        data = ds.read();
    }
    int16_t raw = (data << 8) | data;
    // датчик может быть настроен на разную точность, выясняем её 
    byte cfg = (data & 0x60);
    if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс
    else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс
    else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс
    // преобразование показаний в градусы Цельсия 
    celsius = (float)raw / 16.0;
    Serial.print("t=");
    Serial.println(celsius);
}

Вот такой результат мы увидим в мониторе порта.

Данный пример достаточно сложный для понимания. Для упрощения работы с датчиком лучше использовать библиотеку DallasTemperature.h. Данная библиотека ставится поверх OneWire.h, т.е. для ее работы должна быть установлена библиотека OneWire.

С библиотекой DallasTemperature устанавливаются примеры. Вы можете воспользоваться любым из них.

Мы рассмотрим более простотой пример, который я взял из библиотеки, и немного его упростил.

#include <OneWire.h>
#include <DallasTemperature.h>
// контакт 2 на Arduino:
#define ONE_WIRE_BUS 2
// создаем экземпляр класса OneWire, чтобы с его помощью
// общаться с однопроводным устройством
OneWire oneWire(ONE_WIRE_BUS);
// передаем объект oneWire объекту sensors:
DallasTemperature sensors(&oneWire);
void setup(void)
{
  Serial.begin(9600);
  // запускаем библиотеку:
  sensors.begin();
}
void loop(void){
  // вызываем функцию sensors.requestTemperatures(),
  // которая приказывает всем устройствам, подключенным к шине
  sensors.requestTemperatures();
  Serial.print("Celsius temperature: ");
  //  в Цельсиях:
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print(" - Fahrenheit temperature: ");
  //  в Фаренгейтах:
  Serial.println(sensors.getTempFByIndex(0));
  delay(1000);
}

В данном примере температура выводится 1 раз в секунду, и при этом выводится температура в Цельсиях и Фаренгейтах в монитор последовательного порта.

Как видите, данный пример намного меньше и более понятен для новичка.

KY-001датчик температуры DS18B20 к ArduinoKY-001

Купить модуль KY-001 можно тут:

Описание всех датчиков из набора «37 in 1 Sensors Kit for Arduino» вы можете посмотреть на странице описания данного набора модулей для Arduino.

Понравился Урок KY-001 модуль температуры на базе DS18B20. Подключение Arduino? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу , в группу на .

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.

Модуль KY-001 датчика температуры DS18B20.pdf 82 Kb 39 Скачать
Скетч вывода температуры с модуля KY-001 .ino 1 Kb 39 Скачать
Код с использованием бмблиотеки DallasTemperature.h.ino 1 Kb 40 Скачать
Библиотека DallasTemperature .zip 31 Kb 47 Скачать

Hardware

Pull-up resistor DAT pin

  • Connect an external pull-up resistor between the and pins only when:
  • The DHT22 breakout PCB contains a pull-up resistor between and .
  • Please refer to the MCU datasheet or board schematic for more information about IO pin pull-up resistors.

External capacitor

Tip: Connect a 100nF capacitor between the sensor pins VCC and GND when read errors occurs. This may stabilize the power supply.

Board — DHT22 pins VCC GND DAT
Arduino UNO / Nano / Micro (ATMega328 boards) 5V (or 3V3) GND 2 (DIGITAL pin)
Arduino Leonardo 5V (or 3V3) GND 2 (DIGITAL pin)
Arduino Mega2560 5V (or 3V3) GND 2 (DIGITAL pin)
Arduino DUE (ATSAM3X8E) 3V3 GND 2 (DIGITAL pin)
ESP8266 (ESP12E / WeMos D1 R2 / NodeMCU v2 or v3) 3V3 GND GPIO4 (D2)
ESP32 (WeMos Lolin32 OLED / WeMos LOLIN D32) 3V3 GND GPIO4

Notes:

  • uses sketch pin number and is labeled as on some WeMos ESP8266 boards.
  • Other MCU’s may work, but are not tested.

DHT11 and DHT22 Temperature and Humidity Sensors

The DHT11 and DHT22 sensors are used to measure temperature and relative humidity. These are very popular among makers and electronics hobbyists.

These sensors contain a chip that does analog to digital conversion and spit out a digital signal with the temperature and humidity. This makes them very easy to use with any microcontroller.

If you’re looking to use these sensors with the Arduino board, you can read the following tutorial:

Guide for DHT11/DHT22 Humidity and Temperature Sensor with Arduino

DHT11 vs DHT22

The DHT11 and DHT22 are very similar, but differ in their specifications. The following table compares some of the most important specifications of the DHT11 and DHT22 temperature and humidity sensors. For a more in-depth analysis of these sensors, please check the sensors’ datasheet.

DHT11
DHT22
Temperature range 0 to 50 ºC +/-2 ºC -40 to 80 ºC +/-0.5ºC
Humidity range 20 to 90% +/-5% 0 to 100% +/-2%
Resolution Humidity: 1%Temperature: 1ºC Humidity: 0.1%Temperature: 0.1ºC
Operating voltage 3 – 5.5 V DC 3 – 6 V DC
Current supply 0.5 – 2.5 mA 1 – 1.5 mA
Sampling period 1 second 2 seconds
Price $1 to $5 $4 to $10
Where to buy Check prices Check prices

The DHT22 sensor has a better resolution and a wider temperature and humidity measurement range. However, it is a bit more expensive, and you can only request readings with 2 seconds interval.

The DHT11 has a smaller range and it’s less accurate. However, you can request sensor readings every second. It’s also a bit cheaper.

Despite their differences, they work in a similar way, and you can use the same code to read temperature and humidity. You just need to select in the code the sensor type you’re using.

Wrapping Up

In this tutorial we’ve shown you how to build an asynchronous web server with the ESP32 to display sensor readings from a DHT11 or DHT22 sensor and how to update the readings automatically.

If you liked this project, you may also like:

  • Learn ESP32 with Arduino IDE (course)
  • Build an ESP32 Web Server using Files from Filesystem (SPIFFS)
  • ESP32 Web Server – control outputs
  • ESP32 Deep Sleep with Arduino IDE and Wake Up Sources

This tutorial is a preview of the “Learn ESP32 with Arduino IDE” course. If you like this project, make sure you take a look at the ESP32 course page where we cover this and a lot more topics with the ESP32.

Библиотека для DHT

Измерим температуру и влажность воздуха при помощи датчика DHT11.

Следует подключить подтягивающий резистор на 10 кОм между питанием и сигналом. У меня такого не оказалось, я подключил резистор на 2.2 кОм, вроде не сгорело. Для датчика DHT22 резистор не обязателен.

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

Следует помнить, что один датчик будет использовать строго один цифровой пин, поэтому при сложной конструкции из нескольких датчиков учитывайте данное обстоятельство.

У меня получилась следующая схема.

Первую ножку датчика соедините с питанием на 5В (красный провод), вторую — с пином номер 2, третью пропускаем, а четвёртую соединяем с GND (чёрный провод). Также вставляем на плату резистор — одна ножка соединяется с первой ножкой датчика, а вторая со второй.

Следующий шаг — установка библиотеки. В сети существует много библиотек для данного датчика. Популярна библиотека GitHub — adafruit/DHT-sensor-library: Arduino library for DHT11DHT22, etc Temp & Humidity Sensors. Скачиваем архив и переименовываем папку в DHT, папку размещаем в общей папке для библиотек Arduino libraries.

Второй и удобный способ — установка через менеджер библиотек. Открываем Tools | Manage Libraries… и в поиске диалогового окна вводим DHT. Найдётся несколько библиотек, выбираем библиотеку от Adafruit. Устанавливайте версию 1.2.3. Если вы будете устанавливать версию 1.3.0 или выше, то вам придётся также установить ещё библиотеку Adafruit Unified Sensor, без неё скетч не будет компилироваться.

После установки библиотеки, запускаем IDE и находим пример File | Examples | DHT sensor library | DHTtester.

Скетч по умолчанию рассчитан на датчик DH22, поэтому вам нужно сначала закомментировать строчку #define DHTTYPE DHT22 и снять комментарий с строчки #define DHTTYPE DHT11.

Полностью скетч выглядит следующим образом.

Запускаем скетч и наблюдаем за результатами в Serial Monitor. Датчик считается очень медленным, поэтому не следует делать слишком маленькую задержку, в примере используется пауза на две секунды.

Пример проверялся летом в жаркий день. Результаты вполне правдоподобны. Если подышать на датчик (помните в детстве мы дышали на стекло?), то влажность увеличится (и температура). Через какое-то время показания будут медленно возвращаться к первоначальным.

В составе библиотеки также есть файл с именами функций.

DHT
Класс датчика. Объявляем объект класса: DHT dht(DHTPIN, DHTTYPE);. В первом параметре объявляем пин, во втором — тип датчика
begin()
Запускаем датчик
readTemperature()
Без параметров функция измеряет в градусах Цельсия. Вызов readTemperature(true) вернёт значения в градусах Фаренгейта
convertCtoF()
Конвертирует из одной системы в другую
convertFtoC()
Конвертирует из одной системы в другую
computeHeatIndex()
Выводит индекс жары. По умолчанию используется индекс на основе градусов Фаренгейта, где нужно указать градусы и влажность. Для температуры по Цельсию нужно указывать три параметра computeHeatIndex(t, h, false)
readHumidity()
Функция для измерения влажности
read()
Что-то считывает

Дополнительные материалы для DHT

Fritzing-Library/DHT11 Humitidy and Temperature Sensor.fzpz at master · adafruit/Fritzing-Library · GitHub — в составе Fritzing нет датчика DH11. Скачайте данный файл и перетащите его на окно программы. Теперь вы сможете составлять схемы с его участием (смотри мой скриншот выше). В программе он будет находиться в разделе MINE.

Датчик температуры и влажности DHT11 (DHT22) — здесь дана дополнительная информация о работе датчика в модульном исполнении, ссылка на даташиты, примеры кода без библиотеки, графики.

winlinvip/SimpleDHT: Simple, Stable and Fast Arduino Temp & Humidity Sensors for DHT11 and DHT22 — ещё одна библиотека. Доступна через менеджер библиотек.

Протокол датчика DHT

Выходом датчика является цифровой сигнал. Температура и влажность передаются по одному сигнальному проводу (). DHT21 общается с принимающей стороной, такой как Arduino по собственному протоколу. Коммуникация двунаправлена и в общих чертах выглядит так:

  1. Микроконтроллер говорит о том, что хочет считать показания. Для этого он устанавливает сигнальную линию в 0 на некоторое время, а затем устанавливает её в 1
  2. Сенсор подтверждает готовность отдать данные. Для этого он аналогично сначала устанавливает сигнальную линию в 0, затем в 1
  3. После этого сенсор передаёт последовательность 0 и 1, последовательно формирующих 5 байт (40 бит). В первых двух байтах передаётся температура, в третьем-четвёртом — влажность, в пятом — контрольная сумма, чтобы микроконтроллер смог убедиться в отсутствии ошибок считывания

Благодаря тому, что сенсор делает измерения только по запросу, достигается энергоэффективность: пока общения нет, датчик потребляет ток 100 мкА.

Датчик DHT21

Цифровой датчик DHT21 является составным датчиком, который выдаёт калиброванный цифровой сигнал с показаниями температуры и влажности.

Сенсор включает в себя ёмкостной компонент измерения влажности и резистивный компонент измерения температуры с отрицательным температурным коэффициентом (NTC), которые подключены к высокопроизводительному АЦП.

Каждый датчик DHT21 проходит калибровку на заводе изготовителе. Коэффициенты калибровки хранятся в однократно программируемой энергонезависимой памяти и используются во внутренних процессах обработки сигнала.

Контакты подключения трёхпроводного шлейфа

Модуль подключается к управляющей электронике по трём проводам.
Назначение контактов 3-проводного шлейфа:

  • Питание () — красный провод. На него должно подаваться напряжение питания от 3,3 до 5 В;
  • Земля () — чёрный провод. Должен быть соединён с землёй микроконтроллера;
  • Сигнальный () — жёлтый провод. Подключается к цифровому выходу микроконтроллера. Через него сенсор общается с микроконтроллером по собственному протоколу.

DHT22

По форм-фактору датчик похож на своего собрата. Может встречаться название Aosong AM2302.

Более точный датчик DHT22 имеет преимущества перед DHT11.

Диапазон температур от -40° до +80° (сравните с 0°..+50°). Точность измерений в диапазоне ±0.5°

Уровень влажности 0-99.9%. Точность измерений в диапазоне 2-4%.

Рекомендуемая частота чтения данных — не чаще, чем один раз в 2 секунды.

Учитывая широкий диапазон, датчик можно применять в сложных системах: вентиляция, кондиционирование, метеорологические станции

Диапазон питания датчика составляет +3.3…+5.5В, поэтому его можно использовать в платах Arduino с пониженными напряжениями. Рекомендуемая длина кабеля, соединяющего DHT22 с MCU при питании от 3.3В не должна превышать 100 см.

Подключение 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 = {
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);
}

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_tdegree8={

0b00110,

0b01001,

0b01001,

0b00110,

0b00000,

0b00000,

0b00000

};

/*
  Создаём экземпляр класса DHT12
*/

DHT12dht12;

/*
  Устанавливаем ЖК-дисплей по адресу 0x27, 16 символов и 2 строки
*/

LiquidCrystal_I2Clcd(0x27,16,2);

voidsetup(){

/*

    Инициализируем DHT12
  */

dht12.begin();

/*

    Инициализируем ЖК-дисплей
  */

lcd.init();

/*

    Включаем подсветку дисплея
  */

lcd.backlight();

/*

    Добавляем символ градуса
  */

lcd.createChar(DEGREE,degree);

}
 

voidloop(){

/*

     Читаем данные с DHT12 и получаем статус
  */

intstatus=dht12.read();

lcd.clear();

switch(status){

caseDHT12_OK

/*

        Выводим данные на дисплей
      */

lcd.setCursor(,);

lcd.print(F(«T = «));

lcd.print(dht12.getTemperature());

lcd.print(DEGREE);

lcd.print(F(«C»));

lcd.setCursor(,1);

lcd.print(F(«H = «));

lcd.print(dht12.getHumidity());

lcd.print(F(» %»));

break;

caseDHT12_ERROR_CHECKSUM

lcd.setCursor(,);

lcd.print(F(«Checksum error»));

break;

caseDHT12_ERROR_CONNECT

lcd.setCursor(,);

lcd.print(F(«Connect error»));

break;

caseDHT12_MISSING_BYTES

lcd.setCursor(,);

lcd.print(F(«Missing bytes»));

break;

default

lcd.setCursor(,);

lcd.print(F(«Unknown error»));

break;

}

delay(2000);

}

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий