Передача данных на несколько ардуин
- Войдите на сайт для отправки комментариев
Преамбула:
В общем собираю большой проект, где используется куча ардинок: каждая ардиуна - это часть электронной панели кабины самолета. Они подключены к компьютеру на свой ком-порт и пишут туда данные о различных тублерах, энкодерах, кнопках и пр. информацию. А так же некоторые принимают данные и выводят на LCD-дисплеи. На компьютере сидет сервис, который коммутирует ардуины по ком-порту с авиасимулятором.
В общем-то все замечательно работает. Панелей собрано пока 5 штук, это 5 различных виртуальных ком-портов и 5 занятых USB. Всего будет собрано около 30 панелей. Вот хочу это все унифицировать, что бы была мастер-ардуина, которая будет коммутировать компьютер и слейв-ардуины в обе стороны.
Почитав кучу информации, есть несколько вариантов, но какой из них лучше - не могу определиться:
1) Использоваться I2C для передачи. Прочел на одном англоязычном форуме, что при использовании большого кол-ва устройств (ардуин) возможны проблемы с передачей информации.
2) Использовать ethernet. Тут теоритически даже мастер-ардуина не нужна, и можно сразу на комп слать данные. Минусы - дороговизна, хоть и не значительная. Возможно, есть еще какие-то минусы, сильно не изучал этот вопрос.
3) Использовать RS-485. Пока считаю наиболее подходящим вариантом. Минус, что используется 3 пина, хотелось бы в два уложиться.
4) Использовать SoftwareSerial. Проблема в том, что как победить коллизию. Можно ввести общую шину, которая будет сигнализировать о занятости интерфейса, но что-то сомнительно.
5) Написать свой протокол. Долго, мучительно и полюбому будет много багов :) Тут пока размышления в слух: это пин на прерывание, который будет сигнализировать что шина занята и идет отправка данных. В пакетах будет адресат, по которому ардуины будут знать, кому адресован пакет. Но чувствую, все же это велосипед и костыли.
В общем какие еще есть варианты на такое кол-во ардуин, какие возможны решения данной задачи? Возможно, не все еще учел, возможно есть какие-то другие варианты или плохо рассмотрел текущие.
Да соедини их по кругу через UART
Tx--->Rx Дуня1 Tx--->Rx Дуня2 Tx--->Rx Дуня3 Tx--->...--->Rx ДуняN Tx---┐
Комп |
Rx<------------------------------------------------------------------------------------┘
и реализуй протокол типа "поймал пакет, если мой то обработал, если нет, то кинул дальше".
... и получишь arcnet. :)
Ну топология "кольцо" существовала и до arcnet. На самом деле есть всего три базовых технологии соединения девайсов в сеть: шина, звезда и кольцо.
Как обычно, очевидные решения никому не очевидны.
http://arduino.ru/forum/apparatnye-voprosy/polzuet-li-kto-wifi-moduli-es...
ну это частный случай пункта 2), но при цене этого модуля и отсутствии необходимости тянуть провода этот вариант весьма хорош.
Хм. Заказал парочку wifi модулей, опробуем их. Что-то я о них даже не подумал.
Насчет последовательного юарта - интересно. Насколько надежна передача? Потеря сигнала на каком расстояние может быть?
Имхо, в Вашей задаче немного проще и дешевле будет на таких штуках сделать. По сути это будет вариант 5), но без проводов, а писать свой протокол не надо, все уже написано до нас :)
Но на ESP8266, пожалуй, перспективнее.
По расстоянию UART: оно не очень большое (единицы метров). Но что вам мешает сделать все-таки с центральной ардуиной, которая рядом с переферийными и соединена с ними в кольцо по UART. А уже она передает на комп через Wi-Fi или кабель.