Forum: Mikrocontroller und Digitale Elektronik Raspberry PI WEB-HMI


von Markus W. (kornbanane)


Lesenswert?

Hallo zusammen,

ich bin schon länger auf der Suche nach einer Lösung zu meinem Problem, 
bin aber von der Fülle an Informationen und der Möglichkeiten total 
erschlagen. Ich hoffe ihr könnt mir hier einen Weg zeigen.

Zum Problem:

Ich habe vor ein HMI zu realisieren, dass über die serielle 
Schnittstelle mit selbst definierten Telegrammen mit einem µC 
kommuniziert.
Auf dem HMI soll der Anwender z.B. die Möglichkeit haben über Buttons 
GPIO's zu schalten. Weiterhin sollen Statusinformationen vom µC an das 
HMI gesendet werden und angezeigt werden.

Das HMI soll aus einem 10" (oder 10,x ") Display bestehen mit 
capazitiven Touch (single Touch reicht). Auflösung mindestens XGA.

Das HMI soll weiterhin in der Lage sein Animationen abzuspielen, wie 
diese jetzt technisch Aussehen weiß ich noch nicht. Wahrscheinlich über 
HTML5 und Video


Meine Idee:

Ich dachte mir das HMI über einen Raspberry PI aufzubauen. So weit ich 
recherchiert habe, benötigt man für solch ein Display wie ich es 
angegeben habe mehr "Power" als einen einfachen µC. Also muss ein Linux 
Board her. Da der Raspberry eine riesen Gemeinde hat, dachte ich mir 
dass dies der beste Einstieg in die Embedded Linux Welt ist. Ich habe 
mir bereits einen Raspberry Pi B+ zugelegt und lese mich mithilfe eines 
Buches langsam ein. Bisher habe ich allerdings nur über die Shell, C und 
Python IO's angesteuert.

Das HMI selbst will ich dann über den Browser aufbauen mithilfe von 
HTML5, da ich so alle möglichen Gestaltungsfreiräume habe.
Das Browser soll dann aber lokal auf dem Raspberry (bzw. an dessen 
angeschlossenen Display) laufen. Ich will also NICHT über Internet, 
Handy, Tablet oder sonstwas steuern, sondern nur direkt an dem Display.


Wo ich festhänge:

Ich habe nach fertigen Lösungskonzepten "WEB-HMI", "HTML5 HMI" usw. für 
mein Projekt gesucht.
Allerdings lande ich da meistens bei speziellen 
Automatisierungsgeschichten, wodurch ich in der Funktionalität oder im 
Design eingeschränkt bin. Beispiel: 
https://www.rexcontrols.com/rex-control-system-raspberry-pi

Weiterhin sind diese Systeme immer darauf ausgelegt, das die Bedienung 
über das Internet mithilfe eines weiteren PC's, Handy usw. von statten 
geht.

Deshalb denke ich, es macht mehr Sinn von grundauf selbst anzufangen.


Die Frage ist jetzt, ob ich mit der Einschätzung richtig liege, oder mir 
so nur das Rad neu erfinde?

Ich müsste also einen Weg finden über einen Browser auf dem Raspberry 
lokal eine HTML5 Seite laufen zu lassen. Dazu müsste dieser 
wahrscheinlich auch als Server fungieren. Dann benötige ich eine 
Schnittstelle vom HTML5 zu den IO's des Raspberry bzw. zum UART. Ich 
habe erfahren, dass es dazu z.B. in PHP das Kommando "shell_exec" gibt. 
Mit diesem Befahl lassen sich über PHP Konsolenbefehle ausführen.

Dann müsste die Website aber noch auf eingehende Telegramme vom µC an 
den Raspberry reagieren können. Beispiel: Anzeige des aktuallen Zustands 
eines Eingangs.

Weiterhin soll der Systemstart des Raspberrys nicht sichtbar sein. 
Während der Raspberry hochfährt soll ein Bootlogo angezeigt werden. Nach 
dem hochfahren soll direkt der Browser mit der lokalen Website geöffnet 
werden. Dabei soll man aber wirklich nur die Seite sehen und keine 
Steuerelemente des Browsers. Also sozusagen nur die Website und nichts 
vom ganzen System.


Nuja ich hoffe ich konnte deutlich machen worum es mir geht. Wie gesagt 
ich weiß jetzt nicht wo ich anfangen soll und ob meine Ideen so 
umsetzbar sind. Hier habe ich evtl. einen Einstieg gefunden, denn hier 
wird die GPIO über eine simple lokale HTML Website angesprochen: 
http://kampis-elektroecke.de/?page_id=1659

von Daniel A. (daniel-a)


Lesenswert?

