Взаимодействие комплекса датчиков. Нужен совет.
- Войдите на сайт для отправки комментариев
Втр, 18/01/2022 - 13:21
Всем привет.
Разрабатываю комплекс датчиков для дома. Суть такая: будет несколько датчиков:
- датчик температуры, влажности давления на улице.
- датчики температуры, углекислого газа в доме по комнатам
- датчики температуры воды в отопительной системе и прочее.
Все датчики будут иметь аккумуляторное питание и pro mini как мозг.
Будет один сервер на базе Node mcu. Работает от сети.
Данные с датчиков будут сливаться на сервер, а с сервера через рутер на народный мониторинг или на приложение смартфона или еще куда душа пожелает.
Также будут периферийные устройства, кот. будут запрашивать температуру с сервера. Ну типа экран висит на кухне, нажал на кнопку он запросил у сервака темпу на улице и вывел на экран, посветил 10 секунд и выключился.
Собственно вопрос: как организовать протокол обмена? Между датчиками и сервером будет связь по радиоканалу посредством HC12. Он спать не умеет. В режиме прослушки эфира жрет миллиамперы. Поэтому делать планирую так. Датчик проснулся, включает полевиком НС-12, измеряет температуру или еще что-то там. шлет на сервер, выключает HC12, ложится спать.
Так вот если будет несколько датчиков, ну десять штук, как их всех выстроить в очередь? Чтобы не забивали друг друга и данные не терялись?
Есть идея такая, проснулся и с периодом раз в 250 мс шлем данные, пока сервер не ответит, что принял. Но не больше 10 попыток. А то будет так слать, пока батарея не сдохнет.
Он спать не умеет.
Умеет.
Но вообще ты пытаешься собрать максимально дешево и на этом прогоришь.
связь по радиоканалу посредством HC12. Он спать не умеет.
связь по радиоканалу посредством HC12. Он спать не умеет.
Спасибо, почитаю, но вопрос был не в этом.
Зачем очередь?
Нода- мастер, по необходимости запрашивает датчики пакетом с идентификатором-адресом датчика.
датчики-слэйвы слушают канал, запрос обрабатывает только датчик с адресом совпадающим адрес в запросе.
Датчик проснулся, включает полевиком НС-12, измеряет температуру или еще что-то там. шлет на сервер, выключает HC12, ложится спать.
нормальная идея. что еще надо?
датчики-слэйвы слушают канал, запрос обрабатывает только датчик с адресом совпадающим адрес в запросе.
и что, hc-12 вечно в прослушке? - помоему вы задачу недочитали
Собственно ответ - вот здесь подробная статья о разных протоколах для умного дома и сравнение их между собой. А вот здесь сравнений поменьше, зато протоколов побольше.
датчики-слэйвы слушают канал, запрос обрабатывает только датчик с адресом совпадающим адрес в запросе.
и что, hc-12 вечно в прослушке? - помоему вы задачу недочитали
Сервер постоянно посылает запросы, а датчик как проснется, дождется свой запрос и ответит.
Как вам такой вариант. Сервер все время слушает. Как только просыпается любой из датчиков он сначала выжидает время большее чем надо для общения с одним датчиком(чтобы не вклиниться в разговор), потом шлет команду "1 проснулся". Как только сервер получил команду 1 проснулся, его и опрашивает, а потом говорит "1 - спать". Если любой из датчиков проснется в процессе выжидания времени 1 или во время передачи, он будет сначала ждать освобождения канала, а уж потом сообщать, что проснулся, если во время ожидания прилетит байт, время ожидания обнуляется. таким образом все по очереди будут передавать.
Чувак, возьми esp32, подключи к вайфаю, и не страдай ерундой.
Сколько у вас планируется датчиков 10, 20??? да даже если 50 в широковещательной сетке вероятность, что датчики (даже 2) проснутся в одно и то же время стремиться к нулю. Потому как посылка от датчика длится 2-3 миллисекунды, а то и меньше. Не заморачивайтесь, делайте датчики все мастерами, сеть в широковещательный режим, и всё будет работать. Данные передавайте с контролем чётности и будет вам счастье.
Я тоже за ESP32. Еще проще, уже всё на борту.