двусторонний обмен данными по rs485

yden
Offline
Зарегистрирован: 30.01.2016

Здравствуйте.

Подскажите пожалуйста, возможно ли сделать следующиее. Проект безумного дома. Пока классика жанра - вентиляция и свет - отвечают отдельные 2 ардуино нано. Хочу поставить еще одну ардуинку, uno, выполняющую роль сервера, принимающая данные с ардуинок и посылающая свои команды им же. Хотелось бы использовать провода для свзязи и конвертер rs485.

Пример: 

вентиляция - ардуинка нано получает данные с датчиков dht22 и дергает релюшками в нужный момент. При этом информация о влажности и температуре отсылается серверу.

свет - так же ардуинка, датчик света, часы, реле. В нужный момент загорается свет. Где что светится отсылается серверу.

сервер - кроме сбора статистики выполняет роль посредника между ардуинками. Если поднята крышка горшка, замыкается геркон, ардуинка отвечающая за вентиляцию видит это и включает вытяжку на определнное время. Этот факт (сработал геркон) по rs485 попадает на сервер, он в свою очередь дает команду ардуинке, отвечающей за свет, включить свет в районе горшка. Конечно свет можно дергать и ардуинкой вентиляции, но хотелось бы разделить обязанности. Т.е в случае выхода из строя, например, сервера, основные функции климата и света работали. 

Как думаете, возможно?

Спасибо

Vania
Offline
Зарегистрирован: 14.03.2016

Кратко:

Я думаю самый простой через Modbus протокол: сервер - мастер сети опрашивает подчиненных (arduin-ки). Запрос - ответ, обмен идет массивом данных, работает отлично (реализовал в котельной с МСД200 и на вентиляции с ПЛК110 по Modbus RTU RS-485). Опрос примерно каждую секунду (от программы). Реализуется просто. Протокол используется в промышленности всеми ПЛК и прочими приборами. Библиотеки под arduino есть. Можно проверить через программу QModBus. Описаний протокола огромное колличество.

Есть обмен через CAN- шину (обмен может быть произвольный через выставление флага на передачу данных в линии и прочие молчат). Или собственный протокол. Но важно, чтобы в шине говорил кто-то один в момент времени, чтобы не было ошибок.

yden
Offline
Зарегистрирован: 30.01.2016

Описанная вами схема - клиент -> сервер. Но мне нужно клиент <-> сервер.

Logik
Offline
Зарегистрирован: 05.08.2014

Описан самый популярный подход. Инициатор обмена - только сервер. Он передает команды клиентам. Получив команду клиент отвечает, при этом и происходит передача данных от клиента к серверу.

yden
Offline
Зарегистрирован: 30.01.2016

Logik пишет:

Описан самый популярный подход. Инициатор обмена - только сервер. Он передает команды клиентам. Получив команду клиент отвечает, при этом и происходит передача данных от клиента к серверу.

спасибо.

Сервер может послать произвольное сообщение клиенту. Он, клиент, его прочитает, и если сообщение ему то пошлет ответ и выполнит указания сервера.

Я верно понял?

Logik
Offline
Зарегистрирован: 05.08.2014

да.