Передача данных на несколько ардуин

Patriot
Offline
Зарегистрирован: 25.06.2015

Преамбула:

В общем собираю большой проект, где используется куча ардинок: каждая ардиуна - это часть электронной панели кабины самолета. Они подключены к компьютеру на свой ком-порт и пишут туда данные о различных тублерах, энкодерах, кнопках и пр. информацию. А так же некоторые принимают данные и выводят на LCD-дисплеи. На компьютере сидет сервис, который коммутирует ардуины по ком-порту с авиасимулятором.

В общем-то все замечательно работает. Панелей собрано пока 5 штук, это 5 различных виртуальных ком-портов и 5 занятых USB. Всего будет собрано около 30 панелей. Вот хочу это все унифицировать, что бы была мастер-ардуина, которая будет коммутировать компьютер и слейв-ардуины в обе стороны. 

Почитав кучу информации, есть несколько вариантов, но какой из них лучше - не могу определиться:

1) Использоваться I2C для передачи. Прочел на одном англоязычном форуме, что при использовании большого кол-ва устройств (ардуин) возможны проблемы с передачей информации.

2) Использовать ethernet. Тут теоритически даже мастер-ардуина не нужна, и можно сразу на комп слать данные. Минусы - дороговизна, хоть и не значительная. Возможно, есть еще какие-то минусы, сильно не изучал этот вопрос.

3) Использовать RS-485. Пока считаю наиболее подходящим вариантом. Минус, что используется 3 пина, хотелось бы в два уложиться.

4) Использовать SoftwareSerial. Проблема в том, что как победить коллизию. Можно ввести общую шину, которая будет сигнализировать о занятости интерфейса, но что-то сомнительно. 

5) Написать свой протокол. Долго, мучительно и полюбому будет много багов :) Тут пока размышления в слух: это пин на прерывание, который будет сигнализировать что шина занята и идет отправка данных. В пакетах будет адресат, по которому ардуины будут знать, кому адресован пакет. Но чувствую, все же это велосипед и костыли. 

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

 

 

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Да соедини их  по кругу через UART

        Tx--->Rx Дуня1 Tx--->Rx Дуня2 Tx--->Rx Дуня3 Tx--->...--->Rx ДуняN Tx---
Комп                                                                                                                    |
        Rx<------------------------------------------------------------------------------------

и реализуй протокол типа "поймал пакет, если мой то обработал, если нет, то кинул дальше".

Arhat109
Offline
Зарегистрирован: 26.05.2015

... и получишь arcnet. :)

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Ну топология "кольцо" существовала и до arcnet. На самом деле есть всего три базовых технологии соединения девайсов в сеть: шина, звезда и кольцо.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Как обычно, очевидные решения никому не очевидны.
http://arduino.ru/forum/apparatnye-voprosy/polzuet-li-kto-wifi-moduli-es...

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Puhlyaviy пишет:
Как обычно, очевидные решения никому не очевидны. http://arduino.ru/forum/apparatnye-voprosy/polzuet-li-kto-wifi-moduli-esp8266-podelites-vpechatleniyami

ну это частный случай пункта 2), но при цене этого модуля и отсутствии необходимости тянуть провода этот вариант весьма хорош.

Patriot
Offline
Зарегистрирован: 25.06.2015

Хм. Заказал парочку wifi модулей, опробуем их. Что-то я о них даже не подумал.

 Насчет последовательного юарта - интересно. Насколько надежна передача? Потеря сигнала на каком расстояние может быть?

 

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Имхо, в Вашей задаче немного проще и дешевле будет на таких штуках сделать. По сути это будет вариант 5), но без проводов, а писать свой протокол не надо, все уже написано до нас :) 

Но на ESP8266, пожалуй,  перспективнее.

По расстоянию UART: оно не очень большое (единицы метров). Но что вам мешает сделать все-таки с центральной ардуиной, которая рядом с переферийными и соединена с ними в кольцо по UART. А уже она передает на комп через Wi-Fi или кабель.