Взаимодействие комплекса датчиков. Нужен совет.

gin87
Offline
Зарегистрирован: 15.03.2016
Всем привет.
 
Разрабатываю комплекс датчиков для дома. Суть такая: будет несколько датчиков:
 
- датчик температуры, влажности давления на улице.
 
- датчики температуры, углекислого газа в доме по комнатам
 
- датчики температуры воды в отопительной системе и прочее.
 
Все датчики будут иметь аккумуляторное питание и pro mini как мозг.
 
Будет один сервер на базе Node mcu. Работает от сети.
 
Данные с датчиков будут сливаться на сервер, а с сервера через рутер на народный мониторинг или на приложение смартфона или еще куда душа пожелает.
 
Также будут периферийные устройства, кот. будут запрашивать температуру с сервера. Ну типа экран висит на кухне, нажал на кнопку он запросил у сервака темпу на улице и вывел на экран, посветил 10 секунд и выключился.
 
Собственно вопрос: как организовать протокол обмена? Между датчиками и сервером будет связь по радиоканалу посредством HC12. Он спать не умеет. В режиме прослушки эфира жрет миллиамперы. Поэтому делать планирую так. Датчик проснулся, включает полевиком НС-12, измеряет температуру или еще что-то там. шлет на сервер, выключает HC12, ложится спать.
 
Так вот если будет несколько датчиков, ну десять штук, как их всех выстроить в очередь? Чтобы не забивали друг друга и данные не терялись?
 
Есть идея такая, проснулся и с периодом раз в 250 мс шлем данные, пока сервер не ответит, что принял. Но не больше 10 попыток. А то будет так слать, пока батарея не сдохнет.
 
rkit
Offline
Зарегистрирован: 23.11.2016

gin87 пишет:

 Он спать не умеет.

Умеет.

Но вообще ты пытаешься собрать максимально дешево и на этом прогоришь.

b707
Offline
Зарегистрирован: 26.05.2017

gin87 пишет:

 связь по радиоканалу посредством HC12. Он спать не умеет.

умеет, читайте документацию
gin87
Offline
Зарегистрирован: 15.03.2016

b707 пишет:

gin87 пишет:

 связь по радиоканалу посредством HC12. Он спать не умеет.

умеет, читайте документацию

Спасибо, почитаю, но вопрос был не в этом.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Зачем очередь?
Нода- мастер, по необходимости запрашивает датчики пакетом с идентификатором-адресом датчика.

датчики-слэйвы слушают канал, запрос обрабатывает только датчик с адресом совпадающим адрес в запросе.

b707
Offline
Зарегистрирован: 26.05.2017

gin87 пишет:

Датчик проснулся, включает полевиком НС-12, измеряет температуру или еще что-то там. шлет на сервер, выключает HC12, ложится спать.

проснулся и с периодом раз в 250 мс шлем данные, пока сервер не ответит, что принял. Но не больше 10 попыток.
 

нормальная идея. что еще надо?

b707
Offline
Зарегистрирован: 26.05.2017

inspiritus пишет:

датчики-слэйвы слушают канал, запрос обрабатывает только датчик с адресом совпадающим адрес в запросе.

и что, hc-12 вечно в прослушке? - помоему вы задачу недочитали

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

gin87 пишет:

Собственно вопрос: как организовать протокол обмена? 

Собственно ответ - вот здесь подробная статья о разных протоколах для умного дома и сравнение их между собой. А вот здесь сравнений поменьше, зато протоколов побольше.

Upper
Offline
Зарегистрирован: 23.06.2020

gin87 пишет:

Так вот если будет несколько датчиков, ну десять штук, как их всех выстроить в очередь? Чтобы не забивали друг друга и данные не терялись?
 
 
Простой вариант. Если вы можете получать ответы от сервера, то распределите посылки датчиков по времени. А в ответе сервера можно получать время сервера, и корректировать время датчика.
 
Дополнено позже. Я не учел, что датчики спят, и таймеры WDT могут иметь большой разброс, и надо или калибровать или еще чего. Так что вариант не очень рабочий.
Upper
Offline
Зарегистрирован: 23.06.2020

b707 пишет:

inspiritus пишет:

датчики-слэйвы слушают канал, запрос обрабатывает только датчик с адресом совпадающим адрес в запросе.

и что, hc-12 вечно в прослушке? - помоему вы задачу недочитали

Сервер постоянно посылает запросы, а датчик как проснется, дождется свой запрос и ответит.

gin87
Offline
Зарегистрирован: 15.03.2016

Как вам такой вариант. Сервер все время слушает. Как только просыпается любой из датчиков он сначала выжидает время большее чем надо для общения с одним датчиком(чтобы не вклиниться в разговор), потом шлет команду "1 проснулся". Как только сервер получил команду 1 проснулся, его и опрашивает, а потом говорит "1 - спать". Если любой из датчиков проснется в процессе выжидания времени 1 или во время передачи, он будет сначала ждать освобождения канала, а уж потом сообщать, что проснулся, если во время ожидания прилетит байт, время ожидания обнуляется. таким образом все по очереди будут передавать.

 

rkit
Offline
Зарегистрирован: 23.11.2016

Чувак, возьми esp32, подключи к вайфаю, и не страдай ерундой.

SAB
Offline
Зарегистрирован: 27.12.2016

Сколько у вас планируется датчиков 10, 20??? да даже если 50 в широковещательной сетке вероятность, что датчики (даже 2) проснутся в одно и то же время стремиться к нулю. Потому как посылка от датчика длится 2-3 миллисекунды, а то и меньше. Не заморачивайтесь, делайте датчики все мастерами,  сеть в широковещательный режим, и всё будет работать. Данные передавайте с контролем чётности и будет вам счастье.

Я  тоже за ESP32. Еще проще, уже всё на борту.