Forum: Mikrocontroller und Digitale Elektronik Arduino Mega2560 über RaspberryPi 3b+ mittels Webserver ansteuern


von Fabian G. (mikroman94)


Lesenswert?

Hallo zusammen,

Ich stehe bei meinem kleinen Projekt vor einigen Startschwierigkeiten 
und bräuchte eure Hilfe.

Zunächst mal zu meinem Aufbau:

Habe einen Raspberry Pi 3 Model B+ und einen Arduino Mega 2560. Diese 
sollen mittels serieller Schnittstelle (USB) kommunizieren.

Habe auf dem Arduino bereits ein lauffähiges Vorprojekt das ich jetzt 
gerne erweitern möchte.

In dem Vorprojekt wurde ein Schrittmotor mittels Touchscreen am Arduino 
angesteuert (Touchscreen Shield). Die Geschwindigkeit, Beschleunigung, 
Weg usw. kann so eingestellt werden und der Motor wird dann entweder 
direkt getippt oder ein Automatikbetrieb gestartet, bei dem ein 
definierter Weg gefahren wird.

Jetzt zu meiner Erweiterung.

Und zwar würde ich gerne wie oben beschrieben einen Raspberry Pi mittels 
USB-Schnittstelle mit dem Arduino verbinden.
Auf dem Pi soll dann ein lokaler Webserver laufen (Flask), über diesen 
sollen dann die Funktionen, die vorher am Arduino Touchscreen möglich 
waren, nun über einen Webbrowser von einem beliebigen Endgerät 
ausgeführt werden können.

Der Arduino-Sketch vom Vorprojekt sollte dann quasi nur erweitert 
werden.
Im Moment werden die einzelnen Funktionen über eine IF Abfrage 
ausgelöst.

IF "Touchbefehl" im Bereich des "Tippen Vorwärts" Buttons" DANN wird 
entsprechende Funktion ausgeführt (Tippen Vorwärts)

Jetzt müsste simpel gesagt, dass ganze mit eine ODER Abfrage erweitert 
werden, sodass ein Befehl vom Pi (sprich Webserver) oder vom Arduino 
Touchscreen die jeweiligen Funktionen auslösen können:

IF "Touchbefehl-Tippen_Vorwärts" OR 
"Pi_Webserver_Befehl_Tippen_Vorwärts" DANN führe Funktion Motor Vorwärts 
aus.

Was ich bisher schon erledigt habe:

Raspberry Pi und Arduino können erfolgreich miteinander kommunizieren 
(Verbindungstest)

Habe auch mal einen ganz einfachen Webserver (Wird nur eine Textzeile 
"Hello_World" am Webbrowser ausgegeben) mittels Flask auf dem Pi laufen 
lassen.

Nun bin ich mit der Python Programmierung nicht sehr fit und komme nur 
sehr schleppend voran. Mir fehlt einfach eine gewisse Basis mit der ich 
dann weiter vorankommen könnte.

Mir ist nicht ganz klar, was ich bei der Kommunikation zwischen Pi und 
Arduino als "Auslöser" der Arduino-Befehle nutzen kann.
Kann ich am Pi quasi eine boolsche Variable definieren, deren Zustand 
dann der Arduino auslesen kann?


Vielen Dank schon mal im Voraus.


Mit freundlichen Grüßen

Fabian

von Mick (Gast)


Lesenswert?


von Fabian G. (mikroman94)



Lesenswert?

Schon mal vielen Dank für die Antwort.

Der Link hat schon mal etwas helfen können, sodass ich nun ein Stück 
weiter gekommen bin.

Um das Projekt so einfach wie möglich zu halten, habe ich mir jetzt 
erstmal ein Zwischenziel gesetzt, dass wie folgt aussieht.

Arduino lässt sich vom Pi über serielle Schnittstelle (USB) steuern.
Dazu hab ich den Code dafür angehängt mit dem Dateinamen Test_1.
Kurz gesagt habe ich mit dem Raspberry Pi  die interne LED am Arduino 
ein- bzw. ausschalten können, indem ich auf dem seriellen Bus eine 
integer Zahl entweder auf '1' oder auf '0' gesetzt habe. Das hat der 
Arduino wiederum mit serial.read eingelesen und entsprechend die LED auf 
HIGH oder LOW geschalten.

soweit so gut...

Nun habe ich mittels Flask einen Webserver auf dem Pi zum Laufen 
gebracht.
Auf der aufgerufenen Webseite habe ich dann einen Link mit dem Namen 
'Arduino Lampe einschalten' erstellt, mit diesem sich die LED genauso 
wie im obigen Fall ein- bzw. ausschalten lassen soll (Arduino-Sketch 
bleibt gleich).

siehe Codedatei Test_2

Nur hier funktioniert etwas nicht. Sobald ich auf den Link klicke, 
leuchtet die LED am Arduino ganz kurz auf und dann kommt eine 
Fehlermeldung vom Pi und der Webserver beendet sich.

Die Fehlerbeschreibung habe ich auch mal angehängt.

Ich hoffe ihr könnt mir weiterhelfen.


Mit freundlichen Grüßen

Fabian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.