Протокол связи Arduino с python — помимо примера pyserial и Arduino

TL;DR знает ли кто-нибудь о передовом и надежном/избыточном USB-протоколе для связи между raspberry pi и Arduino Due (собственный порт)

Я пытаюсь научиться создавать маленького робота, который, надеюсь, когда-нибудь станет автономным. Что касается аппаратного обеспечения, я использую Arduino Due и Raspberry Pi 3. Первый подключен к двигателям постоянного тока, сервоприводам, ультразвуковым датчикам, датчикам света и т. д. Пи отвечает за запуск пикама и отправку элементов управления с Xbox. контроллер к Arduino, а также запуск веб-интерфейса django. Короче говоря, я пытаюсь обеспечить надежную связь python с Arduino через serialusb (используя собственный порт), но безуспешно. Простой протокол связи, показанный в примере с Arduino, слишком слаб. Я нашел проект GitHub под названием arduino-robust-serial https://github.com/araffin/arduino-robust-serial который поначалу работал, но по причинам, которые довольно долго обсуждать здесь не хватило.

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

Надеюсь, я не слишком расплывчат. Но, глядя в Интернет, я изо всех сил пытаюсь найти ресурсы, касающиеся Arduino, которые не являются примерами мигания для начинающих.

Спасибо

, 👍1

Обсуждение

Какой протокол в каком "примере"?, @Majenko

Я имел в виду пример SerialEvent в IDE Arduino., @will.mendil

Ах, это. Это действительно не пример протокола. Только пример того, как вы можете делать что-то с SerialEvent. В любом случае SerialEvent глупо. Забудь это., @Majenko

Полезно знать, так что вы можете порекомендовать, как я могу заставить их говорить правильно и быстро, поскольку датчики должны передавать данные на пи в режиме реального времени?, @will.mendil

Очень сильно зависит от того, что это за данные и в каком количестве., @Majenko

Пи передает команду для управления двигателями. Желая расшириться, будущий питон отправляет имя мотора и значение. Плата Arduino отвечает за интерпретацию этого. С другой стороны, Arduino отправляет данные с 8 ультразвуковых датчиков как можно быстрее (в идеале каждые 50 мс), а также с датчика освещенности, который измеряет вращение колес (в основном в течение нескольких десятков миллисекунд). Мой вопрос был не совсем в том, как это сделать. Но скорее кто-то предложил последовательный протокол для таких вещей. иначе я бы удивился, @will.mendil

Вокруг много протоколов. У меня самого есть один, который называется [ICSC](https://github.com/MajenkoLibraries/ICSC), хотя подходит ли он вам или нет, я не могу сказать. Существует столько же способов передачи данных, сколько существует [котов, которые хотят снять шкуру](https://grammarist.com/phrase/more-than-one-way-to-skin-a-cat/). Возможно, вам сойдет с рук простой протокол ASCII (например, M1:213\n)., @Majenko

Почему простой протокол из примеров слишком слаб? Вы теряете данные с ним? Или в чем там проблема?, @chrisl

действительно, я пропускаю пакеты данных (например, двигатель продолжает вращаться, даже несмотря на то, что я отправил команду остановки), вероятно, потому, что буфер более чем часто заполнен. и поскольку я передаю данные с Arduino, я дохожу до некоторых моментов, когда все зависает. Излишне говорить, что я не использую его должным образом, поэтому я ищу примеры протоколов, таких как упомянутый здесь ICSC или arduino-робаст-сериал, чтобы увидеть, как люди это сделали. Я в основном не очень хорошо разбираюсь в реализации примера, показанного в IDE aruidon, и ищу то, что люди сделали до сих пор., @will.mendil

Если ваш код Arduino не может обрабатывать информацию достаточно быстро, у вас общая проблема. В тот или иной момент вы потеряете информацию с каждым протоколом связи, если не сможете обрабатывать информацию так же быстро, как она поступает. Буферы также заполнятся другими интерфейсами. Или ваши сообщения просто слишком длинные (более 6 байт)? Затем увеличьте размер буфера, @chrisl

*более 64 байт - в случае Serial. Не 6 байт, извините, опечатка, @chrisl

Может быть, если я переформулирую свой вопрос: какие существуют фреймворки для приложений робототехники, которые учитывают связь arduino с raspberry pi (я смотрю на ROS.org, хотя он не идеален для raspberry pi), существуют ли современные альтернативы?, @will.mendil

зачем ардуино передавать сигнал от датчика вращения колеса? ... эта часть системы должна оставаться в ардуино ... ардуино и колеса должны быть больше похожи на черепаху с логотипом ... RPi выдает команду «продвинуться вперед на 10 см», и ардуино делает это ... или «продвиньтесь вперед на 10 см, но остановитесь при столкновении и сообщите о фактическом пройденном расстоянии»., @jsotola


1 ответ


Лучший ответ:

1

Хорошо, спустя некоторое время в поисках чего-то, что позволило бы мне легко управлять arduino с помощью raspberry pi, я нашел протокол FIRMATA, который позволяет общаться с Arduino на многих языках. (фрагмент страницы github для целей SEO показан в конце этого сообщения).

Оттуда я искал фреймворки Python и имел долгую беседу с MrYsLab, который помог мне интегрировать Arduino благодаря его < a href="https://github.com/MrYsLab/pymata-aio">pymata и pymataExpress рамки. Они работают довольно хорошо и позволяют вам иметь скрипт, который быстро и эффективно взаимодействует с Arduino. Я уверен, что это правильные фреймворки с ros.org или gobot. лучше. Но pymata сработала для меня, поэтому я ответил на свой вопрос.

  1. обработка
  2. питон
  3. перл
  4. рубин
  5. кложур
  6. javascript
  7. ява
  8. .NET
  9. Флэш/AS3
  10. PHP
  11. Хаскелл
  12. iOS
  13. Дротик
  14. Макс./MSP
  15. Эликсир
  16. Модельика
  17. голанг
  18. Qt/QML
  19. Android/Котлин
  20. Тихая болтовня
,