Arduino.ru
День добрый, товарищи. Проблема казалось бы с самой избитой темой — датчиками температуры и влажности. В общем приобрел комплект датчиков с AliExpress (тыц), которые никак не читаются. Для начала ессесно погуглил что это за датчики такие, везде написано что это просто DHT21 в корпусе. Ну лан, примеров много, думал что заведется. а нифига, данные вообще никакие не приходят. Пробовал и в ардуино (нано, уно) и в NodeMcu — все одно и то же. Закрались у меня после этого какие-то сомнения и я раскурочил один из датчиков, а там значит AM2320, который якобы через I2C работает. Нашел спеку к датчику и подрубился к ардуине (все как надо, SCL/SDA, в оригинале датчики шли с тремя распаянными проводами, пришлось припаять еще один), но как оказалось и так ничего не рабит. Нашел вот тако пример на основе библиотеки Wire:
но все виснет на моменте вызова функции Wire.endTransmission(). Я пробовал несколько датчиков из комплекта, но ничего не работает. Я почему-то не верю что весь комплект бракованный, скорее всего где-то тупая ошибка, которая все портит. Может есть какой-то другой корпусный аналог таких датчиков? желательно конечно это заставить работать, но.
- Войдите на сайт для отправки комментариев
Недавно такой тестил, все штатно, по 1 проводу с примером из библиотеки. Все сразу заработало, вот только температура уж больно большое отклонение имеет по сравнению с другими моими термометрами, около 4-5 градусов в +. То ли он греется в этом корпусе, то ли таки так врет.
Прямую ссылку на библу щас влет не нашел, закинул, что скачал, на свой диск
Отпишись на счет точности, если будет такая возможность.
- Войдите на сайт для отправки комментариев
Такой же на обычной библиотеке DHT, завелся сразу. Влажность надо поправочные коэффициенты делать и сквозняков не допускать.
Уже года 2 в консервохранилище работает.
- Войдите на сайт для отправки комментариев
Пробовал уже такой либой — эффект нулевой, все пять датчиков работают одинаково, т.е. никак. Меня сильно смущает что по даташиту указано что датчик работает через I2C, но распаяно всего три провода. Нашел еще пару примеров кода по работе с АМ2320, но все также виснет. Заговор какой-то.
- Войдите на сайт для отправки комментариев
У меня два таких датчика, один в один как на вашем фото с Ali, от разных продавцов. Разбирать их мне жаба не позволит, но таки-да, оба работают по китайскому однопроводному протоколу, подробно описанному в документации на разные DHT (DHT11 или DHT21). На оборотной стороне ваших датчиков напиано же . DIGITAL (1 WIRE) — это предпоследняя строка.
Этот 1 WIRE никакого отношения к One Wire не имеет, но вполне обслуживается многочисленными ардуино библиотеками для DHT11 и/или DHT21 (разница только в длительности импульса инициализации датчика).
Как вы обнаружили внутри AM2301 целый AM2320 для меня загадка.
Два человека вам написали, что у них нормально работают такие датчики, «штатно». Этот комментарий от третьего такого человека, который не использует библиотеки ардуино, но делает все по документации на прибор. В данном случае на DHT21 (для DHT11 с т.з. передачи информации все одно и то же).
Последнее. Линия данных _должна_ быть подтянута к питанию резистором 2 — 10 кОм. В некоторых изделиях в корпусе скрывается подтягивающий резистор, в некоторых — нет. Измерьте сопротивление между линиями данных и питания.
- Войдите на сайт для отправки комментариев
Понимаете, я в полном замешательстве — вся та инормация, которую я нахожу в интренете по поводу этих датчиков противоречит сама себе (да и мне тоже). Вот смотрю я вот этот мануал — http://bit.ly/26maJH3 — и там написано, что датчики работают через I2C. Гуглю по поводу АМ2301, везде говорят что читается обычной либой DHT, но на практике не работает. Может китайцы перепутали датчики?
Вот фотография внутренностей датчика — http://imgur.com/yRT1g0D — ну я же ясно вижу, что там АМ2320. Пуллап резисторов там тоже нет, к сожалению.
- Войдите на сайт для отправки комментариев
Раскрутил свой 2301, различаются кардинально. У меня с одной стороны термистор, гигристор, 4МГц кварц, с другой преобразователь на noname 10 ногом чипе с обвязкой.
- Войдите на сайт для отправки комментариев
Вот наверное поэтому никакие готовые мануалы не работают в моей ситуации. У меня даже обвязки никакой нет внутрях, обратная сторона вообще пустая, хотя как везде написано как минимум резистор балластный там должен быть.
- Войдите на сайт для отправки комментариев
Если он I2C, то посмотрите сканером, считает адрес или нет? Резисторы не забудьте к +5В.
- Войдите на сайт для отправки комментариев
Приведенная вами фотография противоречит моим представлениям, но убеждает. Уже продолжительное время хочу для своего «зверинца» именно AM2320.
Документация по AM2320 (именно китайская, с дерьмовым переводом на английский, от которого голова раскалывается) доступна по запросу в поисковиках. Читал ее неоднократно. AM2320 запускается либо как I2C прибор с адресом 0xB8 (вам порекомендовали проверить сканером, что IMHO очень правильно). Либо в своем «китайском 1 wire» варианте (в этом случае мы говорим о совместимости с библиотеками для DHT11/21). Для второго варианта китайцы приводят схему подключения (именно AM2320). Ножка SCL должна заводится на GND, в этом случае, как понимаю, прибор «должен» работать как 1 wire (китайский протокол DHT) устройство.
Смотрел тайминги 1 wire для AM2320, они укладываются в тайминги DHT, поэтому существующий софт для DHT11/21 работать должен. Скорее софт для DHT11, поскольку инициализация AM2320 заявлена в 1 мс (это несколько спекулятивно, от 0,8 мс до 20 мс, что годится для любого DHT). Если бы использовал библиотеки, попробовал бы от Adafruit, по моим представлениям там толковые парни делом занимаются и код у них красивый.
Увы, больше ничем помочь не могу. За темой буду следить, надеюсь что вы отпишетесь о результатах.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
arendst / Tasmota Public
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AM2301/AM2302/Itead SI7021 what mudule type shoul i chose. Wiki confuse! #2680
AM2301/AM2302/Itead SI7021 what mudule type shoul i chose. Wiki confuse! #2680
Comments
I have 3 kinds of sensor AM2301/AM2302/Itead SI7021, i want to chose the correct module type for them but i am very confusing by looking info on Wiki.
- the AM2301 i chose «02 AM2301» : it is easy and make sense.
- the AM2302 i chose «03 SI7021» or «02 AM2301» : it also work. But i don’t know it’s correct or not. what kind is the best and correct i should chose?
- Itead SI7021 (one Wire), i chose «03 SI7021» or «02 AM2301«: both selection are working but on Wiki advise to chose SI7021, so what kind i should chose?
Info from Wiki » Devices — Additional Info» Wemos D1 Mini:

