Протокол связи 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, которые не являются примерами мигания для начинающих.
Спасибо
@will.mendil, 👍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 сработала для меня, поэтому я ответил на свой вопрос.
- обработка
- https://github.com/firmata/processing
- http://funnel.cc
- питон
- 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
- перл
- https://github.com/ntruchsess/perl-firmata
- https://github.com/rcaputo/rx-firmata
- рубин
- https://github.com/hardbap/firmata
- https://github.com/PlasticLizard/rufinol
- http://funnel.cc
- кложур
- https://github.com/nakkaya/clodiuno
- https://github.com/peterschwarz/clj-firmata
- javascript
- https://github.com/jgautier/firmata
- http://breakoutjs.com
- https://github.com/rwldrn/johnny-five
- ява
- https://github.com/4ntoine/Firmata
- https://github.com/kurbatov/firmata4j
- https://github.com/reapzor/FiloFirmata
- .NET
- https://github.com/SolidSoils/Arduino
- http://www.imagitronics.org/projects/firmatanet/
- https://github.com/wbadry/FirmataCSharpClientClass
- Флэш/AS3
- http://funnel.cc
- http://code.google.com/p/as3glue/
- PHP
- https://bitbucket.org/ThomasWeinert/carica-firmata
- https://github.com/oasynnoum/phpmake_firmata
- Хаскелл
- http://hackage.haskell.org/package/hArduino
iOS
- https://github.com/jacobrosenthal/iosfirmata
- Дротик
- https://github.com/nfrancois/firmata
- Макс./MSP
- http://www.maxuino.org/
- Эликсир
- https://github.com/kfatehi/firmata
- Модельика
- https://www.wolfram.com/system-modeler/libraries/model-plug/
- голанг
- https://github.com/kraman/go-firmata
- Qt/QML
- https://github.com/callaa/qfirmata
- Android/Котлин
- https://github.com/xujiaao/android-firmata
- Тихая болтовня
- https://github.com/pharo-iot/Firmata
- Построение графика на Python с использованием Tkinter Canvas
- Serial Comm. проблема синхронизации между Arduino и Pyserial
- Связь между Python и Arduino ненадежна
- Каков наилучший (самый быстрый и надежный) способ отправки сообщений между Python на ПК и Arduino через последовательный порт?
- `time.sleep` в скрипте python чтение последовательного вывода вызывает неустойчивое поведение
- Собственный USB-порт Arduino и Simulink
- Не удается связаться с ардуино с помощью python (Windows)
- Последовательная связь между ESP8266 и Arduino Uno
Какой протокол в каком "примере"?, @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