Forum: Mikrocontroller und Digitale Elektronik Komplexe GUI-Programmierung Raspberry


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tobas (Gast)


Angehängte Dateien:

Lesenswert?

Liebes Forum

Ich habe eine Frage bezüglich einer komplexen GUI-Programmierung. Ich 
möchte (wie im Bild oben) ein sogenanntes Bildschirmstellwerk (für meine 
Modellbahn) programmieren, bin allerdings im Netz nur auf einfache 
Anwendungen gestossen. Die Taster, die Ausleuchtung und die 
Signal-Linsen sollten einfach auf einen Ausgang bzw. einen Eingang bei 
den GPIO's.

Ist dies möglich oder nicht realisierbar und wie wird das gemacht? Mit 
Phyton oder per schon vorhandenem Programm?

Ich danke für eure Mithilfe.

von Modellprogrammierbahner (Gast)


Lesenswert?

Das ist keine komplexe GUI-Programmierung, das ist ein statisches Bild 
mit wenigen Handvoll einfachen Zustandsanzeigen.
Das geht in jeder Programmiersprache, sicher auch in Phyton, wobei ich 
nur Python kenne.
Ich bin bereit zu wetten dass auch jemand zu finden ist der das mit 
einer Tabellenkalkulation hinbekommt.

von S. R. (svenska)


Lesenswert?

Tobas schrieb:
> Ist dies möglich oder nicht realisierbar und wie wird das gemacht? Mit
> Phyton oder per schon vorhandenem Programm?

Da andere es schon gemacht haben (z.B. die Bahn selbst), ist es 
garantiert möglich und realisierbar.
Man kann das mit einem Programm machen, was man sich selbst schreibt.
Python ist dafür geeignet, andere Sprachen auch.

Für das "Wie" gibt es verschiedene Ansätze. So, wie du fragst, wird es 
wohl am einfachsten sein, wenn du den statischen Teil des Bildes in 
Paint (oder einem beliebigen anderen Programm) reinmalst und als Bitmap 
speicherst.

Das gleiche machst du mit den dynamischen Teilen (also "Lampe an", 
"Lampe aus", "Weiche oben", "Weiche mitte", usw.).

Dein Programm muss dann nur noch
a) das statische Bild malen
b) die darzustellenden Werte auslesen
c) die zu den Werten passenden Bitmaps oben drauf malen.

von knollo (Gast)


Lesenswert?

Hallo !
Sowas in der Art hab' ich mit einem ATmega gemacht - natürlich ohne 
Bildschirm sondern mit einem schnöden Gleisbildstellwerk. Mit 
Arduino-IDE programmiert (pfui!). Was mir auffällt: Hast Du an Deinem 
Rechenknecht (Raspi?) überhaupt genug Ein-und Ausgänge dran? Ich zähle 
43 Taster - einen ganze Menge. Ich hab das via I2C erweitert.
MfG

von Christian K. (Gast)


Lesenswert?

Zum GPIO erweitern gehen MCP23S08 (SPI z.B. mit bit schubsen) oder I2C 
MCP23008.
Zu Fuß GUI in Phyton funktioniert tkinter ganz gut. Zumindest 
funktioniert das parallel zur GPIO Bibliothek.

von Lothar (Gast)


Lesenswert?

Christian K. schrieb:
> Zu Fuß GUI in Phyton funktioniert tkinter ganz gut

Wenn man sich das Leben schwer machen will. Auch unter Linux geht für 
Desktop / Grafik nichts über Visual BASIC:

https://www.xojo.com/

Oder man lässt Linux ganz weg und macht nur BASIC:

https://www.riscosopen.org/

von Tobias (Gast)


Lesenswert?

Danke für alle Antworten. Habe mich jetzt für Phyton entschieden, da 
dies mehrmals erwähnt wurde. Ich beherrsche diese Sprache ein wenig, 
weiss also ein wenig darüber, aber wie kann man jetzt ein Bitmap 
einfügen? Was wäre da der Befehl?

Danke im voraus!

von Tobias (Gast)


Lesenswert?

Schon zu früh abgesendet...Müsste auch noch wissen, wie mann dann die 
einzelnen Wigets mit den GPIOs verknüpft. Die GPIO werde ich per 
Gertboard erweitern, ist meiner Meining nach die einfachste Variante.

von Kobalt (Gast)


Lesenswert?