Info from Wiki «Sensor Configuration»:

Info from Tasmota «Changelog»:
Regards
(edited to correct my typo)
The text was updated successfully, but these errors were encountered:
Thank you so much for your advice and detail explaination.
I hope that the wiki will be updated soon to reduce confusion for everyone.
I can imagine it is confusing, but I created the wemos wiki from a wemos point of view as a reminder how to connect sensors but also to help others. I believe it’s quite clear, but feel free to update the wemos page and or the main Tasmota page now you know how it should be connected. I think everyone has access to update the wiki in general, and if not you can do a PR (pull request) and send it to Theo, who can accept your changes if he agrees.
Am2320 am2302 чем отличается
Как работают датчики температуры и влажности DHT11 и DHT22, и их взаимодействие с Arduino
Датчики температуры и влажности DHT11 и DHT22/AM2302 от AOSONG довольно просты в использовании, недорогие и отлично подходят для любителей! Эти датчики предварительно откалиброваны и не требуют дополнительных компонентов, поэтому вы можете сразу начать измерение температуры и относительной влажности.
Рисунок 1 – Как работают датчики температуры и влажности DHT11 и DHT22, и их взаимодействие с Arduino
Одна из важнейших функций, которую они предоставляют, заключается в том, что температура и влажность измеряются с точностью до десятых долей; то есть до одного десятичного знака. Единственным недостатком этого датчика является то, что вы можете получать с него новые данные с периодичностью только раз в одну или две секунды. Но, учитывая его производительность и цену, вы не можете жаловаться.
DHT11 против DHT22/AM2302
У нас есть две версии серии датчиков DHTxx. Они выглядят немного похоже и имеют одинаковую распиновку, но имеют разные характеристики. Вот подробности.
DHT22 является более дорогой версией, которая, очевидно, имеет лучшие характеристики. Диапазон измерения температуры составляет от -40°C до +80°C с точностью ±0,5 градуса, а диапазон температур DHT11 составляет от 0°C до 50°C с точностью ±2 градуса. Также датчик DHT22 имеет более широкий диапазон измерения влажности, от 0 до 100% с точностью 2-5%, в то время как диапазон измерения влажности DHT11 составляет от 20 до 80% с точностью 5%.
| Manufacturers’ Specification | ||||||
| AM2302 | AM2320/AM2321 | SHT71 | HTU21D | Si7021 | BME280 | |
| Operating Range | 0–100 | 0–100 | 0–100 | 0–100 | 0–100 | 0–100 |
| Absolute accuracy (%RH, 25°C) |
±3% (10-90%) ±5% (<10, >90%) |
±3% (10-90%) ±5% (<10, >90%) |
±3% (20-80%) ±5% (<20, >80%) |
±3% (20-80%) ±5% (<20, >80%) |
±3% (0-80%) ±5% (>80%) |
±3% (20-80%) |
| Repeatability (%) | ±0.3 | ±0.1 | ±0.1 | — | ±0.025 | — |
| Long term stability (% per year) |
0.5 | 0.5 | 0.5 | 0.5 | 0.25 | 0.5 |
| 1/e Response (sec) | 5 | 5 | 8 | 5 | 18 (with cover) 17 (without) |
1 |
| Voltage supply (V) | 3.3–5.5 | 3.1–5.5(AM2320) 2.6–5.5(AM2321) |
2.4–5.5 | 1.5–3.6 | 1.9–3.6 | 1.71–3.6 |
The Test Apparatus
Apparatus setup is essentially as previously described though a new board had to be built to hold nine devices inside the jars. The AM2302 and SHT71 devices have proprietary one-wire serial interfaces and were addressed independently, each using a separate GPIO pin as in the previous experiments. All the other sensors were multiplexed onto the I2C bus. I2C is able to address multiple devices on a single bus so long as each has a different address, but since I have multiple samples of the same device I am not able to identify each one uniquely. I therefore use a TI CD4051 8×1 multiplexer so that only one of the devices is connected to the I2C bus at a time. The devices are powered continuously, but the I2C IO lines are briefly connected to each device in turn. This would not have been required if I had only one each of the different device models.
The reference calibration sources are the same as before, eleven saturated solutions and distilled water. Sensors were allowed to stabilise for a few hours with each solution. The software automatically steps the temperature over a pre-defined range, allowing the readings to settle at each temperature and logging a reading to a database before stepping to the next temeperature.
Results
Throughout the following plots you will notice the data for sensor G are a little more sparse than the others. Both my AM2320 devices fail intermittently above 50% RH, just returning bytes of 00 or FF. They are worst in the range 50-70% where I got almost no readings. Below that I had not problems and above they were intermittent but fine most of the time. I never found a cause or have any suggestion for why they should fail to produce output in such a narrow range of humidity. At least the values are obviously wrong and an extra function was added to the microcontroller code to simply reject the bad data. The others all continue uneffected but values were only logged from this sensor when they were sensible.
Similarly, the AM2321 device J failed to return values when the humidity was above 90%. Whenever I used H2O (100%) or K2NO3 (92%) the sensor would work for about 10-15min and then freeze, refusing to even repond to I2C communication requests. It worked again immediately once the humidity dropped. Again, I have not found a fix and simply did not log data from this sensor above 90%.
Part 1: As a Function of Humidity
First we look at the varying response of the sensors to different reference humidities 0–100%. Figures 3 and 4 contain the same data plotted with different axes. Figure 3 shows the actual relative humidity values measured and Figure 4 shows the deviations from a perfect calibration. The manufacturers’ specifications are all defined at 25°C so I highlight those data in red. Data obtained at other temperatures are shown in blue.