Markus W. schrieb:
> Deshalb denke ich, es macht mehr Sinn von grundauf selbst anzufangen.
>
> Die Frage ist jetzt, ob ich mit der Einschätzung richtig liege, oder mir
> so nur das Rad neu erfinde?

Soetwas selbst zu machen ist durchaus machbar, und es ist durchaus 
möglich dies über eine lokale Webseite zu machen. Das hat dann auch den 
Vorteil, dass man auch von anderen Computern darauf zugreifen könnte, 
wenn man den Webserver auf dem PI entsprechend konfiguriert. Als 
Webserver würde ich Apache empfehlen.

Markus W. schrieb:
> Dann müsste die Website aber noch auf eingehende Telegramme vom µC an
> den Raspberry reagieren können.

Hirzu gibt es mehrere möglichkeiten:
 * WebSockets
 * HTML5 Server-Sent Events
 * Polling & XHR Requests
 * Periodisches Reload

Das einfachste sind Periodisches Reloads, aber ich würde WebSockets 
empfehlen.

Markus W. schrieb:
> Dann benötige ich eine
> Schnittstelle vom HTML5 zu den IO's des Raspberry bzw. zum UART. Ich
> habe erfahren, dass es dazu z.B. in PHP das Kommando "shell_exec" gibt.

Das ist eine möglichkeit. Effektiv könnte man Serverseitig jede 
Programmiersprache nehmen. Ich würde NodeJS nehmen, und mittels dem 
Apache proxy_wstunnel modul die Websocket verbindungen über Apache zu 
NodeJS bringen. NodeJS hat den Vorteil, dass man dort bereits gute 
Websocket module hat. Es gibt dort auch ein exec, aber eigentlich gibt 
es keinen grund dieses zu vewenden.

Auf der Client Seite kommt man um HTML, CSS und JavaScript fast nicht 
herum, die müsstest du also lernen.

Markus W. schrieb:
> Nach dem hochfahren soll direkt der Browser mit der lokalen Website geöffnet
> werden

Das sollte kein Problem darstellen, dazu kann man z.B. einen Browser mit 
startx als Service im Fullscreen/Kiosk mode starten.

von Johannes S. (Gast)


Lesenswert?

mit Nodejs kann man mit wenigen Zeilen Code einen Webserver erzeugen, 
Module für Zugriff auf gpio oder serielle gibt es auch.
Insgesamt hört es sich nach Heimautomatisierung an, da finde ich den 
ioBroker sehr interessant.

von Markus W. (kornbanane)


Lesenswert?

Danke für die Antworten,
da muss ich mich erst einmal hereinlesen.

Mit dem HMI soll ein einzelnes Gerät bedient werden, wobei die Bedienung 
nicht wirklich komplex ist. Wenn man will könnte man es auch ähnlich 
einer Heimautomatisierung bezeichnen, aber eben nur mit einem Gerät das 
gesteuert wird.

Also so wie es bisher für mich aussieht bietet mit NodeJS eine gute 
Lösung für meine Aufgaben.

Noch eine weitere Frage:
Im Zuge des HMI bin ja gerade dabei in die Embedded Linux Welt 
einzusteigen. Mein Arbeitgeber würde mit eine Weiterbildung bezahlen. 
Auch hier findet man im Netz 1000 Angebote....

Könnt ihr mir hier eine Weiterbildung empfehlen? Am besten wäre es, wenn 
der Kurs schon in die Richtung HMI geht, aber dennoch die Grundlagen von 
Embedded Linux enthält.

von M.K. B. (mkbit)


Lesenswert?

Ich geh mal davon aus, dass du die Steuerung über den Browser umsetzen 
willst. Denn in ein paar Jahren soll es dann doch über ein Tablet 
ferngesteuert werden.

Im Prinzip sind das dann aber drei verschiedene Aufgaben. Mit Embedded 
Linux haben die meiner Meinung nach aber nicht direkt zu tun. Ob ein 
Raspberry überhaupt noch Embedded Linux ist, darüber kann man streiten.

1) Webserver API, die es erlaubt GPIO Pins direkt oder über eine 
Abstraktion (z.B. Licht an) zu steuern oder abzufragen.

2) Asynchrone Kommunikation zwischen Webbrowser und Server. Also einmal 
um den Status abzufragen, dem Browser aber auch mitzuteilen, wenn ein 
Ereignis auftritt.

3) HTML5 Oberfläche für die Darstellung und Interaktion mit der 
Webserver API.

Für mich liegen diese drei Punkte eher im Bereich Webentwicklung, also 
Browser Frontend und Server Backend und haben nichts mit Embedded Linux 
im speziellen zu tun.

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.