Подключите несколько ардуино к RTC ESP32?

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

https://forum.arduino.cc/index.php?topic=64049.0

Мне нужно, чтобы события, выполняемые в нескольких принимающих Arduino, происходили синхронно (одновременно). Есть ли библиотека или что-то еще, возможно, использующее RTC ESP32, чтобы обеспечить синхронизацию событий?

Пример системы:

  • Отправитель/мастер ESP32
  • Приемник Arduino1, управляющий светодиодами (рождественские огни)
  • Приемник Arduino2, управляющий шаговыми двигателями (см. рисунок)
  • Приемник Arduino3, управляющий шаговыми двигателями (рисунок Джозефа)

Проблема в том, что они посылают данные в разное время пользователем.

Скажем, пользователь выбирает настройки для Мэри. Эти данные отправляются на ESP32, а затем на все ардуино, но только "попадают" в MaryArduino.

Затем пользователь выбирает настройки для освещения. Эти данные отправляются в ESP32, а затем данные отправляются во все ардуино, но только "попадают в LightsAruino".

И т. Д.

Однако мне нужно, чтобы все началось одновременно.

Данные передаются не одновременно. Он отправляется один за другим, так же медленно, как пользователь выбирает свои настройки. Однако последовательность событий должна происходить одновременно.

, 👍-1

Обсуждение

перемещение привода, включение света, запуск шагового двигателя на несколько шагов и т. Д., @adamaero

почему свет и привод должны быть синхронизированы? ... какова их цель?, @jsotola

События должны происходить в определенное время: Подумайте о световом шоу, синхронизированном с музыкой., @adamaero

Я сказал: "События, выполняемые в приемном Arduino_>>>_'s_<<_" но я снова отредактировал пост с несколькими входами (помимо того, что он уже был в названии)., @adamaero

Вы заявляете: "Мне нужно, чтобы события, выполняемые в нескольких приемных Arduino, происходили синхронно". Какой допуск вы можете позволить, это будет иметь большое влияние на правдоподобность и стоимость дизайна. Ваше программное обеспечение разработано таким образом, и вы знаете, сколько тактов каждый пульт будет делать перед выполнением задачи, они должны быть одинаковыми, чтобы быть полностью синхронизированными. Если нет, то как вы компенсируете эту разницу и как вы обнаружите ошибку., @Gil

свет, синхронизированный с музыкой, не является примером одновременных событий, насколько это касается микроконтроллера ... он должен только выглядеть синхронизированным с человеком ... микроконтроллер может уйти в отпуск между двумя событиями и эти два события все равно будут выглядеть одновременными для человека, @jsotola

Свет, синхронизированный с музыкой, ЯВЛЯЕТСЯ примером одновременных событий, поскольку они оба выполняются разными Arduino (поскольку именно так это значимо связано с заданным вопросом)., @adamaero

@Gil Не было разработано никакого программного обеспечения. Вот почему я изучаю этот вопрос. Идея состоит в том, чтобы использовать RTC ESP32, подключенный к нескольким приемным ардуино. ESP - это отправитель. Скажем, три связаны. Все трое должны были выйти из RTC ESP32., @adamaero

непонятно, из чего состоит вся система в целом ... возможно, самым простым решением является наличие аппаратного тактового сигнала, который соединяет все ардуино, @jsotola

Итак, соберите данные от отправителя и удерживайте их до тех пор, пока не будет отправлен цифровой сигнал? Например, огни получают песню, фигура1 получает последовательность движений, затем фигура2 получает последовательность движений. Как только произойдет последнее событие, подождите часть секунды и пошлите цифровой ВЫСОКИЙ сигнал. И просто иметь простое if-утверждение, ожидающее этого сигнала?, @adamaero

используйте серийный номер, ESP32 имеет 3 из них и возможность делать гораздо больше. AVR делают что-то, когда им говорят, чтобы они были более последовательными. ESP32 говорит им, что делать по сериалу. Даже если на микроскопическом уровне сообщения будут разнесены на микросекунды, это не будет иметь большого значения для светового шоу или даже для большинства научных экспериментов., @dandavis

Я использую одно последовательное соединение для отправки команд всем ардуино (10-30). @dandavis Вы предлагаете использовать одно и то же последовательное соединение или 10-30 дополнительных последовательных выходов? Последнее, как вы знаете, на самом деле невозможно., @adamaero

@adamaero, по иронии судьбы, вы можете подключать последовательный порт параллельно. если ваш высокоуровневый протокол позволяет всем узлам получать одну и ту же широковещательную передачу, как правило, каждый из них имеет ИДЕНТИФИКАТОР/тег, в котором он "заинтересован" ala wifi/i2c, то реального ограничения нет. Если каждая линия должна передавать разные сообщения, то вы все равно можете легко сделать дюжину или две с ESP32, так как вам нужен только TXs, и у него есть целая чертова куча контактов ;), @dandavis

Да, у меня уже есть адрес для каждого Arduino: if(charArr1[0] == motionHead) strcpy(str2, charArr1); Всем им посылаются одни и те же данные, но только каждый из них получает свои специфические данные., @adamaero

затем просто соедините все ведомые RX вместе с TX хозяина, а затем отошлите. При таком формате сообщения, как "МЭРИ=1;КРАСНЫЙ=1", при скорости 57 тысяч бод мэри и красный свет включатся одновременно (доля мс) даже для высокоскоростной камеры, а тем более для человека., @dandavis

Давайте [продолжим эту дискуссию в чате](https://chat.stackexchange.com/rooms/120058/discussion-between-adamaero-and-dandavis)., @adamaero

Попробуйте эту ссылку для статьи Autosar Спецификация синхронизации времени по CAN: https://www.autosar.org/fileadmin/user_upload/standards/classic/4-3/AUTOSAR_SWS_TimeSyncOverCAN.pdf В нем много хорошей информации., @Gil


1 ответ


1

Дайте ведущему устройству один сигнальный провод, подключенный ко всем ведомым устройствам, и этот сигнал будет НИЗКИМ, пока ведущий посылает команды каждому ведомому. Пусть каждый из подчиненных Arduino просто хранит свое сообщение, но не действует на него, пока сигнальный провод разряжен.

Когда предполагается, что ведомые устройства начнут работать, поднимите уровень сигнала до ВЫСОКОГО. Каждый подчиненный Arduino теперь выполняет любую команду, которую он был отправлен. Теперь RTC нужно только подключить к Ведущему устройству, которое контролирует все время.

,