Both of the above figures have equivalents in previous test runs where you can see earlier results for SHT71 and AM2302 E, F. The other six are new and this is their first test.
Part 2: As a Function of Temperature
In Figure 4 the red data are measured at 25±1°C and the blue data at other temperatures. Device E (an AM2302/DHT22) performs very well at 25°C, easily achieving the advertised specification. The large scatter of the blue points however show that the calibration degrades rapidly with varying temperature. As previously noted, this is my cherry-picked, best AM2302 from a sample of six. In contrast, device K (an HTU21D) seems to lie just slightly outside its specified tolerance at 25°C but has the very substantial advantage of behaving consistently over temperature. In different applications, absolute accuracy at 25°C or a small temperature dependence might be preferable. Easily the best performers though are the BME280 which are both accurate and consistent over the range tested.
-
is sodium chloride. [DHT22/DH11/SHT71 version] is ammonium nitrate. [DHT22/DH11/SHT71 version] is magnesium chloride. [DHT22/DHT11/SHT71 version]



The BME280 shows outstanding calibration throughout. For the other sensors, where the slope of my data matches the slope of the reference data (e.g., NH4NO3 panel K), that device shows good thermal compensation and simply has a constant offset. Where the slopes of the measurements and reference data differ (e.g., MgCl panel K), the device is showing varying errors as the temperature changes.
Part 3: As a Function Simultaneously of Temperature and Humidity
Finally, if a sensor is to be used to measure humidity under a range of varying temperatures a full bivariate calibration is required. Such a calibration over the temperature range 5 < °C < 35 is shown in Figure 8. The curves in Figure 4 are effectively cross sections through these surfaces.
Про Ардуино и не только

