Raspberry Pi 2 und Windows 10 IoT

Bereits seit einiger Zeit beschäftige ich mich hobbymäßig mit Raspberry Pi und Arduino und habe mit den praktischen kleinen Devices schon mehrere kleinere Projekte (RFID-Reader, Zugangskontrolle, Displayausgabe…) umgesetzt.

Jedoch war ich immer etwas wehmütig die Lieblingsprogrammiersprache meiner Wahl, C#, mangels Unterstützung und Compiler nicht einsetzen zu können.Umso erfreuter war ich, als parallel zum Rapsberry Pi 2, auch die Unterstützung von Windows 10 IoT für den RPi 2 angekündigt wurde.

Zeitlich kam ich jedoch erst spät nach dem Verkaufsstart des Raspberry Pi 2 und der Veröffentlichung von Windows 10 I0T dazu mich mit der Thematik zu beschäftigen.

Nichtsdestotrotz möchte ich meine Erfahrungen für die Nachwelt und mich hier festhalten.

1. Voraussetzungen

  • Raspberry Pi 2 (z.B. Amazon Raspberry Pi 2)
  • MicroSD-Karte. Ich verwende eine 32 GB von Samsung (z.B. Amazon Samsung SDHC 32GB)
  • Netzteil mit 5V, 2.000 mA (z.B. Amazon Netzteil Radges)
  • Ggf. Gehäuse (z.B. Amazon Gehäuse OneNineDesign)
  • HDMI-Kabel, Monitor, Maus, Tastatur
  • LAN-Kabel und Verbindung zum Internet via Router etc.
  • Visual Studio 2015 RC (Professional oder Community)
  • Windows 10 Preview oder Windows 10 SDK für Windows 8.1
  • Viel Kaffee 😉

2. Windows 10 IoT Core Insider Preview herunterladen und SD-Karte vorbereiten

  • Auf der Microsoft Connect registrieren und einloggen
  • Nutzungsbestimmungen akzeptieren
  • Im Bereich Windows Embedded Pre-Release Programs die Downloads aufrufen. Hier kann das aktuellste Image heruntergeladen werden. Derzeit ist das Build vom 12.05.2015 aktuellBildschirmfoto 2015-05-24 um 22.08.34
  • Nach dem Entpacken des Zip Files sieht der Inhalt folgendermaßen aus:

Bildschirmfoto 2015-05-24 um 22.19.39

Das Flash File kann nicht direkt auf die SD-Karte kopiert werden sondern muss über das Kommandozeilenprogramm dism.exe auf die als Image auf die Karte übertragen werden. Wie an meinem Screenshots erkennbar bin ich Mac User und lasse Windows 10 in einer Fusion VM laufen. Hier stellte sich für mich das erste große Problem dar. Seit geraumer Zeit werden die SD-Cardreader in MacBooks nicht mehr über USB sondern über direkt am PCIe-Bus angebunden (VMWare). Anfangs habe ich mein Image über einen Windows Rechner übertragen, mittlerweile habe ich einen externen USB SD Card Reader in die VM eingebunden.

Zum übertragen des Images muss erst einmal die physical disk number ermittelt werden:

  • Öffnen einer PowerShell als Administrator
  • wmic diskdrive list brief 
  • Kopieren der physical disk number der SD Card. Z.B. \\.\PhysicalDrive2

Anschließend kann mit der Übertragung des Images begonnen werden:

  • Öffnen einer neuen PowerShell als Administrator
  • Wechsel in das Verzeichnis, im dem die Flash.ffu lieg
  • dism.exe /Apply-Image /ImageFile:flash.ffu /ApplyDrive:\\.\PhysicalDriveN /SkipPlatformCheck

Ich hatte mehrmals den Fehler „Error 50“. Nach mehreren Ejects der Karte und erneutem Einlegen wurde das Image aber übertragen.

Anschließend kann die SD-Karte in den Raspberry eingelegt werden. Wenn dieser noch nicht mit Monitor und restlicher Peripherie verbunden ist, ist jetzt ein guter Zeitpunkt. Für die Verbindung zum Internet verwende ich einen WLAN Extender, welchen ich via Kabel mit dem Raspberry verbinde. Anschließend kann der RPi das erste mal mit Strom versorgt werden. Nach einem kurzen Farbspiel und Ladescreen sollte folgendes Bild sichtbar sein:

Voilà auf dem Pi läuft Windows 10 IoT.

3. Zugriff und Konfiguration von Windows 10 IoT 

Es gibt mehrere Möglichkeiten Windows 10 IoT zu konfigurieren.

Standardmäßig läuft auf dem Windows 10 IoT ein Webserver mit einem rudimentären, aber ganz nützlichen Webinterface. Dieses ist über die IP-Adresse des Pi erreichbar.

  • User: Administrator
  • Passwort: p@ssw0rd (der drittletzte Buchstabe ist eine Null)

