Рубрики
Проекты на ESP32

Подключение датчика температуры и влажности DHT11/DHT22 к ESP32

В этой статье мы рассмотрим как использовать датчики температуры и влажности DHT11 и DHT22 с платой ESP32 с помощью Arduino IDE. Мы рассмотрим краткое введение в эти датчики, их распиновку, схему подключения к ESP32 и программу для считывания с них данных.

Ранее мы уже подключали датчик DHT11 к модулю ESP32 в проекте веб-сервера на модуле ESP32 для измерения температуры и влажности. Но эта статья более подробная и охватывает больше нюансов подключения датчика DHT11/DHT22 к ESP32.

Также ранее на нашем сайте мы рассматривали подключение датчика DHT11 (создание метеостанции) к платам Raspberry Pi и Arduino, а также к модулю ESP8266.

Необходимые компоненты

  1. Модуль ESP32 (купить на AliExpress).
  2. Датчик температуры и влажности DHT11/DHT22 (купить на AliExpress).
  3. Макетная плата.
  4. Соединительные провода.

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

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

Датчики DHT11 и DHT22 используются для измерения температуры и относительной влажности. Они очень популярны среди производителей и любителей электроники.

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

DHT11 против DHT22

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

DHT11 DHT22
Диапазон температур от 0 до 50 ºС +/-2 ºС -40 до 80 ºC +/-0,5ºC
Диапазон влажности 20–90% +/-5% от 0 до 100% +/-2%
Разрешение Влажность: 1%
Температура: 1ºC
Влажность: 0,1%
Температура: 0,1ºC
Рабочее напряжение 3 – 5,5 В постоянного тока 3 – 6 В постоянного тока
Потребляемый ток 0,5 – 2,5 мА 1 – 1,5 мА
Период выборки 1 секунда 2 секунды
Цена От 1 до 5 долларов От 4 до 10 долларов

Датчик DHT22 имеет лучшее разрешение и более широкий диапазон измерения температуры и влажности. Однако он немного дороже, и вы можете запрашивать показания только с интервалом в 2 секунды.

У DHT11 меньший диапазон и он менее точен. Однако вы можете запрашивать показания датчика каждую секунду. Он также немного дешевле.

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

Распиновка датчиков DHT

Датчики DHT имеют четыре контакта, как показано на следующем рисунке. Однако, если вы получаете датчик DHT в коммутационной плате, он поставляется только с тремя контактами и с внутренним подтягивающим резистором на контакте 2.

В следующей таблице представлено описание контактов датчиков DHT22/DHT11. Когда датчик обращен к вам, нумерация контактов начинается с 1 слева направо.

Контакт датчика Подключается к 
1 3.3В
2 Любой цифровой GPIO; также подключите подтягивающий резистор 10 кОм
3 Не подключайте
4 Земля

Как видите, назначение контактов датчиков интуитивно понятно.

Принципиальная схема

Подключите датчик DHT22 или DHT11 к плате разработки ESP32, как показано на следующей принципиальной схеме.

В этом примере мы подключаем контакт данных датчика DHT к контакту GPIO 4 платы ESP32. Однако вы можете использовать любой другой подходящий цифровой контакт платы.

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

Для считывания данных с датчика DHT мы будем использовать библиотеку DHT от Adafruit. Для использования этой библиотеки вам также необходимо установить библиотеку Adafruit Unified Sensor. Выполните следующие шаги для установки этих библиотек.

Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries. Должен открыться менеджер библиотек.

Введите «DHT» в поле поиска и установите библиотеку DHT от Adafruit.

После установки библиотеки DHT от Adafruit введите в поле поиска «Adafruit Unified Sensor». Прокрутите страницу до конца, чтобы найти библиотеку и установить ее.

После установки библиотек перезапустите Arduino IDE.

Исходный код программы

Для считывания температуры и влажности с датчика DHT мы будем использовать пример на основе библиотеки Adafruit DHT. Скопируйте следующий код в Arduino IDE.

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

Объяснение работы кода

Сначала вам нужно импортировать библиотеку DHT:

Затем задайте цифровой контакт, к которому подключен контакт данных датчика DHT. В нашем случае он подключен к GPIO 4.

Затем вам нужно выбрать тип датчика DHT, который вы используете. Библиотека поддерживает DHT11, DHT22 и DHT21. Раскомментируйте тип датчика, который вы используете, и закомментируйте все остальные. В этом случае мы используем датчик DHT22.

Далее создадим DHT объект с именем dht на контакте, который мы задали ранее, и необходимым типом датчика.

В функции setup() инициализируем последовательную связь со скоростью 9600 бод и выведем сообщение в последовательном мониторе.