Ich würde das vermutlich als einfache Webseite realisieren.

Das Zeichnen der Grafik ist damit ein Klacks: statisches .png anzeigen, 
oder sogar gleich eine .svg Vektografik? Oder per HTML5 Canvas on the 
fly zeichnen? Alles ist möglich :-)

Zugriff auf die GPIOs hast du damit auch (PHP, NodeJS etc.).

Und du kannst mit jedem Endgerät (Tablet, Smartphone, Laptop) auf die 
Webseite zugreifen.

von Karl (Gast)


Lesenswert?

Tobias schrieb:
> Habe mich jetzt für Phyton entschieden, da
> dies mehrmals erwähnt wurde.

Ach doch so schnell...

Ich hätte da noch Pascal zu bieten, in der Konfig Freepascal mit Lazarus 
IDE.

Wenn Du das aktuelle Raspbian Stretch drauf hast, ist eine aktuelle 
Lazarus + Freepascal Version im Paketmanager zu finden. Das deutsche 
Lazarus Forum ist recht kompetent - und deutlich angenehmer im 
Umgangston als...

Lazarus kann auch Crosskompiling von Windows oder PC-Linux auf den 
Raspberry, sprich Du entwickelst das Programm unter Windows und läßt es 
dann auf dem Raspberry laufen.

von Stefan F. (Gast)


Lesenswert?

Wenn man das mit Web-Technologien macht, würde sich ein ESP8266 (z.B. 
NodeMCU Board) als Webserver geradezu aufdrängen.

von Karl (Gast)


Lesenswert?

Stefan U. schrieb:
> Wenn man das mit Web-Technologien macht, würde sich ein ESP8266 (z.B.
> NodeMCU Board) als Webserver geradezu aufdrängen.

Warum sollte man das krampfhaft mit Web-Technologie machen wollen?

Ein einfaches Programm, welches über File-IO die GPIOs oder den I2C 
bedient und das Stellpult als Bild darstellt reicht da.

Mit Web musst Du einen Webserver einrichten, mit HTML, JavaScript, 
Python rummachen.

Ja, man könnte dann das Stellwerk von jedem Tablet aus bedienen. Scheint 
mir aber nicht gewollt zu sein.

von Stefan F. (Gast)


Lesenswert?

> Warum sollte man das krampfhaft mit Web-Technologie machen wollen?

Wer zum beispiel beruflich Web Anwendungen entwickelt (also mich), für 
den wäre das nicht krampfhaft sondern der einfachste Weg wo man sich 
außerdem sicher fühlt.

Das das technisch gesehen mit primitiveren Mitteln auch geht, will ich 
gar nicht abstreiten.

> über File-IO die GPIOs oder den I2C bedient

Also Linux. Das wäre für einige andere wiederum ein krampfhafter Weg.

> Mit Web musst Du einen Webserver einrichten, mit HTML, JavaScript,
> Python rummachen.

Webserver gibt bei Arduino schon. HTML und Javascript tippe ich Dir 
schneller runter als ein Hello-World Programm in C. Python braucht man 
dazu nicht, man kann die Funktionen hinter Knöpfchen in C++ schreiben. 
Ist gar nicht schwer, wenn man sich nicht scheut, das Framework zu 
benutzen.

Wer mit Web Technologien nicht vertraut ist, für den ist der andere Weg 
über klassische Desktop GUI Frameworks mit Widgets und Bildern sicher 
einfacher.

von Karl (Gast)


Lesenswert?

Stefan U. schrieb:
> Also Linux. Das wäre für einige andere wiederum ein krampfhafter Weg.

Da oben steht Raspberry. Gehe ich mal davon aus, dass das unter Linux 
laufen soll.

Stefan U. schrieb:
> Wer zum beispiel beruflich Web Anwendungen entwickelt (also mich), für
> den wäre das nicht krampfhaft sondern der einfachste Weg wo man sich
> außerdem sicher fühlt.

Und wer nur einen Hammer hat, sieht überall Nägel.

von Hanuta (Gast)


Lesenswert?

Karl schrieb:
> Warum sollte man das krampfhaft mit Web-Technologie machen wollen?

 - Dann reicht schon ein kleiner ES8266 zur Ausführung (ist günstiger, 
muss nicht booten, kann einfach vom Strom getrennt werden, verbraucht 
weniger, läuft mit Akku etc.)
 - Du kannst es von jedem Tablet/Smartphone etc. bedienen (auch per 
Touch)
 - Grafische Ausgaben mit Animationen, Scrollen, Zoomen etc. sind quasi 
