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.
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.
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.
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
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.
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/
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!
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.
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.
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.
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.
> 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.
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.
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...
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.
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.
> 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!
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.