Есть ли способ "скомпилировать" код Python на Arduino (Uno)?
У меня есть проект типа робототехники с Arduino Uno, и, чтобы сделать короткую историю, я экспериментирую с некоторыми алгоритмами AI. Тем не менее, мне нужно реализовать некоторые высокоуровневые матричные алгоритмы, которые были бы довольно простыми, используя NumPy/SciPy, но они являются полным кошмаром на C или С++. Даже с библиотеками, это просто смешно.
Есть ли способ сделать этот проект в Python? Я думаю, что я слышал что-то о Mega, имеющем эту возможность, но у меня есть Uno, и замена на этот момент не является опцией (что бы установить проект немного назад.) Кроме того, я слышал кое-что о том, как использовать Python для связи с Arduino через USB, но я не могу подключить USB-кабель во время работы. Мне нужно иметь возможность загружать программу и выполнять ее.
Есть ли какие-либо варианты там, или я только что достиг тупика?
Ответы
Ответ 1
Был разговор об использовании Python с робототехникой в эти годы PyConAU под названием Ах! Я вижу, что у вас есть машина, которая идет "BING" ! от доктора Грэма Креста.
Единственный вариант, который он рекомендовал для использования Python на плате микроконтроллера, был PyMite, который, я думаю, также называется именем Python-On-A-Chip.
Он был перенесен на ряд плат - в частности, он упоминает, что Arduino Mega, который вы сказали, не является для вас вариантом, но возможно, что он поддерживается на других досках Arduino.
Однако, поскольку это версия Python, не включенная в поставку, более вероятно, что у вас возникнут проблемы с запуском и запуском numpy/scipy и т.д.
Как и предполагали другие плакаты, реализация в C может быть наименьшим сопротивлением.
Обновление: опять же, не специально для Arduino, но pyMCU предлагает предоставить python на чипе. Автор утверждает, что он может изучить разработку Arduino версии pyMCU, если этого достаточно.
Ответ 2
Я начал работу над "Маленьким Python" на С++ (называемый Pyxie - игра на Py CC-Pyc-C) с конкретной целью компиляции подмножества подпрограмм python на С++, чтобы он мог работать на arduino.
Это далеко не полностью на момент написания (0.0.16), но в настоящее время он может скомпилировать очень небольшое подмножество python - достаточно для запуска "мигания" arduino. Чтобы поддержать это, у него есть профиль компиляции, который по существу означает "скомпилировать с помощью инструментальной цепочки arduino".
Программа, которую он может скомпилировать, выглядит следующим образом:
led = 13
pinMode(led, OUTPUT)
while True:
digitalWrite(led, HIGH)
delay(1000)
digitalWrite(led, LOW)
delay(1000)
Это анализирует, выполняет анализ (например, вывод типа и т.д.), компилируется в С++, который затем скомпилируется в шестнадцатеричный файл, который вы можете загрузить на свое устройство.
До этого он должен пройти длинный путь полезный, но он прогрессирует и имеет дорожную карту и т.д.
В частности, ключевое отличие от Micropython (и PyMite) заключается в том, что оно предназначено для компиляции устройств, слишком малых для запуска либо реализации. (Это также означает, что он очень отличается от таких вещей, как ShedSkin, который, хотя компилятор Python для С++ нацелен на более крупные среды выполнения)