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
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.
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:
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.
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.
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
meist reicht sogar ein Keramikkondensator schon aus um den Schalter zu entprellen
Grüsse Nelson
Absolut tolle Anleitung. Genau das, was ich gerade gesucht habe. Mach weiter so, Deine Seite ist super!