Программирование Arduino с использованием Python, а не C/C ++

Я не очень хорошо разбираюсь в языке Си, и мне было интересно, есть ли способ использовать python для программирования Arduino. Скорее всего, для этого потребуется другая среда IDE, чтобы иметь возможность самостоятельно отлаживать скрипты.

, 👍41

Обсуждение

Есть пара альтернатив для программирования Arduino, одна из них - [BitLash] (http://bitlash.net /) и есть [базовый интерпретатор] (http://hackaday.com/2012/05/01/arduino-basic-interpreter-using-lcd-keyboard-and-sd /). Есть несколько вариантов, когда вы ищете в Интернете, но изучение C / C ++ в конце концов окупится., @jippie

Спасибо, на самом деле я немного лучше разбираюсь в C, просто не так хорошо, как в Python., @JVarhol

связанный, более общий вопрос: ["Параметры программирования Arduino, отличные от C ++"](http://arduinoprosto.ru/q/141/programming-options-other-than-c ), @David Cary

Является ли raspberry PI вариантом?, @Paul


10 ответов


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

27

Будет чрезвычайно сложно запустить какой-либо скрипт Python непосредственно на Arduino. Причина в том, что это интерпретируемый язык, поэтому вам понадобится переводчик на борту в дополнение к обычному текстовому сценарию. Вероятно, для всего этого не хватит памяти.

Вероятно, лучше всего было бы найти способ скомпилировать скрипт Python в машинный код (именно так работает C / C ++). Я считаю, что есть проекты, чтобы сделать что-то подобное для других платформ, но (насколько я знаю) ни один из них не делает это успешно для Arduino.

Вы можете найти более полезную информацию по этому вопросу в Stack Overflow: есть ли способ "скомпилировать" код Python на Arduino (Uno).

,

17

Да, (в некоторой степени) можно запрограммировать Arduino с помощью Python. Одним из таких проектов на Github является Python Arduino Prototyping API v2. Он обеспечивает очень простую функциональность, такую как цифровой ввод-вывод и аналоговый ввод-вывод.

Это можно использовать для очень простых проектов.


* Этот проект - своего рода взлом при "программировании" платы с помощью последовательного соединения. Он передает команды по последовательному соединению скетчу, работающему на плате, который затем "выполняет" команду Python.

,

Значит, плата должна быть подключена к компьютеру, чтобы действительно запустить код?, @JVarhol

@JVarhol Как ни странно, да., @asheeshr

Ну, это довольно дерьмово. Было бы проще использовать Raspberry Pi., @JVarhol


9

Существует проект, который переносит виртуальную машину Python на микроконтроллеры, включая Arduino Mega.

Вот цитата из Ardunio Mega README, которая дает представление о том, как это может быть (хотя я этого не тестировал!):

Ниже приведен пример сеанса с использованием ipm::

ipm> import avr, sys
ipm> avr.ddrA(0xff)
ipm> avr.portA(0)       # Pins 22-29 all at 0 V
ipm> avr.portA(0xa5)
ipm> sys.heap()
(2622, 7424)
,

4

Я с большим успехом использовал pyserial для управления контактами на arduino. Ваша рабочая станция (ноутбук и т. Д.) запускает скрипт python, который затем связывается в режиме реального времени с arduino.

Это не совсем то же самое, что запустить скрипт непосредственно на arduino, но я делал гораздо больше, чем думал, что arduino может справиться (некоторый анализ музыки, использование REST api и т. Д.).

,

1

Мы знаем, что это открытая проблема в программировании Arduino и во встроенном мире в целом. На рынке существуют различные решения, такие как MicroPython, но большинство из них посвящены конкретным платам и не позволяют поддерживать систему в режиме реального времени. Мы работаем над решением! VIPER - это виртуальная машина Python для Arduino DUE и всех 32-битных архитектур ARM, которая работает поверх операционной системы реального времени. Это означает, что вы можете разрабатывать скрипты Python, которые могут быть реализованы Arduino DUE, UDOO, Spark (все платы), а также на новых платах ST nucleo. Кроме того, если вам нужна высокая производительность и вы владеете языком Си, вы можете разработать модули реального времени для VIPER, которые могут вызываться и управляться скриптами Python.

Вы можете увидеть VIPER в действии здесь http://bit.ly/kickviper

,

Это не открытый вопрос. python - ужасный язык отступов., @user2497


2

Еще один вариант, который следует рассмотреть, - это Arduino Yun. В дополнение к чипу AVR, который есть у большинства ардуино, он также включает в себя чип MIPS под управлением Linux. Поскольку это linux, вы можете легко запускать код python, и любой пакет pure-python может быть легко установлен.

Однако все интересные возможности ввода-вывода находятся на чипе AVR, а не на чипе MIPS. Такие проекты, как Autobahn и LininoIO, решают эту проблему путем запуска специальной программы на чипе AVR, которая выполняет операции ввода-вывода по инструкции от чипа MIPS.

,

1

ДА. Python можно использовать для программирования Arduino, просто импортировав pyfirmata, который может взаимодействовать с arduino с Python.

,

Верно. Но это не то, о чем просит ОП., @sempaiscuba

Я не согласен. Использование firmata - это _effectively_ "программирование Arduino" с использованием python. На самом деле я был удивлен, увидев, что никто больше не предложил этого. С точки зрения новичка это почти то же самое. Я подумываю использовать его, чтобы помочь научить моего сына программированию, так как python немного проще, чем C., @Dave Griffiths


1

Вы могли бы узнать из C (AVR), как работают датчики, но для этого требуется гораздо больше времени. Код Arduino IDE и код Python для Arduino используют функции C-кода, чтобы упростить задачу. Python и Arduino IDE если используют Firmata, они используют последовательную связь, и вы думаете, что кодируете себя.

,

2

Да, это возможно с недавним новым ArduinoPro H7, который имеет возможность загружать написанную программу на Python и JavaScript и имеет двухъядерный 32-битный процессор.

,

Java-скрипт? правда? вы пробовали это сделать?, @Juraj


0

Ты должен использовать pyfirmata, потому что это единственный способ сделать твоего сына ПРОФЕССИОНАЛЬНЫМ инженером, который делает роботов. Кроме того, python может делать более продвинутые вещи, поэтому используйте pyfirmata.

,