Das Webinterface bietet folgende Möglichkeiten:

  • Apps starten
  • Apps installieren
  • Zertifikate verwalten
  • Deployment Logs einsehen
  • Prozesse verwalten
  • Grafische Darstellung der Performance (CPU, Memory, IO)
  • Kernel & Process Dumps
  • View Kernel Logs
  • ETW (Event Tracing for Windows)
  • Performance Tracing
  • Übersicht aller Devices
  • Netzwerkeinstellungen
  • Reboot & Shutdown (hat bei mir allerdings noch nie funktioniert)

Viel umfangreicher ist es, sich über eine PowerShell Remote Session mit dem Pi zu verbinden und diesen hierüber zu konfigurieren.

Hierzu muss die PowerShell als Administrator gestartet werden. Ich verwende meistens das PowerShell Integrated Scripting Environment (ISE).

Folgende Schritte sind zum Verbinden mit dem Pi erforderlich:

  • Windows Remote Management (WinRM) auf dem lokalen PC starten (wenn noch nicht geschehen)
  • Den Pi als vertrauenswürdig einstufen
  • Eine PsSession zum Pi aufbauen.

Zusätzlich sollte noch das Modul psreadline entfernt werden, da dieses bekanntermaßen zu einer Exception führen könnte.

Ich habe alles in einem PS-Skript zusammen gefasst, welches ich bei Bedarf aufrufen kann:

 #Variablendeklaration

$computer = gc env:computername

#Prüfen ob Dienst WinRM bereits gestartet

$wmi = get-wmiobject -namespace „root\CIMV2“ -query „select * from win32_service where Name=’WinRM'“ -computer $computer

If ($wmi.State -eq „Stopped“) {net start winrm}

#RaspberryPi als vertrauenswürdig einstufen & psreadline entfernen

Set-Item WSMan:\localhost\Client\TrustedHosts -Value minwinpc -Force

#remove-module psreadline -force

#PsSession mit Raspberry herstellen

Enter-PsSession -ComputerName minwinpc -Credential minwinpc\Administrator 

Im Grunde ist dieses Skript fertig, kann aber nicht ausgeführt werden wenn die Execution Policy dies verbietet. Diese ist standardmäßig auf restricted: was das Ausführen verhindert.

Folgender Fehler wird angezeigt:

Die Datei „C:\Users\…“ kann nicht geladen werden, da die
Ausführung von Skripts auf diesem System deaktiviert ist. Weitere
Informationen finden Sie unter „about_Execution_Policies“ unter
„http://go.microsoft.com/fwlink/?LinkID=135170“.
+ CategoryInfo : Sicherheitsfehler: (:) [], ParentContainsErrorRe
cordException
+ FullyQualifiedErrorId : UnauthorizedAccess

Um das Ausführen dennoch zu erlauben, muss die ExectuionPolicy geändert werden. In einer weiteren PowerShell Anwendung zeigt

get-executionpolicy -list

die derzeitigen Einstellungen an.

 

Über

set-executionpolicy remotesigned  CurentUser bzw. set-executionpolicy remotesigned  LocalMachine kann eine Ausführung von lokalen Skripts erlaubt werden.

Anschließend kann eine PsSession zum Raspberry hergestellt werden.

  • Hierüber kann Beispielsweise das Passwort geändert werden: net user Administrator [Neues Passwort]
  • Der Pi heruntergefahren werden: shutdown -s -t 0 (Herunterfahren nach 0 Sekunden)
  • Der Pi neu gestartet werden: shutdown -r -t 0

Eine (fast) vollständige Liste findet man auf der MS-IoT Seite.

4. Universal App und Raspberry Pi

Wenn noch nicht parallel geschehen, kann jetzt auf dem Windows 10 PC / VM Visual Studio 2015 installiert werden.

Anschließend kann die erste Universal App erstellt werden:

 

Bei dem ersten Zugriff auf die MainPage.xaml wurde diese nicht dargestellt, da keine gültige DeveloperLicense verfügbar war. Auch der Versuch eine DeveloperLicence mittels

  • Show-WindowsDeveloperLicenseRegistration (zeigt alle derzeitigen DevelopersLicenses an)
  • Get-WindowsDeveloperLicense

zu bekommen schlug fehl.

Problem war das Fehlen der Gruppenrichtlinie, welche das Entwickeln und Bereitstellen von WindowsStore Apps erlaubt. Diese kann über gpedit.msc –> Computerkonfiguration –> Administrative Vorlagen –> Windows Komponenten –> Bereitstellung von App-Paketen –> Allows development of Windows Store Apps.. (auf Aktiviert setzen) angepasst werden.

 

 

5. Deploy und Debug von Universal Apps auf dem Raspberry Pi

Um die Anwendung auf den Pi zu Deployen ist es erforderlich diesen auf die ARM Plattform umzustellen (Achtung danach werden keine XAML Pages mehr im Designer angezeigt, dazu einfach wieder auf X86 / 64 wechseln)

Anschließend muss das Target Device für´s Debuggern festgelegt werden:

  • Target Device: Remote Machine
  • IP-Adresse eintragen
  • Use Authentication: Deaktivieren

Anschließend kann die Anwendung über die Solution deployed und danach über den debugger ausgeführt werden.

So sah mein erster Versuch mit einer paar XAML Controls aus

Schreibe einen Kommentar

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