DHT11 и DHT22 (AM2302), пожалуй, наиболее популярные датчики температуры и влажности для Ардуино. Они содержат терморезистор, емкостный датчик влажности и простенький контроллер, который считывает с них аналоговые значения и выдает результат в виде цифрового сигнала. Датчики имеют следующие характеристики:
- Напряжение питания 3,5
- Напряжение питания 3,5

Датчики имеют 4 вывода: 2 для питания, 1 сигнальный и 1 вывод не используется. В продаже часто встречаются в виде модулей, у них только 3 контакта и они содержат подтягивающий резистор для сигнального вывода. AM2302 может выпускаться как в стандартном корпусе (на фото выше), так и в увеличенном с тремя проводами. Если вы используете не модуль, а отдельный датчик, то вывод DATA следует подтянуть к +5В резистором на 5,1-10кОм. Ниже показана схема подключения DHT11 к Ардуино, DHT22 подключается точно так же.

В принципе можно попробовать вместо внешнего задействовать внутренний подтягивающий резистор Ардуино, если длина провода составляет несколько сантиметров проблем быть не должно. В целом же лучше придерживаться рекомендаций и включать в схему внешний резистор.
Я для работы с датчиками использую библиотеку DHT sensor library от Adafruit. Кроме нее потребуется установить Adafruit Unified Sensor Library. Это можно сделать как вручную, так и через менеджер библиотек в IDE Ардуино (меню Скетч — Подключить библиотеку — Управлять библиотеками. Для быстрого поиска нужной библиотеки воспользуйтесь фильтром). После установки библиотек можно открыть пример DHTtester (скетч также доступен ниже), указать тип используемого датчика (DHT11, DHT22 или DHT21), при необходимости изменить пин для вывода DATA и прошить скетч в Ардуино. Результат работы будет доступен в мониторе порта.
AM2320 – измеряем температуру и влажность

