Neben der Erstellung von grafischen Oberflächen über Webserver wie Node.JS oder Python und TKinter haben wir auch die Möglichkeit mittels Visual Studio erstellte GUIs auf dem Raspberry Pi laufen zu lassen. Diese werden über Windows erstellt und anschließend auf dem Raspberry Pi lauffähig gemacht. Dazu ist nicht einmal viel nötig!
In diesem Tutorial erstellten wir eine kleine Test GUI und bereiten alles vor, sodass wir die in C# geschriebenen Tools auch auf dem Raspberry Pi öffnen können.
Zubehör
Neben einem Windows PC (Win7, Win 8, Windows 10) brauchst du einen Raspberry Pi mit Benutzeroberfläche. Dazu empfiehlt sich Raspbian (keine Lite Version) mit installiertem Desktop.
Falls du bisher noch keine Erfahrung mit Visual Studio, C#, .NET und der Erstellung einer GUI gemacht hast, so empfiehlt sich ein kleiner aber hilfreicher Ratgeber. Daneben muss auf unserem Computer Visual Studio sein.
Visual Studio Version laden
Zunächst einmal müssen wir Visual Studio installieren. Dies gibt es in der Community Edition kostenlos. Lade es auf deinem Windows PC herunter und installiere mindestens die .NET Desktop Development Umgebung, welche ca 5GB groß ist. Das ganze dauert ein wenig, woraufhin du den Computer neu starten musst.
Nach Ende der Installation öffnest du Visual Studio und wählst „Datei“ -> „Neu“ -> „Projekt“ -> „Visual C#“ -> „Windows Forms App (.NET Framework)“ aus. Damit können wir ein neues Projekt starten. Gib unten den Namen und den Speicherort an.
Eigene Raspberry Pi GUI erstellen
Nachdem das Projekt erstellt wurde öffnet sich der Form Designer. Hier kannst du die GUI gestalten. Auf der linken Seite befindet sich eine Toolbox, in der alle Elemente wie Buttons etc. vorhanden sind. Hier kannst du einfach Elemente herausziehen und platzieren. In meinem Fall wähle ich eine Textbox, einen Button und ein Label:
Du kannst dabei noch weitere Details einstellen und sehr schnell eine schöne GUI erstellen. In unserem Beispiel soll es allerdings nur darum gehen, dass der Text ausgelesen und auf dem Label angezeigt wird, sobald der Button gedrückt wurde.
Durch Doppelklick auf den Button öffnet sich die Click Funktion, in welche wir unseren Code schreiben:
private void button1_Click(object sender, EventArgs e) { this.label1.Text = "Hallo, " + this.textBox1.Text + "!"; }
Nichts besonderes – hier wird einfach der eingegebene Name der Textbox ausgelesen und in das Label geschrieben. Du kannst deine GUI natürlich so sehr erweitern wie du möchtest! Mehr Infos findest du hier.
Anschließend speichern wir das Projekt und kompilieren es. Drücke dazu auf den „Starten“ Button oben in der Taskleiste. Dein Programm öffnet sich und du kannst es bereits testen.
Öffne nun das Verzeichnis, in dem sich dein Projekt befindet und wechsle in den „bin/Debug“ Ordner, worin sich die kompilierte „WindowsFormsApp1.exe“ Datei befindet. Diese werden wir im nächsten Schritt auf den Raspberry Pi kopieren.
GUI auf dem Raspberry Pi testen
Bevor die erstellte GUI lauffähig ist, müssen wir ein paar Pakete auf dem Raspberry Pi installieren. Dazu nutzen wir das Mono Projekt. Öffne das Terminal auf dem Raspberry Pi (per SSH) und gib folgendes ein (falls du nicht Raspbian Strech nutzt, musst du den Befehl entsprechend anpassen):
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://download.mono-project.com/repo/debian raspbianstretch main" | sudo tee /etc/apt/sources.list.d/mono-official.list sudo apt-get update sudo apt-get install mono-devel --yes --allow-unauthenticated sudo apt-get install dirmngr
Sofern alles geklappt hat, kopieren wir nun die .exe Datei auf den Raspberry Pi. Dies geht am einfachsten per FTP. Verbinde dich mit einem FTP Client (wie FileZilla) und übertrage die Datei in ein Verzeichnis (bei mir ist dies /home/pi/CustomGUI/).
Öffne nun die Desktopumgebung. Entweder indem du dich mit Bildschirm / Touchscreen einloggst, oder indem du bspw. das Remotedesktop Protokoll (RDC) verwendest.
Dort öffnest du ebenfalls das Terminal und gibst folgenden Befehl ein (Name und Pfad ggf. anpassen):
mono /home/pi/CustomGUI/WindowsFormsApp1.exe
Das öffnet nun die GUI:
Falls du eine anklickbare Datei haben willst, so kannst du diese ebenfalls erstellen:
sudo nano startGUI.sh
Hinein kommt folgendes:
#!/bin/bash mono /home/pi/CustomGUI/WindowsFormsApp1.exe
Nach dem Speichern vergeben wir abschließend noch die benötigten Rechte:
sudo chmod +x start.sh
Diese Datei kannst du nun mit Doppelklick starten.
10 Kommentare
9.6.2019
Thank you for this tutorial. I will certainly try it out. I would have liked to see a more detailed GUI
construction and how to read GPIO data into C#.
I’ll try the remote programming using VS 2017 community version, if possible,
and use the C# IDE to create GUI’s and to debug.
Normally I use Pyqt5 which does a good job to create GUI’s – much much better than
tkinker.
Ich erstelle meine Programme mit Lazarus. Das läuft direkt auf dem Raspi und ist kostenlos. Da muß man nichts konvertieren, kopieren oder Dateien verschieben. Der Syntax entspricht Delphi und ist wesentlich einfacher zu erlernen und übersichtlicher als C. Das Ergebnis sieht später genau 100 % exakt aus wie bei der Erstellung. Die Programme laufen viel schneller, da die Parameterübergabe in den CPU – Registern von Delphi übernommen wurde. Und man kann sehr ressourcenschonend programmieren. Was braucht man mehr.
@Aro: haben Sie PYQT5 ausprobiert ? . Mit PYQT5 man bleibt bei Python und man kann ein sehr hochwertige GUI herstellen.
Lazurus ist basiert auf Pascal aber Pascal ist nicht annähert so gut unterstützt wie Python.
Hallo Bonzadog,
Python ist zwar in Raspian schon vorhanden, aber mehr als ohne hin schon da ist kommt mir nicht auf die Platte. Das die Britten eine besondere Art von Humor haben, sollte spätestens nach den Brexitdebatten bekannt sein.
Ich weiß nicht, wer nach dem Basic endlich aus dem Verkehr war, auf die Schnapsidee gekommen ist, erneut eine Interpretersprache zu reanimieren. Und das für einen Raspi, der mit normaler Programmierung so leistungsfähig ist wie ein Standard -. PC, der vor 15 Jahren ausgeliefert wurde! Der Riskprozessor kann nur ganz wenige Befehle in einem Arbeitstakt abarbeiten. Es ist ja nicht eimal möglich eine 32 Bit- Zahl in einem Takt in ein Register zu laden. Es gibt keinen mathematischen Koprozessor. Es gibt nicht einmal einen Befehl für eine ganzzahlige Division. Das muß die Programmiersprache durch ein eigenes Unterprogramm alles selbst erledigen. Und da soll noch zusätzlich ein Programm im Hintergrund laufen, das eine Datei analysiert und dann abhängig vom Code in die Unterprogramme verzweigt, wo ein compiliertes Programm sofort den richtigen Code ausführt.
Phyton ist für mich der Beweis, das die Piesastudie längst bei den Programmierern angekommen ist. Wer es benutzen will, der soll es ruhig tun – ich mit Sicherheit nicht!
Ich wüste nicht was Python kann, was in Lazarus nicht mindestens genau so gut realisierbar ist, aber in Lazarus eben mit erheblich schnellerer Geschwindigkeit bei deutlich geringerer Prozessorauslastung. Und geringere Prozessorauslastung bedeutet weniger Wärme und damit längere Lebensdauer der CPU. – Aber wer will das schon?
Es hat seine Gründe, dass Delphi auf dem professionellen Markt / in der Industrie nicht etabliert hat. Nicht alle brauchen ein hochperformantes kompiliertes Programm, sondern dann reicht auch mal eine interpretierte Sprache wie Python, die viele Anfänger im Gegensatz zu Delphi / Lazarus schon können. Also nicht immer alles schlecht machen…
Viele Grüße
Ein hauptberuflicher Softwareentwickler (der sowohl in Java, C/C++ und auch mal Python programmiert!)
P.S.: Wer ein hochperformantes Programm möchte, verwendet normalerweise C/C++ und nicht Lazarus 😉
Hallo,
Ist dies auch für openhab2 möglich?
Fehlt eventuell ein Vorausetzung – dirmnfr? Ich habe ausprobiert aber ich bekomme ein Fehlermeldung:
pi@CAM2:~ $ sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
Executing: /tmp/apt-key-gpghome.OeAMshflz3/gpg.1.sh –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
gpg: failed to start the dirmngr ‚/usr/bin/dirmngr‘: No such file or directory
gpg: connecting dirmngr at ‚/tmp/apt-key-gpghome.OeAMshflz3/S.dirmngr‘ failed: No such file or directory
gpg: keyserver receive failed: No dirmngr
sudo apt-get install dirmngr
Moin Zusammen,
vielen Dank für diese Reihe (aber auch für den Rest!)
Ich habe mir ein Pi4 8GB gegönnt (als Neueinsteiger in Sachen Raspberry)
Natürlich habe dann das OS x64 eingespielt 😉
Leider klappt Mono aber nur für x86 da es ARM64 nicht unterstützt.
Alternativ bin ich zu blöd es einzurichten. Die hier gezeigte Methode klappt aber nicht.
Dieses nur als Hinweis! Falls ein anderer auch verzweifelt. Der Hinweis ist arg versteckt 🙁
Ich mache jetzt x86 drauf und beginne von vorne. Weit war ich eh noch nicht.
Gruß
Carsten
Hallo,
in meinen C# programm möchte ich eine Datenbank anbindung laufen lassen.
Leider sagt mir der Raspberry Pi dass das Paket Mysql.Data nicht gefunden wurde, wie können solche Pakete hinzugefügt werden?
Gruß