Наконец, инициализируем датчик DHT.

Функция loop() начинается с задержки 2000 мс (2 секунды), поскольку максимальный период выборки DHT22 составляет 2 секунды. Таким образом, мы можем получать показания только каждые две секунды.

Температура и влажность возвращаются в формате float. Мы создаем переменные float ht и f для сохранения влажности, температуры в градусах Цельсия и температуры в градусах Фаренгейта соответственно.

Получить данные о влажности и температуре так же просто, как использовать методы readHumidity() и readTemperature() объекта dht, как показано в следующем фрагменте кода:

Если вы хотите получить температуру в градусах Фаренгейта, вам нужно передать параметр true как аргумент для метода readTemperature().

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

После получения влажности и температуры библиотека имеет метод, который вычисляет индекс тепла. Вы можете получить индекс тепла как в градусах Цельсия, так и в градусах Фаренгейта, как показано ниже:

Наконец, распечатайте все показания на последовательном мониторе с помощью следующих команд:

Тестирование работы проекта

Загрузите код на плату ESP32. Убедитесь, что в настройках Arduino IDE выбраны правильная плата и COM-порт.

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

Если ваш датчик DHT возвращает сообщение об ошибке “Failed to read from DHT sensor!” («Не удалось прочитать данные датчика DHT!») или показания DHT возвращают «Nan»:

Попробуйте воспользоваться одним из следующих советов по устранению этой ошибки:

  • Проводка: когда вы создаете электронный проект, вам нужно дважды проверить проводку или назначение контактов. После проверки и тестирования того, что ваша схема правильно подключена, если она все еще не работает, продолжайте читать следующие советы по устранению неполадок.
  • Питание: датчик DHT имеет рабочий диапазон от 3 В до 5,5 В (DHT11) или от 3 В до 6 В (DHT22). Если вы питаете датчик от контакта ESP32 3,3 В, в некоторых случаях питание DHT напряжением 5 В решает проблему.
  • Неисправный USB-порт или USB-кабель: иногда питания ESP32 напрямую от USB-порта ПК недостаточно. Попробуйте подключить его к USB-концентратору, работающему от внешнего источника питания. Также может помочь замена USB-кабеля на лучший или более короткий. Наличие USB-порта, обеспечивающего достаточное питание, или использование хорошего USB-кабеля часто решает эту проблему.
  • Источник питания: как упоминалось в предыдущем совете, ваш ESP может не обеспечивать достаточно мощности для правильного считывания с датчика DHT. В некоторых случаях вам может потребоваться питание ESP от источника питания, который обеспечивает больший ток.
  • Тип датчика: дважды проверьте, что вы раскомментировали/закомментировали в коде нужный датчик для вашего проекта. В этом проекте мы использовали DHT22:

  • Частота выборки: датчик DHT очень медленно получает показания (показания датчика могут занять до 2 секунд). В некоторых случаях увеличение времени между показаниями решает проблему.
  • Датчик DHT сгорел или сломался: к сожалению, эти дешевые датчики иногда выглядят совершенно нормально, но они сгорели/сломаны. Поэтому, даже если вы собрали правильную схему и код, он все равно не сможет получить показания. Попробуйте использовать другой датчик, чтобы посмотреть, решит ли это вашу проблему.
  • Неправильная скорость передачи данных или не удалось загрузить код: если вы ничего не видите в последовательном мониторе Arduino IDE, еще раз проверьте, правильно ли выбрана скорость передачи данных, COM-порт или успешно ли загружен код.

При создании наших проектов мы сталкивались с похожими проблемами с DHT, и они всегда решались одним из описанных ранее методов.

Фатальная ошибка с отсутствием файла Adafruit_Sensor.h

Также есть распространенная ошибка Fatal error: Adafruit_Sensor.h: No such file or directory (Фатальная ошибка: Adafruit_Sensor.h: такого файла или каталога нет), которая происходит при попытке компиляции кода. Если вы получаете следующую ошибку:

Вам необходимо установить библиотеку драйвера Adafruit Unified Sensor. В Arduino IDE введите в поле поиска «Adafruit Unified Sensor», прокрутите страницу до конца, чтобы найти библиотеку и установить ее.

После установки библиотеки перезапустите Arduino IDE, и код должен скомпилироваться без сообщения об ошибке.

Подведение итогов

С помощью этого руководства вы узнали, как получать показания температуры и влажности с датчика DHT11 или DHT22 с помощью ESP32 и Arduino IDE. Получение показаний температуры и влажности с помощью библиотеки Adafruit DHT очень просто, вы просто используете методы readTemperature() и readHumidity() объекта dht.

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

Добавить комментарий

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