Почему DHT22 выдаёт NaN?
Обновлено Редакция GAW
DHT22 (он же AM2302) передаёт данные по своей однопроводной линии: микроконтроллер прижимает её к нулю, датчик отвечает и выдаёт 40 бит. Библиотеки возвращают NaN — «не число», — когда ответа нет или данные не прошли проверку: контрольная сумма — младшие 8 бит суммы четырёх байтов данных.
Частые причины
| Причина | Что по даташиту AM2302 V1.2 | Что проверить |
|---|---|---|
| Опрос слишком частый | интервал не меньше 2 с | задержка между чтениями |
| Чтение сразу после включения | после подачи питания ждать 2 с | пауза перед первым чтением |
| Нет подтяжки | подтяжка 5,1 кОм к питанию при кабеле до 30 м | резистор между DATA и VCC |
| Питание 3,3 В и длинный провод | при 3,3 В — не длиннее 100 см | питание 5 В или короткий провод |
| Сбит отсчёт времени | бит 0 — 22–30 мкс, бит 1 — 68–75 мкс | прерывания во время чтения |
| Нет ответа вообще | если линия всё время в единице, датчик не работает | распиновку и питание |
Внутри датчика по табл. 4 даташита только слабая подтяжка 30–60 кОм, поэтому Aosong ставит внешний подтягивающий резистор 5,1 кОм. На готовых модулях он бывает уже распаян — проверьте, прежде чем добавлять свой.
Порядок поиска
- Проверьте распиновку: 1 — питание, 2 — данные, 3 — не подключён, 4 — земля.
- Поставьте подтяжку на линию данных и конденсатор 100 нФ по питанию у датчика.
- Сделайте паузу 2 с после включения и опрашивайте не чаще раза в 2 с.
- Если провод длинный, питайте датчик от 5 В — сколько метров допустимо, рассказано в ответе «На какой длине провода работает DHT22».
- Если ошибки случайные, ищите прерывания, которые срабатывают во время чтения: таймеры, приём UART, вывод на адресную ленту.
Выводы, протокол и отличия от DHT11 собраны в карточке DHT11 и DHT22.
Похожие вопросы
Почему DHT22 показывает устаревшие данные?
Так он устроен: по даташиту AM2302 каждое чтение возвращает результат предыдущего измерения, а новое измерение запускается самим запросом. Если опрашивать редко, первое значение после паузы старое; Aosong советует прочитать дважды подряд с интервалом не меньше 2 с.
Можно ли питать DHT22 от 3,3 В?
Можно, диапазон питания по даташиту — 3,3–5,5 В. Но при 3,3 В Aosong ограничивает провод до датчика одним метром: на более длинном падение напряжения оставляет датчик без нормального питания, и чтения сбоят.
Почему DHT22 сбоит, когда в программе работают прерывания?
Нуль и единица отличаются только длительностью высокого уровня — около 26 и 70 мкс. Если во время чтения сработает прерывание на десятки микросекунд, программа неверно измерит импульс, и контрольная сумма не сойдётся. Поэтому чтение делают с запрещёнными прерываниями или аппаратным захватом времени.
Источники
- 广州奥松电子有限公司 (Aosong). AM2302 产品手册 (温湿度模块), V1.2-20180605 — текст в виде изображений, прочитан по рендеру; с. 1 — питание 3,3–5,5 В; с. 2, табл. 4 — внутренняя подтяжка 30–60 кОм, период опроса 2 с; с. 3, разд. 7.1 — подтяжка 5,1 кОм при кабеле короче 30 м, при питании 3,3 В кабель не длиннее 100 см, иначе падение на линии оставляет датчик без питания; опрос не чаще раза в 2 с, иначе неточность или сбой связи; каждое чтение возвращает результат предыдущего измерения; с. 5, табл. 6 — старт 0,8–20 мс (тип. 1 мс), ответ 80 мкс, бит 0 — высокий уровень 22–30 мкс (тип. 26), бит 1 — 68–75 мкс (тип. 70); после включения ждать 2 с
- Aosong Electronics. Digital-output relative humidity & temperature sensor/module DHT22 (DHT22 also named as AM2302) — ранний англоязычный документ производителя (копия на сайте SparkFun) — пакет из 40 бит: влажность и температура по 16 бит и 8 бит контрольной суммы, равной младшим 8 битам суммы четырёх байтов; если линия всё время в высоком уровне, датчик не работает — проверить подключение; конденсатор 100 нФ между питанием и землёй
Нашли ошибку?
Смотрите также
- DHT11 и DHT22Датчики влажности по одному проводу: точность, формат 40 бит, тайминги, подтяжка
- Контрольная суммаПроверочное значение по данным: простая сумма, LRC, Internet checksum, CRC
- Подтягивающий резисторPull-up и pull-down: определённый уровень на свободной линии
- На какой длине провода работает DHT22?До 30 м при 5 В и подтяжке 5,1 кОм, при питании 3,3 В — до 1 м
- ПрерываниеЗапрос периферии, вектор и обработчик прерывания