Is there a way to "compile" Python code onto an Arduino (Uno)?

Question:

I have a robotics type project with an Arduino Uno, and to make a long story short, I am experimenting with some AI algorithms. However, I need to implement some high level matrix algorithms that would be quite simple using NumPy/SciPy, but they are an utter nightmare in C or C++. Even with the libraries out there, this is just getting ridiculous.

Is there any way I can do this project in Python? I think I heard something about the Mega having this capability, but I have an Uno, and replacing it is not an option at this point (that would set the project back quite a bit.) Also, I heard somethings about using Python to communicate to the Arduino via USB, but I cannot have the USB cable in while the thing is running. I need to be able to upload the program and be done with it.

Are there any options out there, or have I just reached a dead end?

Asked By: Alex Eftimiades

||

Answers:

There was a talk about using Python with robotics at this years PyConAU called Ah! I see you have the machine that goes ‘BING’! by Dr. Graeme Cross.

The only option he recommended for using Python on a microcontroller board was PyMite which I think also goes by the name of Python-On-A-Chip.

It has been ported to a range of boards – specifically he mentions the Arduino Mega which you said is not an option for you, but it is possible it is supported on other Arduino boards.

However, because it is a “batteries not included” version of Python it is more than likely that you will have a real problem getting numpy/scipy etc up and running.

As other posters have suggested, implementing in C might be the path of least resistence.

Update: again, not specifically for Arduino, but pyMCU looks to provide python on a chip. The author states he may look at developing an Arduino version of pyMCU if there is enough interest.

Answered By: Mark Streatfield

I’ve started work on a “Little Python” to C++ (called Pyxie – a play on Py CC- Pyc-C) compiler, with the specific aim of compiling a sane subset of python to C++ such that it can run on an arduino.

This is far from complete at time of writing (0.0.16), but it can currently compile a very small subset of python – enough for the arduino “blink” example to run. To support this, it has a compilation profile – which essentially means “compile using the arduino toolchain.”

A program it can compile looks like this:

led = 13

pinMode(led, OUTPUT)

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

This parses, performs analysis (like type inference, etc), compiles to C++, which is then compiled to a hex file, which you can load onto your device.

There’s a long way to go before it’s useful, but it is progressing and does have a roadmap/etc.

In particular a key difference from Micropython (and PyMite) is that it’s designed to compile to devices too small to run either implementation. (This also means it’s very different from things like ShedSkin which while a Python to C++ compiler target larger execution environments)

Answered By: Michael Sparks

It’s going to be difficult to get any kind of Python script running directly on the Arduino uno.Reason is that it is an interpreted language, so you will need a interpreter on-board in addition to the plain text script. There is probably not going to be enough memory for all of thatin arduino uno.

What you can do best is to find a way to compile a Python script to native machine code (this is how C/C++ works). I have seen projects around to do something like that for other platforms, but (as far as I know) none which does it successfully for Arduino uno yet.

you can visit http://www.toptechboy.com/using-python-with-arduino-lessons/ for more.

wish this will help you.
thanks!

Answered By: shubham kumar

This is not a direct solution but in your circumstances If I were you, I would write the AI program on my computer and the rest of it in Arduino. after that I would write a flask server with my AI program. and then, port forward from my router to the local machine. finally, make requests from Arduino to the server.

Answered By: Hyperx837
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.