Programmieren eines Arduino mit Python anstelle von C / C ++

36

Ich bin nicht sehr gut mit der C-Sprache vertraut und habe mich gefragt, ob es eine Möglichkeit gibt, mit Python ein Arduino zu programmieren. Dies würde höchstwahrscheinlich eine andere IDE erfordern, um die Skripte selbst debuggen zu können.

JVarhol
quelle
2
Es gibt einige Alternativen zum Programmieren von Arduino, eine davon ist BitLash und es gibt einen grundlegenden Interpreter . Beim Durchsuchen des Internets gibt es einige Optionen, aber das Erlernen von C / C ++ wird sich am Ende auszahlen.
jippie
Danke, in C werde ich tatsächlich ein bisschen besser, nur nicht so gut wie in Python.
JVarhol
2
verwandte, allgemeinere Frage: "Arduino-Programmieroptionen außer C ++"
David Cary
Ist ein Himbeer-PI eine Option?
Paul

Antworten:

26

Es wird extrem schwierig sein, Python-Skripte direkt auf dem Arduino zum Laufen zu bringen. Der Grund dafür ist, dass es sich um eine interpretierte Sprache handelt, sodass Sie zusätzlich zum Nur-Text-Skript den Dolmetscher an Bord benötigen. Es wird wahrscheinlich nicht genug Speicher für all das geben.

Ihre beste Wahl wäre wahrscheinlich, einen Weg zu finden, um ein Python-Skript in nativen Maschinencode zu kompilieren (so funktioniert C / C ++). Ich glaube, es gibt Projekte, die so etwas für andere Plattformen tun, aber (soweit ich weiß) keine, die es für Arduino noch erfolgreich machen.

Sie könnten einige weitere nützliche Informationen über diese Frage auf Stack - Überlauf finden: Gibt es eine Möglichkeit, „Kompilierung“ Python - Code auf einem Arduino (Uno) .

Peter Bloomfield
quelle
15

Ja, es ist (etwas) möglich, das Arduino mit Python zu programmieren. Ein solches Projekt auf Github ist die Python Arduino Prototyping API v2 . Es bietet sehr grundlegende Funktionen wie digitale E / A und analoge E / A.

Dies kann für sehr einfache Projekte verwendet werden.


* Dieses Projekt ist ein bisschen ein Hack beim "Programmieren" der Karte über die serielle Verbindung. Die Befehle werden über die serielle Verbindung an eine Skizze weitergeleitet, die auf der Platine ausgeführt wird und dann den Python-Befehl "ausführt".

Ascheshr
quelle
Das Board muss also an einen Computer angeschlossen sein, damit der Code ausgeführt werden kann?
JVarhol
Seltsamerweise ja.
Asheeshr
1
Nun, das ist ziemlich beschissen. Es wäre einfacher, einen Himbeer-Pi zu verwenden.
JVarhol
8

Es gibt ein Projekt, das eine virtuelle Python-Maschine auf Mikrocontroller bringt , einschließlich des Arduino Mega .

Hier ist ein Zitat aus der Ardunio Mega README , das ein Gefühl dafür gibt, wie das sein könnte (obwohl ich das nicht getestet habe!):

Das Folgende ist eine Beispielsitzung mit 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)
Matthew G.
quelle
3

Ich habe Pyserial mit großem Erfolg bei der Steuerung der Stifte auf dem Arduino verwendet. Auf Ihrer Workstation (Laptop usw.) wird ein Python-Skript ausgeführt, das dann in Echtzeit mit dem Arduino kommuniziert.

Es ist nicht ganz das gleiche wie das Ausführen des Skripts direkt auf dem Arduino, aber ich habe ziemlich viel mehr getan, als ich dachte, dass das Arduino damit umgehen kann (einige Musikanalysen, Schlagen einer REST-API usw.).

Nicken
quelle
3

Eine weitere Option ist das Arduino Yun . Zusätzlich zum AVR-Chip, den die meisten Arduinos haben, enthält er auch einen MIPS-Chip, auf dem Linux ausgeführt wird. Da es sich um Linux handelt, können Sie problemlos Python-Code ausführen und jedes reine Python-Paket kann problemlos installiert werden.

Die gesamte interessante Eingabe- / Ausgabefunktion befindet sich jedoch auf dem AVR-Chip, nicht auf dem MIPS-Chip. Projekte wie Autobahn und LininoIO lösen dieses Problem, indem sie ein spezielles Programm auf dem AVR-Chip ausführen , das E / A-Operationen unter Anweisung des MIPS-Chips ausführt.

DaveP
quelle
0

Wir wissen, dass dies ein offenes Thema in der Arduino-Programmierung und in der Embedded-Welt im Allgemeinen ist. Auf dem Markt sind verschiedene Lösungen wie MicroPython erhältlich, die meisten sind jedoch für bestimmte Boards vorgesehen und ermöglichen nicht, das System in Echtzeit zu halten. Wir arbeiten an einer Lösung! VIPER ist eine Python Virtual Machine für Arduino DUE und alle ARM 32-Bit-Architekturen, die auf einem Echtzeit-Betriebssystem ausgeführt werden. Dies bedeutet, dass Sie Python-Skripte entwickeln können, die von Arduino DUE, UDOO, Spark (alle Boards) und auch auf den neuen ST-Nucleo-Boards ausgeführt werden können. Darüber hinaus können Sie Echtzeitmodule für VIPER entwickeln, die von den Python-Skripten aufgerufen und verwaltet werden können, wenn Sie hohe Leistungen benötigen und mit C vertraut sind.

Sie können VIPER hier in Aktion sehen http://bit.ly/kickviper

Daniele Mazzei
quelle
Es ist kein offenes Thema. Python ist eine schreckliche Einrückungssprache.
user2497
0

Sie könnten von C (AVR) lernen, wie Sensoren funktionieren, aber es braucht viel mehr Zeit. Arduino IDE Code und Python Code für Arduino verwenden C-Code-Funktionen, um die Dinge zu vereinfachen. Python- und Arduino-IDE: Wenn sie Firmata verwenden, verwenden sie serielle Kommunikation und Sie denken, dass Sie sich selbst codieren.

xrhstos
quelle
-1

Ja. Python kann verwendet werden, um ein Arduino zu programmieren, indem einfach Pyfirmata importiert wird, die das Arduino mit Python verbinden können.

Ich habe Glück
quelle
Wahr. Aber darum bittet das OP nicht.
Sempaiscuba
-8

Ich fürchte, Arduino IDE verwendet keine C / C ++ - Sprache. Es ist von Processing IDE abgeleitet und hat eine stark vereinfachte C / Java-ähnliche Syntax.

Andrzej Marczak
quelle
9
Die Arduino-IDE ist C ++: Sie führt eine minimale Vorverarbeitung durch (stellt "#include <Arduino.h>" und Deklarationen für die von Ihnen definierte Funktion voran) und ruft dann einen regulären C ++ - Compiler (GNU g ++) auf.
Edgar Bonet
Es ist die IDE selbst und nicht die von Processing abgeleitete Programmiersprache.
Peter Bloomfield
Nahezu niemand kümmert sich um die Implementierung der IDE auf dem Arduino. Der Punkt ist, in der Lage zu sein, Python zu schreiben, das effizient auf dem Arduino ausgeführt wird.
Wallyk