Mit diesem kleinen Projekt sollen die GPIO-Pins eines Raspberry Pi mit einem C#-Programm angesteuert werden.
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.
bin/Debug
erzeugt. Diese wird benötigt, wenn wir aus C# heraus auf die GPIO des Pi zugreifen möchten.$ sudo mono Projekt/bin/Debug/Projekt.exe
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
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); } } }