Как собирать данные с датчиков на расстоянии 5-10м на raspberry pi?
Есть несколько небольших инкубаторов, для которых хочу собирать телеметрию (температура, влажность), чтобы потом отображать где-нибудь исторические данные в виде графиков (например графана). Датчиков хочу навесить 10-15 штук. 3 группы по 4, плюс датчики на температуру в помещение и на улице. Каждая группа датчиков примерно на расстоянии 5 метров.
После небольшого ресерча, решил остановиться на Raspberry Pi 4, т.к я .net разработчик и гайдов + готовых реализаций с малинкой сильно больше. Пока что план такой:
- В качестве датчиков искользовать BME280
- Датчики подключать к малинке по I2C
- Малинка отправляет данные мне на VPS
Собственно основной вопрос в том, будет ли эта схема жизнеспособна? Как я понимаю I2C не рассчитан на большие расстояния, плюс подключение всех датчиков будет последовательным, что еще больше удлинняет цепь. Некоторые пишут что с хорошим кабелем вполне можно использовать на 10м и более, но есть сомнения.
Либо я наоборот сильно усложняю и можно сделать все сильно проще. Задачка собрать параметры и отправить по сети не выглядит сильно сложной.
ОВЕН МВ210-401 модуль ввода аналоговых сигналов 2 шт.
ОВЕН ДТС-ПТ1000-ХХХ датчик температуры сопротивления до 16 шт.
ethernet хаб любого производителя 4 порта 1 шт.
Одноплатный компьютер 1 шт.
Кабель 2х0,5 до 150 метров.
Попробуйте рассмотреть вариант подключения датчиков к ESP32 или подобным. Стоят достаточно дешево (примерно 300 рублей) и смогут сами отсылать данные на VPS.
Минус - придется потратить время на знакомство с платформой.
I2C - прямой путь на грабли в посудной лавке.
Со стороны малинки/апельсинки - UART + GPIO (получается RS485).
Далее, для каждой точки измерений, - либо увязать выбранный датчик с RS485 любым микроконтроллером (начиная от ATtiny25), либо подыскать готовый датчик нужных величин с RS485 под бюджет (как пишет Сергей Сергей).
Поправьте если я неправильно понял. Для UART можно использовать либо GPIO, либо USB и в итоге я получаю последовательный порт, который можно будет юзать на малинке. На этот порт я смогу навесить что-то вроде этого (или какой-нибудь stm32 или ардуино) и уже сюда вешать свои датчики. Итого получится топология звезды, с контроллерами на концах, к которым уже навешиваются датчики.
Тогда видимо мне нужен будет какой-то хаб, чтобы навесить на UART несколько контроллеров и видимо он должен иметь свое питание?
Использование UART решает проблему с удаленностью от малинки?
У-у-у... краткий взгляд (через призму поисковика) на сайт малинки наводит на мысль, что "типового" для промавтоматики последовательного порта у неё нет. Тогда придётся ещё и преобразователь USB-UART вешать на неё.
На этот порт я смогу навесить что-то вроде этого (или какой-нибудь stm32 или ардуино) и уже сюда вешать свои датчики. ..... Тогда видимо мне нужен будет какой-то хаб, чтобы навесить на UART несколько контроллеров и видимо он должен иметь свое питание?
Да, примерно так. Но понадобятся ещё приёмопередатчики RS485 (нечто похожее на это):
Они дадут улучшение помехозащищенности (диференциальный сигнал) и мультиплексирование канала (за счёт отключения передатчиков - "ведомые" приборы-градусники слушают линию и начинают передачу только по запросу от "ведущей" малинки).
Использование UART решает проблему с удаленностью от малинки?
Эту проблему решает RS485. А UART позволяет делать "ведомые" приборы на дешёвых и более надёжных микроконтроллерах.
Не назвал бы это промавтоматикой, это пет проект для расширения кругозора и знакомство с миром одноплатников началось несколько дней назад) Поэтому и хотелось бы чтобы кто-то поправил, если я не в том направлении копаю. Основная задача то, это именно сбор информации с датчиков, может лучше вообще без апельсинок и малинок обойтись.
На использование USB для UART навела эта статья. Выглядело заманчиво подключить просто через usb с использованием какого-нибудь хаба.
Согласен, что в этой схеме логично сразу подключать через GPIO. Я рассчитывал на то, что от малинки будет только USB кабель до хаба, а преобразователи будут только возле конечных точек.
Могли бы вы уточнить, что именно поздразумевается в вашей схеме под "звезда"? Имею ввиду физическую реализацию.
Почему именно RS485? Является ли альтернативой использование каких нибудь ардуинок с ethernet и выкидывание малинки из моей схемы? Т.е будет 4 ардуинки с ethernet для каждой группы датчиков и я опрашиваю их напрямую по сети. Если я правильно понял, то разница будет только в стоимости добавления новых групп.
Сергей Коновалов, тоже подключусь.
485 -- это дифференциальная пара, он более помехоустойчев, чем однопроводные интерфейсы.
Сверху уже написали, что самое адекватное -- преобразователь RS485 - UART подцепить на GPIO малины и датчики соединить звездой, т. е. все элементы должны быть зацеплены на одну шину.
Не назвал бы это промавтоматикой, это пет проект для расширения кругозора
От того, что это игрушечный проект .net программиста - он не перестаёт быть промавтоматикой по сути.
Я рассчитывал на то, что от малинки будет только USB кабель до хаба, а преобразователи [USB-UART] будут только возле конечных точек.
Это и затратно, и избыточно (по пропускной способности), и менее надёжно (не смотря на то, что USB тоже дифференциальный, как и RS-485).
Могли бы вы уточнить, что именно поздразумевается в вашей схеме под "звезда"? Имею ввиду физическую реализацию.
Линии от всех ведомых соединяются у ведущего. С электрической точки зрения, кстати, - это не лучший вариант. Лучше была-бы "шина" - линия связи последовательно проходит (напрямую или с небольшими ответвлениями к) через каждый ведомый. Логически - это одно и то же. Вот тут можете посмотреть недлинный дайджест типичных ошибок и вопросов.
Почему именно RS485? Является ли альтернативой использование каких нибудь ардуинок с ethernet и выкидывание малинки из моей схемы?
Можно и так. Узлы сети будут по дороже. Зато - гальваническая изоляция бесплатно.
Обратите внимание, борьба с возможными помехами при передаче - это дифференциальный сигнал RS-485. Гальваническая изоляция - для электрической изоляции частей оборудования друг от друга там, где это необходимо.
VT100, Спасибо за развернутый ответ. Стало понятнее как выбирать из этих вариантов. В первой версии попробую реализовать вариант с шиной RS485 и какими-нибудь простыми микроконтроллерами.