Есть такой хороший датчик температуры и влажности, как AM2320. По характеристикам он почти идентичен с более известными датчиками серии DHT, но в то же время имеет возможность работы по I 2 C.
Сравнение аналогов
Если сравнивать датчики серии DHT и AM2320, получаем следующую картину:
| Характеристика | Датчик | ||
|---|---|---|---|
| DHT11 | DHT22 | AM2320 | |
| Диапазон температур | 0 … +50°C | -40 … +80°C | -40 … +80°C |
| Шаг измерения температуры | 1°C | 0,1°C | 0,1°C |
| Погрешность температуры | ±2°C | ±0,5°C | ±0,5°C |
| Диапазон влажности | 20 … 90% | 0 … 100% | 0 … 99,9% |
| Шаг измерения влажности | 1% | 0,1% | 0,1% |
| Погрешность влажности | ±5% | ±5% | ±3% |
| Цена | 70 руб. | 260 руб. | 190 руб. |
Цены для сравнения взяты из одного и того же магазина (какого – рекламы делать не буду). Так что выбор в пользу AM2320 был очевиден.
Достаточно непонятный момент – зачем делать такой шаг измерения, если погрешность превышает его в десятки раз? Но это вопрос скорее риторический.
Особенности работы
Важное преимущество этого датчика перед DHT – умение работать по шине I 2 C, но это же является причиной одного из главных недостатков. Дело в том, что работа по I2 C предполагает обмен данными по запросу, при этом передаётся адрес устройства (от 0 до 127). И проблема в том, что датчики имеют один и тот же адрес, соответственно, подключить на эту шину более одного датчика будет очень сложно. Тем не менее, мне встречались упоминания о возможности.
Если у вас несколько таких датчиков, работать с ними следует как с DHT – по одному проводу. Для этого достаточно заземлить четвёртый вывод, который в режиме I 2 C используется для синхронизации AM2320.
Чтение данных с датчика
Мы в примере будем использовать работу по I 2 C. Для работы с датчиком скачаем соответствующую библиотеку, а также для поддержки I 2 C подключим библиотеку Wire. Поскольку нашей целью является работы с датчиком, а не с дисплеем, вместо отображения будем отправлять данные в последовательный порт, а смотреть их при помощи монитора порта в среде разработки.
Выводы датчика подключаем следующим образом:
- 1 – к выводу +5В.
- 2 – к выводу SDA (A4 для Arudino Uno);
- 3 – к выводу 0В.
- 4 – к выводу SCL (A5 для Arudino Uno).
И получаем следующую конструкцию:

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

Arudino UNO + AM2320 — результаты измерения

Рисунок 2 – Внутренности датчиков температуры и влажности DHT11 DHT22/AM2302
Рисунок 3 – Внутренняя структура датчика влажности в DHT11 и DHT22
Рисунок 4 – График зависимости сопротивления NTC термистора от температуры
Рисунок 6 – Подключение DHT11 к Arduino UNO
Рисунок 7 – Подключение DHT22/AM2302 к Arduino UNO
Рисунок 8 – Вывод в мониторе последовательного порта показаний датчика DHT11 или DHT22/AM2302
Рисунок 9 – Подключение к Arduino символьного LCD дисплея 16×2 и DHT11
Рисунок 10 – Подключение к Arduino символьного LCD дисплея 16×2 и DHT22
Рисунок 11 – Показания температуры и влажности на LCD дисплее