Несколько датчиков DHT12 к одной ардуине
- Войдите на сайт для отправки комментариев
Пнд, 31/08/2020 - 11:28
Добрый день! Возникла необходимость собирать данные с 7 датчиков температуры и влажности DHT12, которые опрашиваются по i2c. Как решить задачу, учитывая, что адреса всех датчиков одинаковые?
Нет никакого практического смысла ставить 7 таких датчиков в радиусе одной шины i2c. Ты влажность в каждом ящике стола измерять собрался, что ли?
см. SoftwareWire, например.
Хотя, как мне помнится, подобные датчики от AOSONG переключаются в режим OneWire (не далласовский) и опрашиваются как стандартные DHT-шки с той же точностью.
мультиплексор I2C
Мне необходимо мониторить влажность в 7 ульях. Я тоже думаю про SofrwareWire, только не могу найти, как опросить датчик DHT12 функциями стандартной библиотеки Wire, на базе которой написана SofrwareWire. Есть у кого примеры работы с DHT12 через библиотеку Wire?
Я бы вам советовал по ульям I2C не раскидывать, а пойти стандартным для DHT путем. Зачем лишний пин занимать?
что-то вы сами себе противоречите. Сначала пишете, что у вас датчики подключены по I2C, теперь - что не знаете, как их подключить через Wire.
Может вы не в курсе, что I2C и Wire - это одно и то же?
И все 7 ульев в радиусе 3х метров?
Дело в том, что я пробовал подключать по протоколу 1-Wire, подключая по схеме на рисунке:

К сожалению, опросить по протоколу 1-Wire у меня не получилось. Зато получилось опросить по I2C
К сожалению, опросить по протоколу 1-Wire у меня не получилось. Зато получилось опросить по I2C
потому что Wire и 1-Wire - это разные протоколы
что-то вы сами себе противоречите. Сначала пишете, что у вас датчики подключены по I2C, теперь - что не знаете, как их подключить через Wire.
Может вы не в курсе, что I2C и Wire - это одно и то же?
Не знаю, как их подключить, используя библиотеку Wire.
Данная библиотека позволяет Ардуино взаимодействовать с различными устройствами по интерфейсу I2C / TWI.
И все 7 ульев в радиусе 3х метров?
Вообще в радиусе 10 метров. На этом расстоянии может не работать? Если да, то почему?
https://robototehnika.ru/file/DHT12.pdf страница 10, подключение по One Wire \ Single bus
А, ну я вижу, что такая же схема. Тогда должно работать, DHT нет смысла подделывать. Ищите неконтакт или ошибку в коде. Возможно, что слишком быстро опрашиваете или библиотека не для той модели сенсора.
Не знаю, что я делал не так, но что-то делал не так. Попробовал повторно подключить и опросить - и все получилось! Отсюда 2 вопроса: что дает более надежное подключение - 1Wire или I2C? И как подключать несколько устройств 1Wire с одинаковым адресом?
как подключать несколько устройств 1Wire с одинаковым адресом?
так не бывает, у каждого устройства 1Wire уникальный адрес.
Кроме того, устройства можно опрашивать и последовательно, без учета адресов, только тогда вы не сможете лпределить, где какой датчик.
Хочу все-таки попробовать опросить несколько датчиков по i2c. Вы мне можете помочь кодом с помощью библиотеки Wire?
как подключать несколько устройств 1Wire с одинаковым адресом?
так не бывает, у каждого устройства 1Wire уникальный адрес.
Это не далласовский 1Wire, а аосонговский One Wire. Он без адресации, просто данные по одному проводу валят.
Хочу все-таки попробовать опросить несколько датчиков по i2c. Вы мне можете помочь кодом с помощью библиотеки Wire?
https://github.com/xreef/DHT12_sensor_library
Это не далласовский 1Wire, а аосонговский One Wire. Он без адресации, просто данные по одному проводу валят.
наплодили названий одинаковых...
А как оно отличает один датчик от другого?
А как оно отличает один датчик от другого?
Никак. Один датчик - один провод - один пин контроллера.
Хочу все-таки попробовать опросить несколько датчиков по i2c. Вы мне можете помочь кодом с помощью библиотеки Wire?
Я работаю с этой библиотекой, ей все опрашивается. Но мне нужно сделать опрос нескольких датчиков через SoftwareWire, которая сделана на основе стандартной библиотеки Wire. Соответственно мне надо опросить датчик через функции стандартной библиотеки Wire, чтобы портировать примененное решение на функции библиотеки SoftwareWire. Это у меня не получается сделать даже на основе примеров самой библиотеки Wire. Какова последовательность действий? Сколько байт читать и в каком формате выводить? Я не могу понять.
Хочу все-таки попробовать опросить несколько датчиков по i2c. Вы мне можете помочь кодом с помощью библиотеки Wire?
еще раз соверую - купите мультиплексор за 2.5 бакса:
https://aliexpress.ru/item/32996774174.html
еще раз соверую - купите мультиплексор за 2.5 бакса:
https://aliexpress.ru/item/32996774174.html
Спасибо за совет! Я его уже заказал, но когда он придет, не было бы уже поздно. Если будут соображения по i2c, я был бы признателен
SoftwareWire не базируется на Wire, она работает сама по себе. Т.е. напрямую не удастся библиотеку так заюзать... Треба перепиливать ее или вручную писать код работы с датчиком.
Где-то у меня 2320 был, можно потыркать.
Если будут соображения по i2c, я был бы признателен
соображение такое - SoftwareWire точно так же не умеет работать с несколькими датчиками с одним адресом на одной шине, как и аппаратное I2C. То есть единственный вариант это поднимать 7 отдельных SoftwareWire на 7 пинах, а это такие костыли...
Если уж занимать 7 пинов - куда как проще, ИМХО, подключить датчики по One Wire - как пишет Садман - каждый на отдельный пин
Не, там можно извращнуться без семи инстансов.
Если будут соображения по i2c, я был бы признателен
соображение такое - SoftwareWire точно так же не умеет работать с несколькими датчиками с одним адресом на одной шине, как и аппаратное I2C. То есть единственный вариант это поднимать 7 отдельных SoftwareWire на 7 пинах, а это такие костыли...
Если уж занимать 7 пинов - куда как проще, ИМХО, подключить датчики по One Wire - как пишет Садман - каждый на отдельный пин
Я хочу попробовать поднять 7 SofrwareWire и занять 14 пинов (все равно они больше ни для чего не нужны), только даже опросить 1 датчик библиотекой Wire не получается - или я неправильно изменяю скетч примера, или что-то ещё, но значения с датчика прочитать не могу. Завтра приведу код, может, подскажете, что я делаю не так.
Всем спасибо за участие и ответы! Очень вам благодарен!
каким образом? - если не в лом :)
Вобщем, для моего AM2320 и SoftwareWire упрощенный скетч (без проверок CRC и пр.) таков:
Для DHT12 я кусок с той библиотеки дернул, но как он будет работать - ХЗ. Проверить не на чем.
P.S. Скетчем "I2C сканер" датчик не показывается, но работает.
каким образом? - если не в лом :)
Ну вот, выше скретчик - там изобрАжено.
Ну вот, выше скретчик - там изобрАжено.
что-то, Гриш, я не въезжаю. Ты обращаешься к датчику самым обычным образом, через deviceI2Caddress. Но если у ТС 7 датчиков с одним и тем же адресом - как ты разберешься, какой тебе ответил?
Или когда ты говорил, что можно обойтись без семи инстансов - ты имел в виду только экземпляры класса. а датчики все равно надо вешать каждый на свою шину?
Или когда ты говорил, что можно обойтись без семи инстансов - ты имел в виду только экземпляры класса. а датчики все равно надо вешать каждый на свою шину?
Именно так. Под каждый датчик свою пару ног (иначе не выйдет), но семь экземпляров класса нет нужды создавать.
Я себе вообще замоддил библиотеку и ноги без вызова деструктора на ходу меняю, но в данном случае проще так проиллюстрировать.
Я ещё вот чего подумал. Ежели они одновременно не работают, сенсоры эти, то ведь можно попытаться их подключить "внахлёст" - SDA одного и SCL другого на один пин.
Добрый день! Решил задачу подключением датчиков Am2320 по 1 поводу данных (3 и 4 ноги соединил с землёй). В тестовых условиях успешно работает 7 датчиков в течение 2 недель. Посмотрим, как будет все работать в полевых условиях.
Также хочу добавить, что данные датчики опрашиваются библиотекой для DHT22, что оказалось очень удобно.
Здравствуйте, столкунлся с аналогичной, нужно подключить 5 датчиков AHT10 для измерения влажности но вот адреса у них у всех 0x38. Я в этом деле новенький так что ещё мало чего понимаю. Если не трудно оставьте свой контакт что-бы можно было лично пообщаться, заранее благодарен.