geschenkt
 - Das Ganze ist mit sehr wenig Aufwand umsetzbar
 - Es läuft am Ende auf jedem Gerät, sei es ein raspi, ein NodeMCU, ein 
ESP32, ein Laptop etc.
 - Du kannst es komfortabel am PC entwickeln

Scheint also ein ziemlich gut geeigneter Ansatz zu sein...

von Stefan F. (Gast)


Lesenswert?

Es wirkt halt schon ein bisschen wie mit Kanonen auf Spatzen zu 
schießen. Aber zeige mir mal eine Java oder .NET Enterprise Anwendung 
bei das nicht der Fall wäre.

Wir schürfen Bitcoins, also Scheiß auf Rechenleistung.

von S. R. (svenska)


Lesenswert?

Stefan U. schrieb:
> Wir schürfen Bitcoins, also Scheiß auf Rechenleistung.

Genau, sein Stellwerks-Pi schürft Bitcoins... is kla.

Es gibt für den Raspberry genug Beispiele, wie man damit mit Python 
(nicht Phyton!) die GPIOs ansteuert. Außerdem gibt es genug Beispiele, 
wie man mit Python eine GUI baut. Das kann man mit tkinter machen 
(Python-Standard), oder mit SDL, oder mit irgendwas anderem.

Diese Kenntnisse muss sich der TO erstmal erarbeiten, bevor er 
weitermachen kann.

Ja, man kann auch noch einen Arduino UND einen ESP32 da mit einbeziehen, 
das ganze über die Hausautomatisierung und Google sprachsteuern und zu 
guter Letzt über Alexa an Facebook weiterleiten, während man mit seinem 
Tablet live zuschaut, wie schnell das geht. Darum ging es aber 
offensichtlich nicht.

von Clemens K. (clemensk)


Lesenswert?

Ich hab mir mal das hier bestellt:

https://www.itead.cc/display/nextion.html

das sollte gui und serial communication erledigen!

von Tobas (Gast)


Lesenswert?

> Ich hätte da noch Pascal zu bieten, in der Konfig Freepascal mit Lazarus
> IDE.
>
> Wenn Du das aktuelle Raspbian Stretch drauf hast, ist eine aktuelle
> Lazarus + Freepascal Version im Paketmanager zu finden. Das deutsche
> Lazarus Forum ist recht kompetent - und deutlich angenehmer im
> Umgangston als...
>
> Lazarus kann auch Crosskompiling von Windows oder PC-Linux auf den
> Raspberry, sprich Du entwickelst das Programm unter Windows und läßt es
> dann auf dem Raspberry laufen.

Lazarus ist tatsächlich genial :D. Wie kann ich damit dann die GPIO's 
steuern?

Das mit den Ausgängen ist kein Problem, da ich alles Hexadezimal 
codieren werde (da das Raspi nur als Weitergabe dient, es führt keine 
Funktionen aus) damit ich die Infos weitergeben kann. An den Eingängen 
wird auch wieder alles codiert sein, was mich zur nächsten Frage bzgl. 
Lazarus bringt: Wie kann man dann die Inputs visuell wiedergeben?

Danke für die Antwort!

von Karl (Gast)


Lesenswert?

Frag das am besten im Lazarus-Forum, da wirst Du geholfen.

https://www.lazarusforum.de/

von Petrov (Gast)


Lesenswert?

Ich verwende dazu Codesys für Raspberry die kostenlose Testversion.
Da kann man tolle Oberflächen programmieren und hat gleichzeitig eine 
Webvisualisierung ohne etwas zusätzlich zu machen.
Die Testversion bleibt zwar alle 2 Stunden stehen, kann aber relativ 
leicht mit einem Bash scrip austomatisch neu gestartet werden.
Mit den "Echtzeitsystemen" die ich in C realisiert habe, kommuniziert 
das Codesys über die RAM-Disk. So stört der sekündliche Unterbruch alle 
2 Stunden gar nicht.
Sind irgentwelche Daten in der Visualisrung zu merken, legt man diese 
einfach in den persistenten Datenbereich.

von Ralf (Gast)


Lesenswert?

Mit Qt kann man auch gute GUIs erstellen.

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.