[РЕШЕНО] DHT11/DHT22 – Ошибка чтения с датчика DHT
Это руководство по устранению наиболее распространённых проблем с датчиком DHT при использовании ESP32, ESP8266, Arduino или аналогичных плат.
Если вы получаете сообщение об ошибке в мониторе порта (Serial Monitor) при чтении температуры и влажности с датчика DHT11, DHT22, AM2302 или AM2301, выполните следующие шаги, чтобы попытаться решить проблему.
«Failed to read from DHT sensor!» или значения NaN
Если ваш датчик DHT11/DHT22 возвращает сообщение об ошибке «Failed to read from DHT sensor!» или показания DHT возвращают «NaN»:
Попробуйте один из следующих советов по устранению неполадок.
1. Проводка
Когда вы собираете электронный проект, необходимо дважды проверить проводку или назначение выводов. После проверки и тестирования того, что ваша схема правильно подключена, если она всё ещё не работает, продолжайте читать следующие советы по устранению неполадок.
2. Питание
Датчик DHT имеет рабочий диапазон напряжения от 3 В до 5,5 В (DHT11) или от 3 В до 6 В (DHT22). Если вы питаете датчик от вывода 3,3 В, в некоторых случаях подключение DHT к напряжению 5 В решает проблему.
3. Неисправный USB-порт или USB-кабель
Иногда питания ESP32, ESP8266, Arduino или аналогичных плат напрямую от USB-порта ПК недостаточно. Попробуйте подключить плату к USB-хабу с внешним источником питания. Также может помочь замена USB-кабеля на более качественный или более короткий. Наличие USB-порта, обеспечивающего достаточную мощность, или использование хорошего USB-кабеля часто решает эту проблему.
4. Источник питания
Как упоминалось в предыдущем совете, ваша плата (ESP32, ESP8266, Arduino и т.д.) может не обеспечивать достаточного питания для корректного чтения данных с датчика DHT. В некоторых случаях вам может потребоваться запитать плату от источника питания, обеспечивающего больший ток.
5. Тип датчика
Дважды проверьте, что вы раскомментировали/закомментировали в своём коде правильный тип датчика для вашего проекта. В данном случае мы выбираем DHT22:
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
6. Частота опроса
Датчик DHT очень медленно получает показания (считывание данных с датчика может занимать до 2 секунд). В некоторых случаях увеличение времени между считываниями решает проблему.
7. Датчик DHT сгорел или сломан
К сожалению, эти дешёвые датчики иногда выглядят совершенно нормально, но они перегорели или сломаны. Поэтому, даже если вы собрали правильную схему и загрузили правильный код, считывание данных всё равно будет завершаться с ошибкой. Попробуйте использовать другой датчик, чтобы проверить, решит ли это вашу проблему.
8. Неправильная скорость передачи данных или неудачная загрузка кода
Если вы не видите ничего в мониторе порта Arduino IDE, дважды проверьте, что вы выбрали правильную скорость передачи данных (baud rate), COM-порт или что код был успешно загружен.
При создании наших проектов мы сталкивались с аналогичными проблемами с DHT, и они всегда решались одним из описанных выше методов.
Фатальная ошибка: Adafruit_Sensor.h: No such file or directory
Существует также распространённая ошибка, которая возникает при попытке скомпилировать код. Если вы получаете следующую ошибку:
fatal error: Adafruit_Sensor.h: No such file or directory
#include <Adafruit_Sensor.h>
Вам необходимо установить библиотеку Adafruit Unified Sensor driver. В вашей Arduino IDE введите в поле поиска «Adafruit Unified Sensor», прокрутите вниз до конца, чтобы найти библиотеку, и установите её.
После установки библиотеки перезапустите Arduino IDE, и код должен скомпилироваться без сообщения об ошибке.
Заключение
Надеемся, что это руководство оказалось для вас полезным. Если вы столкнётесь с другими проблемами, пожалуйста, напишите о них в комментариях ниже, и мы постараемся помочь вам решить вашу проблему.
У нас есть другие руководства по работе с датчиками DHT, которые могут оказаться полезными:
Полное руководство по DHT11/DHT22 с использованием MicroPython на ESP32/ESP8266
Raspberry Pi Pico с датчиком температуры и влажности DHT11/DHT22 (Arduino IDE)
Спасибо за чтение.