Протокол связи 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. обработка
    • https://github.com/firmata/processing
    • http://funnel.cc
  2. питон
    • https://github.com/firmata/pyduino
    • https://github.com/lupeke/python-firmata
    • https://github.com/tino/pyFirmata
    • https://github.com/MrYsLab/PyMata
    • https://github.com/MrYsLab/pymata-aio
  3. перл
    • https://github.com/ntruchsess/perl-firmata
    • https://github.com/rcaputo/rx-firmata
  4. рубин
    • https://github.com/hardbap/firmata
    • https://github.com/PlasticLizard/rufinol
    • http://funnel.cc
  5. кложур
    • https://github.com/nakkaya/clodiuno
    • https://github.com/peterschwarz/clj-firmata
  6. javascript
    • https://github.com/jgautier/firmata
    • http://breakoutjs.com
    • https://github.com/rwldrn/johnny-five
  7. ява
    • https://github.com/4ntoine/Firmata
    • https://github.com/kurbatov/firmata4j
    • https://github.com/reapzor/FiloFirmata
  8. .NET
    • https://github.com/SolidSoils/Arduino
    • http://www.imagitronics.org/projects/firmatanet/
    • https://github.com/wbadry/FirmataCSharpClientClass
  9. Флэш/AS3
    • http://funnel.cc
    • http://code.google.com/p/as3glue/
  10. PHP
    • https://bitbucket.org/ThomasWeinert/carica-firmata
    • https://github.com/oasynnoum/phpmake_firmata
  11. Хаскелл
    • http://hackage.haskell.org/package/hArduino
  12. iOS
    • https://github.com/jacobrosenthal/iosfirmata
  13. Дротик
    • https://github.com/nfrancois/firmata
  14. Макс./MSP
    • http://www.maxuino.org/
  15. Эликсир
    • https://github.com/kfatehi/firmata
  16. Модельика
    • https://www.wolfram.com/system-modeler/libraries/model-plug/
  17. голанг
    • https://github.com/kraman/go-firmata
  18. Qt/QML
    • https://github.com/callaa/qfirmata
  19. Android/Котлин
    • https://github.com/xujiaao/android-firmata
  20. Тихая болтовня
    • https://github.com/pharo-iot/Firmata
,