ich bin gerade aus Corona-Langeweile auf einen Arduino Uno gestoßen, den ich noch im Fundus hatte.
Da ich schon etwas älter bin (60), kann das schon mal vorkommen.
Meine Frage: Kann ich den Arduino mit Python programmieren und wenn ja - wie?
Ich habe im Internet schon gesucht und bin auf die Version Processing-PythonMode-Arduino gestoßen, was bei mir aber auch nach endlosem hin und her nicht funktioniert. Die USB/COM-Schnittstelle scheint das Problem zu sein.
Ich kann nur (wenig) Python, kein Java. Die Arduino-IDE ist daher für mich eher ungeeignet.
Gibt es eine einfachere Möglichkeit oder hat schon mal jemand hier die Processing.py-Geschichte zum Laufen gebracht?
Ich verwende Windows 10 (ja, ja, ich weiß ...).
Die IDE ist nicht die Programmiersprache - die ist beim Arduino "C++ mit Extras". Du kannst das gute Teil auch in C oder uLisp oder Basic programmieren, aber nicht in Python.
An Processing scheitere ich jedes mal wenn ich's versuche, obwohl ich kein kein Windoof verwende
ich bin gerade aus Corona-Langeweile auf einen Arduino Uno gestoßen, den ich noch im Fundus hatte.
Da ich schon etwas älter bin (60), kann das schon mal vorkommen.
Na super. Schnapp dir die IDE und "ein gutes C++ Buch" und schau dir die Beispiele an. Wenn du dann C++ -Experte geworden bist, hast du auch Corona überlebt! Das mit dem Buch kannst du auch variieren. Ist eher eine Redewendung hier.
vielen Dank für eure Antworten. Aber das hilft mir nicht wirklich weiter.
OK, die IDE wird mit C benutzt, nicht mit Jave, und es gibt auch noch andere Sprachen - aber ich wollte es nunmal mit Python versuchen. Es scheint doch irgendwie zu gehen, das Processing.py-Projekt auf Github ist ganz schön umfangreich. Und zwieblum hat es ja anscheinend auch schon probiert.
Aber falls ich am Ende damit nicht weiterkomme, werde ich vermutlich Bascom versuchen. C ist mir zu kompliziert, ich bin kein Programmierfreak. Und Basic war früher auch schon recht einfach.
Falls ihr doch einmal auf ein funktionierendes Python für Arduino stossen solltet, wäre ich für eine Tip dankbar.
Aehm ... nein. Processing ist eine Sache am Desktop, nicht am Microcontroller (ich bin trotzdem oder deshalb daran gescheitert). Für deinen Uno gibt's kein Python. Für andere schon. Für Python ist der Raspberrypi sicher die einfachere Anlaufstelle
Processing läuft auf dem PC. Das ist ursprünglich eine Java API und IDE. Die Arduino API ist daran angelehnt, weshalb das ähnlich aussieht. Da haben ein paar der gleichen Leute daran mitgearbeitet. Ansonsten hat das aber nichts direkt miteinander zu tun.
Im Zusammenhang mit Arduino ist hauptsächlich dafür gedacht Programme zu schreiben die mit dem µC über die serielle Schnittstelle kommunizieren und Daten visualisieren. Die Stärke liegt im Grafik-Bereich und hat auch ohne µC viele Anwendungen
Ich sehe das Processing manchmal als Programmiersprache bezeichnet wird. Aber das stimmt eigentlich nicht. Da laufen zwar keine normalen Java Programm drauf, aber trotzdem ist es nur ein Java Dialekt
@To
So, wie Du schreibst, sind Deine 'Vorbelastungen' eh nur marginal - was spricht dagegen, Sich mit C++ anzufreunden?
Wenn Du der Python-Crack wärst - wäre Das vll. eine Idee, also dem Arduino per Python was beizubringen.
Wenn Du aber dort auch nur 'auf 3 Zylindern' unterwegs bist, macht's mehr Sinn, Etwas zu erlernen, was sogar nachgewiesen mit Arduino funktioniert.
... meiner Meinung nach ...
Die Zugriffe auf die Arduino Register stelle ich mir mit Python echt schwierig vor, insbesondere wenn es dafür keine Konfigurationsdateien, Bibliotheken und Beispielprogramme gibt.
Beim µC geht es nicht um raffinierte Datenverarbeitung und Algorithmen, die man mit Python schreiben kann, sondern um das Ansprechen der Hardware. Dafür braucht man Bitmanipulation und andere Funktionen, die von C/C++ sehr gut unterstützt werden.
Moin,
wenn es Python sein soll, würde ich die Schubladen nochmal nach einem Raspberry Pi durchwühlen.
Python ist ja eigentlich eine interpretierte Sprache, also brauchtest Du einen Python-Interpreter, der auf dem Arduino läuft.
Habe gerade mal auf micropython.org geschaut - da lese ich was von 256kB code und 16kB RAM. Das wird dann mit dem ATMega 328P leider nix.
Wirklich interressante Argumente. Ich werde sicher über das eine oder andere nachdenken. Danke dafür!
Aber es ging nicht eigentlich darum, was besser ist oder womit man mehr machen kann.
Es ging lediglich darum, ob es eine Möglichkeit gibt, einen Arduino in Python zu programmieren.
Hierzu bin ich inzwischen ziemlich weit gekommen, aber kurz vor dem Ziel leider gescheitert:
Die Processing-IDE sieht der Arduino-IDE nicht nur ähnlich, sie funktioniert auch ähnlich. Standardmäßig wird sie mit Java benutzt, es gibt allerdings auch einen Python-Mode, in den man sie einfach umschalten kann, wenn man das Plugin installiert hat. Damit ist es dann möglich, Sketches in Python zu schreiben und auf dem PC funktioniert dann auch wirklich alles, die gesamte Funktionalität von Processing!
Das zugehörige Projekt ist auf GitHub unter processing.py zu finden.
Um das ganze jetzt auf den Arduino zu bringen, muss auf diesem die "Standard Firmata" aus dem Arduino Sample-Ordner laufen. Dadurch kann dann die Processing-IDE seriell mit dem Arduino kommunizieren und diesen steuern - theoretisch.
Leider kann ich den Arduino aber nicht aus Processing ansprechen. Meiner Meinung nach liegt der Fehler in der Serial-Library, die die USB-Wandlung der seriellen Schnittstelle für den Arduino nicht verkraftet. Im Java-Mode funktioniert es prima, nur im Python-Mode nicht.
Nur dieses kleine Problem verhindert bei mir noch, dass ich doch den Arduino mit Python programmieren kann.
Bodo29:
...
Es ging lediglich darum, ob es eine Möglichkeit gibt, einen Arduino in Python zu programmieren.
...
Nur dieses kleine Problem verhindert bei mir noch, dass ich doch den Arduino mit Python programmieren kann.
zu Firmata:
Firmata is a generic protocol for communicating with microcontrollers
from software on a host computer. It is intended to work with
any host computer software package.
Auf dem Arduino läuft eben die Protokloll-Software Firmata. Di ist in C/C++ geschreiben wie üblich und enthält letztlich einen Commandinterpreter, der die bekanntn Befehle mittels C++ Programm auf dem Arduino ausführt.
Das hat mit Phyton auf dem Arduino garnichts zu tun.
Ob diese Kommandofolgen mit Processing in Java oder Python zusammengebastelt werden oder on ich die per Terminalprogramm zum Arduino schicke, ist dabei völliog egal.
Hauptunterschied ist, daß das nur im Zusammenspiel mit Proicessing geht, eine Software, die alleine auf dem Arduino läufst, bekommst Du damit nicht zustande, Du brauchst immer den PC mit Prozessing dazu.
Stimmt. Da habt ihr beide wohl recht. Aber das fände ich eine feine Sache, obwohl es nicht ohne Processing geht.
Die Möglichkeit, Python-Programme auf dem PC zu schreiben und dabei mit dem Arduino zu kommunizieren ist doch auch schon was. Damit wäre ich schon mal zufrieden.
Aber das o.a. Problem mit der Serial.lib bekomme ich nicht gelöst.
Hier mal ein Beispiel in Java:
import processing.serial.*;
Serial myPort; // Create object from Serial class
int val; // Data received from the serial port
läuft fehlerlos und spricht den Arduino auf COM1 an.
Dann in Python:
add_library('serial')
add_library('arduino')
def setup():
a = Arduino(this, "COM1", 57600)
def draw():
pass
ergibt folgenden Fehler:
UnsatisfiedLinkError: jssc.SerialNativeInterface.openPort(Ljava/lang/String;Z)J
at jssc.SerialNativeInterface.openPort(Native Method)
at jssc.SerialPort.openPort(SerialPort.java:158)
at processing.serial.Serial.(Unknown Source)
at processing.serial.Serial.(Unknown Source)
at cc.arduino.Arduino.(Arduino.java:159)
usw.
Inhaltlich sollte das das Gleiche sein, die Syntax stimmt auch. Also woran kann es liegen?
Möglichertweise ist das das falsche Forum für dieses Prolem, aber vielleicht hat jemand dasselbe?
Liegt er aber definitiv.
Warum wundert dich das?
Standardmäßig liegt da zwar die serielle Schnittstelle des PC, das lässt sich aber einfach ändern.
Ich habe ihn deshalb auf COM1 gelegt, weil ich gelesen habe, dass in processing.py der Arduino auf COM1 vorrausgesetzt wird.
Funktioniert aber auch nicht.
letztendlich habe ich die Lösung auf GitHub doch noch gefunden. :o
Man muss im Installationspfad von Processing unter c:\programs (x86)\processing-3.5.4\modes\java\libraries\serial\library\windows32 (bei mir) die Datei jSSC-2.8.dll löschen.
Das ist alles, schon funktionierts.
Damit ist es möglich, mit der processing-IDE Programme in Python zu schreiben, mit denen man den Arduino steuern kann.