Один Arduino собирает данные, несколько других Arduino используют данные. Каков простой способ сделать это?

Я ищу способ обмена несколькими байтами данных с одного Arduino на два или более дополнительных Arduino. Это односторонняя связь, и скорость не является проблемой. 10 Гц — это достаточно быстро.

Сборщик данных Arduino: У меня есть один Arduino с экранами SPI и I2C, который собирает и анализирует данные из CAN-BUS на мотоцикле. CAN-BUS передает много информации, но я фильтрую ее до небольшого количества информации, например, какие лампы горят, температура на впуске, частота вращения двигателя, какая передача.

Управление освещением Arduino: Этот Arduino должен знать, какие индикаторы горят. В зависимости от ближнего и дальнего света, указателей поворотов и т. д. он будет управлять дополнительными фарами, которые не являются частью оригинального велосипеда.

Управление двигателем Arduino: Этот Arduino должен знать текущие обороты, передачу и т. д. и работать с этими данными.

Вопрос в том, как мне «перенести» данные из сборщика данных на другие Arduino? Если бы это было немного проще, я бы подключил несколько цифровых выводов, которые сборщик данных записывал бы и остальные будут читать. Но для моих нужд пинов недостаточно, и зачем использовать 10 пинов, если достаточно двух.

Все Arduino используют устройства, подключенные к SPI и I2C, поэтому я не думаю, что использовать SPI или I2C для связи между Arduios — хорошая идея.

Думаю, последовательная связь будет работать с двумя Arduino, но не с тремя или даже более. Может быть, я мог бы использовать мультиплексирование или что-то в этом роде?

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

Что вы предлагаете? Я уверен, что есть простые решения, но я ничего не нашел. Я не против дополнительных микросхем.

Прежде чем кто-то предложит сделать все в одном Arduino: возможно, это будет возможно. Но мне очень нравится хранить модули (Arduino) отдельно, и я хочу иметь возможность добавлять другие позже, если захочу. Тогда я хочу только сменить ПО сборщика Arduino и не трогать остальные.

, 👍0

Обсуждение

почему бы не сделать все с помощью одного Arduino?, @Juraj


2 ответа


0

Вы можете сделать это, просто добавив дополнительные контакты RX и TX с помощью такой библиотеки, как Software Serial Library. Для справки вы можете перейти сюда https://www.arduino.cc/en/Tutorial/TwoPortReceive . Используя эту библиотеку, вы можете увеличить количество портов в главном Arduino и, вероятно, сможете передавать команды другим подчиненным командам Arduino через главный Arduino. Таким образом, каждый Arduino может общаться друг с другом.

,

Это также создает проблемы, поскольку одновременно вы можете прослушивать только один интерфейс SoftwareSerial. Но для односторонней связи это не проблема., @chrisl


2

Можно отправлять данные с одного Arduino одновременно на несколько других через последовательный порт (UART). Вы просто подключаете TX вашего главного Arduino к RX всех ведомых Arduino. Все принимающие Arduino получат одинаковые данные. Вам нужен только 1 контакт (для подключения отправителя TX к нескольким RX). Это немного ограничено количеством подчиненных устройств и скоростью, но здесь это не проблема (поскольку у вас их всего несколько).

Это односторонняя связь, поскольку на любой линии не должно быть более 1 TX (отправителя). Если у вас более одного TX на линии, вы сожжете свое оборудование, как только оба TX отправят данные одновременно.

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


Убедитесь, что Arduino имеют одно и то же заземление. Это необходимо для любой связи, если вы не используете дополнительное оборудование (например, оптрон).

,