Mit C# und .NET eigene GUI Apps für den Raspberry Pi entwickeln

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.

Visual Studio Projekt Screenshot - C# .NET GUI Apps Raspberry Pi

 

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:

 

Visual Studio c# Raspberry GUI

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:

Raspberry Pi C# .NET 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.

7 Kommentare

  1. 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.

    Antworten
  2. 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.

    Antworten
    • @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.

      Antworten
      • 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?

  3. 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

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!