Есть ли способ "скомпилировать" код Python на Arduino (Uno)? - PullRequest
54 голосов
/ 14 ноября 2011

У меня есть проект типа робототехники с Arduino Uno , и, если коротко, я экспериментирую с некоторыми алгоритмами ИИ.Однако мне нужно реализовать некоторые матричные алгоритмы высокого уровня, которые были бы довольно простыми с использованием NumPy / SciPy , но они являются настоящим кошмаром на C или C ++.Даже с библиотеками это просто смешно.

Есть ли какой-нибудь способ, которым я могу сделать этот проект на Python?Я думаю, что слышал что-то о Mega , имеющем эту возможность, но у меня есть Uno, и замена его на данный момент не вариант (это может немного сбить проект). Кроме того, я слышалкое-что об использовании Python для связи с Arduino через USB, но я не могу подключить USB-кабель во время работы.Мне нужно иметь возможность загрузить программу и покончить с ней.

Есть ли какие-либо варианты или я только что зашел в тупик?

Ответы [ 3 ]

21 голосов
/ 15 ноября 2011

В эти годы шла речь об использовании Python с робототехникой PyConAU под названием Ах! Я вижу, у вас есть машина с надписью "BING"! от доктора Грэма Кросса.

Единственный вариант, который он рекомендовал для использования Python на плате микроконтроллера, был PyMite , который, как мне кажется, также называется Python-On-A-Chip .

Он был портирован на ряд плат - в частности, он упоминает Arduino Mega, который, как вы сказали, не подходит для вас, но, возможно, он поддерживается на других платах Arduino.

Однако, поскольку это версия Python «без батарей», более чем вероятно, что у вас возникнут реальные проблемы с запуском numpy / scipy и т. Д.

Как предлагали другие авторы, реализация на C может быть путем наименьшего сопротивления.

Обновление: снова , не специально для Arduino, но pyMCU выглядит для обеспечения python на чипе. Автор утверждает, что он может взглянуть на разработку Arduino-версии pyMCU, если будет достаточно интереса.

5 голосов
/ 03 августа 2015

Я начал работу над компилятором "Little Python" для C ++ (он называется Pyxie - игра на Py CC-Pyc-C), с конкретной целью компиляции разумного подмножества Python для C ++ такой, что он может работать на Arduino.

Это далеко не завершено на момент написания (0.0.16), но в настоящее время он может скомпилировать очень маленькое подмножество python - достаточно для запуска примера "blink" в arduino. Для поддержки этого у него есть профиль компиляции - что по сути означает «компилировать с помощью набора инструментов arduino».

Программа, которую можно скомпилировать, выглядит следующим образом:

led = 13

pinMode(led, OUTPUT)

while True:
  digitalWrite(led, HIGH)
  delay(1000)
  digitalWrite(led, LOW)
  delay(1000)

Это анализирует, выполняет анализ (например, вывод типа и т. Д.), Компилируется в C ++, который затем компилируется в шестнадцатеричный файл, который вы можете загрузить на свое устройство.

Есть долгий путь, прежде чем он будет полезен , но он прогрессирует и имеет дорожную карту / и т.д.

В частности, ключевым отличием от Micropython (и PyMite) является то, что он предназначен для компиляции на устройства, слишком маленькие для запуска любой реализации. (Это также означает, что он сильно отличается от таких вещей, как ShedSkin, который в то время как компилятор с Python на C ++ предназначен для больших сред выполнения)

1 голос
/ 11 сентября 2018

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

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

Вы можете посетить http://www.toptechboy.com/using-python-with-arduino-lessons/ для более.

желаю, чтобы это тебе помогло. спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...