Benutzer-Werkzeuge

Webseiten-Werkzeuge


edu:raspberrypi-programmierung_mit_c-sharp

RaspberryPi-Programmierung mit C#

Mit diesem kleinen Projekt sollen die GPIO-Pins eines Raspberry Pi mit einem C#-Programm angesteuert werden.

Auftrag

Eine LED, die an einem Pi angeschlossen ist, soll über einen Button in einer Windwos-Forms-Anwendung ein- und wieder ausgeschaltet werden können. Die LED wird über GPIO PIN7 und GND PIN6 angeschlossen. Vor der LED wird ein Widerstand (500 Ohm) geschaltet.

Vorgehen

  1. Baue die Schaltung auf dem Steckbrett auf.
  2. Lade die RaspberryPi.Net C# Bibliothek herunter und kompiliere sie. Es wird eine DLL in bin/Debug erzeugt. Diese wird benötigt, wenn wir aus C# heraus auf die GPIO des Pi zugreifen möchten.
  3. Erstelle ein Projekt und eine GUI nach dem folgenden Vorschlag.
  4. Binde die RPi-DLL als Verweis in dein Projekt ein.
  5. Erstelle den Quellcode für den Button.
  6. Übertrage das fertige Projekt auf den Pi (z.B. mit scp) und teste es. Du kannst es dort wie folgt starten.
$ sudo mono Projekt/bin/Debug/Projekt.exe

FAQ

Warum lässt sich die C#-Bibliothek nicht mit xbuild auf dem Pi kompilieren?
Es scheint ein Fehler in den locales zu sein. Quelle

Folgender Aufruf klappt:

$ LANG=en_GB.UTF-8 xbuild RaspberryPiDotNet.csproj

Warum wird der Namespace RaspberryPiDotNet nicht gefunden?
Es fehlt der Verweis auf die entsprechende dll in den Projektverweisen.

Warum lässt sich mein Projekt unter MonoDevelop nicht erstellen?
Wieder ein Problem mit den locales. Du kannst monodevelop wie folgt starten.

$ LANG=en_GB.UTF-8 monodevelop

Lösung

Es folgt die Lösung für dieses Projekt. Probiere erst selbst aus, auf eine Lösung zu kommen, bevor du diesen Abschnitt liest.

using System;
using Gtk;
using RaspberryPiDotNet;
 
public partial class MainWindow: Gtk.Window
{
    // Der aktuelle Status, der angibt, ob die LED leuchten soll.
    bool bStatus;
 
    // Steuert einen GPIO über das Dateisystem an.
    GPIOFile led;
 
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();
 
	bStatus = false;
	lblStatus.Text = "Status: " + bStatus;
 
	// Pins konfigurieren
 
	// Es wird PIN7 auf einem RPi 2 gewählt
	led = new GPIOFile (GPIOPins.V2_Pin_P1_07);
	led.PinDirection = GPIODirection.Out;
    }
 
    protected void OnDeleteEvent(object sender, DeleteEventArgs a)
    {
        Application.Quit();
        a.RetVal = true;
    }
 
    protected void OnBtnOnOffClicked (object sender, EventArgs e)
    {        
 	bStatus = !bStatus;
 
	lblStatus.Text = "Status: " + bStatus;
 
	if (bStatus) {
            led.Write (PinState.High);
	} else {
	    led.Write (PinState.Low);
	}
    }
}
  • GPIO ansteuern ist eine ausführliche Beschreibung dazu, wie GPIOs angesteuert werden können.
  • RaspberryPi.Net ist C# Bibliothek zur Ansteuerung von GPIO aus C# heraus.
edu/raspberrypi-programmierung_mit_c-sharp.txt · Zuletzt geändert: 2024-01-25 17:35 von pintman