Erste Eindrücke: .Net C# auf dem Raspberry Pi 2 mit Windows 10

Windows 10 auf dem Raspberry Pi 2! Astrein, direkt mal kurz die API ausprobieren und mit C# ein paar LEDs leuchten lassen… Ganz so schnell ging es dann doch nicht, denn die aktuelle Windows 10 Insider Preview, die auf dem Raspberry Pi 2 läuft, erfordert auch einen PC mit Windows 10 und Visual Studio 2015.

Vorbereitungen

Ich bin einfach die „Get Started“-Anleitung von Microsoft durchgegangen:

  • Windows 10 Insider Preview und Visual Studio 2015 RC auf einem PC installieren
  • Das Windows 10 IoT Core Insider Preview Image auf eine SD-Karte übertragen
    Pro-Tipp: Falls kein SD-Lesegerät in der Nähe ist: Digicam missbrauchen! 😉
  • Raspberry am Wohnzimmer-TV anschließen, SD-Karte rein, einschalten und freuen, dass sich tatsächlich etwas in Richtung Windows 10 tut 🙂
  • Mit der Powershell vom PC zum Raspberry verbinden um vorbildlich das Standardpasswort zu ändern

Raspberry Pi 2 mit Windows 10 am TV

Windows 10 muss übrigens nicht zwingend auf dem PC installiert werden. Es geht laut raspberry.tips auch mit einer aktuellen Version vom ADK. Dazu mehr im Installations-Tutorial auf raspberry.tips. Außerdem habe ich gelesen, dass es seitens Microsoft in Kürze eine „weitere Möglichkeit“ geben wird. Man kann gespannt sein. 😉

Kleiner Versuchsaufbau

Klaro, zur Hello-World-Feier wird wieder eine LED zum blinken gebracht.

Raspberry Pi 2 mit Windows 10 Output LED

Um einen InputPort zu testen, wollte ich die Blinkfrequenz mit einem Poti einstellbar machen. Daraus wurde nichts, weil der Raspberry Pi gar keinen AD-Wandler integriert hat. Gut, dann schließe ich einen Taster an, der als Turbo-Taste dient:

An exception of type 'System.ArgumentException' occurred in App1.exe but was not handled in user code WinRT information: value': Invalid argument Additional information: The parameter is incorrect.

Zack! Erste Exception auf dem Raspberry. 😀 Laut MSDN-Doku werden die internen PullDown- / PullUp-Widerstände noch nicht unterstützt. Daher steckt auf dem Steckbrett jetzt noch ein weiterer Widerstand, der den internen PullDown ersetzt.

Raspberry Pi 2 mit Windows 10 Input Taster

Der Code

using Windows.Devices.Gpio;
// ...

public sealed partial class MainPage : Page
{
    private const int LedPinNumber = 5;
    private const int PushbuttonPinNumber = 6;
    private const int NormalBlinkInterval = 500;
    private const int TurboBlinkInterval = 50;
        
    private GpioPin LedPin;
    private GpioPin PushButtonPin;

    private Timer BlinkTimer;

    public MainPage()
    {
        this.InitializeComponent();

        Unloaded += MainPage_Unloaded;

        InitGPIO();
        BlinkTimer = new Timer(TimerElapsed, this, 0, NormalBlinkInterval);
    }

    private void InitGPIO()
    {
        var gpio = GpioController.GetDefault();

        LedPin = gpio.OpenPin(LedPinNumber);
        LedPin.SetDriveMode(GpioPinDriveMode.Output);

        PushButtonPin = gpio.OpenPin(PushbuttonPinNumber);
        PushButtonPin.SetDriveMode(GpioPinDriveMode.Input);
        PushButtonPin.ValueChanged += PushButtonPin_ValueChanged;
    }

    private void TimerElapsed(object state)
    {
        if (LedPin.Read() == GpioPinValue.High)
        {
            LedPin.Write(GpioPinValue.Low);
        }
        else
        {
            LedPin.Write(GpioPinValue.High);
        }
    }

    private void PushButtonPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
    {
        if (args.Edge == GpioPinEdge.RisingEdge)
        {
            BlinkTimer.Change(0, TurboBlinkInterval);
        }
        else
        {
            BlinkTimer.Change(0, NormalBlinkInterval);
        }
    }

    private void MainPage_Unloaded(object sender, RoutedEventArgs e)
    {
        LedPin.Dispose();
    }
}

Die API für die GPIOs finde ich gut gelungen. Bei dem Beispielcode wird zurzeit der Wechsel des Schaltzustands (GpioPinEdge.RisingEdge / GpioPinEdge.FallingEdge) ab und zu falsch erkannt. Sobald die Richtung zum ersten Mal falsch erkannt wurde, wird diese bei den nächsten Wechseln auch genau falsch herum interpretiert. Das Verhalten ist solange umgedreht, bis der „Fehler“ wieder auftritt. Ob es was mit einer ungünstigen Entprellung zu tun hat? Ich werde ein Ticket aufmachen, abwarten und Tee trinken. 😉

Fazit

Das Anhängsel „Insider Preview“ passt für die aktuelle Vorab-Version von Windows 10 IoT Core perfekt. Kleine Stolperfallen gibt es noch, im groben wirkt es schon ziemlich weit und es macht Spaß das auszuprobieren.

Weiterführende Links

2 thoughts on “Erste Eindrücke: .Net C# auf dem Raspberry Pi 2 mit Windows 10

  • 16. Januar 2017 at 1:45
    Permalink

    Toller Artikel. Gefällt mir gut.

    Probieren Sie doch den Taster mit Hilfe eines Kondensators oder eines Schmitt-Triggers zu entprellen. Vermutlich funktioniert es dann ohne den Fehler – wenn das der Fehler war.

    Grüße
    Artur

    Reply
  • 9. August 2017 at 18:24
    Permalink

    meist reicht sogar ein Keramikkondensator schon aus um den Schalter zu entprellen
    Grüsse Nelson

    Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.