Один 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 и не трогать остальные.
@Edgar, 👍0
Обсуждение2 ответа
Вы можете сделать это, просто добавив дополнительные контакты RX и TX с помощью такой библиотеки, как Software Serial Library. Для справки вы можете перейти сюда https://www.arduino.cc/en/Tutorial/TwoPortReceive . Используя эту библиотеку, вы можете увеличить количество портов в главном Arduino и, вероятно, сможете передавать команды другим подчиненным командам Arduino через главный Arduino. Таким образом, каждый Arduino может общаться друг с другом.
Это также создает проблемы, поскольку одновременно вы можете прослушивать только один интерфейс SoftwareSerial. Но для односторонней связи это не проблема., @chrisl
Можно отправлять данные с одного Arduino одновременно на несколько других через последовательный порт (UART). Вы просто подключаете TX вашего главного Arduino к RX всех ведомых Arduino. Все принимающие Arduino получат одинаковые данные. Вам нужен только 1 контакт (для подключения отправителя TX к нескольким RX). Это немного ограничено количеством подчиненных устройств и скоростью, но здесь это не проблема (поскольку у вас их всего несколько).
Это односторонняя связь, поскольку на любой линии не должно быть более 1 TX (отправителя). Если у вас более одного TX на линии, вы сожжете свое оборудование, как только оба TX отправят данные одновременно.
Я помню некоторые сайты, на которых утверждалось, что можно также использовать UART с несколькими отправителями, если вы придерживаетесь протокола и устанавливаете какое-то защитное оборудование (я думаю, они использовали диоды и токоограничивающие резисторы). Но здесь это несколько выходит за рамки. Если вам действительно нужна двусторонняя связь, возможно, вам следует переосмыслить всю структуру вашего решения. Как предположил Юрай в своем комментарии, тогда, возможно, будет проще объединить функции с меньшим количеством Arduino.
Убедитесь, что Arduino имеют одно и то же заземление. Это необходимо для любой связи, если вы не используете дополнительное оборудование (например, оптрон).
- Как заставить Arduino взаимодействовать с тремя другими Ардуино?
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
- Последовательная связь между ESP8266 и Arduino Uno
- Отправка значения с одного Arduino на другой
- SIM900 3G? Или SIM900A умеет подключаться к 3G?
- Контакты RX и TX на esp32
- Связь Arduino master/slave с использованием RS485
- Клиент MQTT на Arduino + SIM900
почему бы не сделать все с помощью одного Arduino?, @Juraj