Windows 10 IoT Core を Raspberry Pi 2 にインストールする

Raspberry Pi 2 で Windows アプリを動かす

Build 2015 は面白そうな発表が盛りだくさんでした。

Android, iOS アプリ開発者の方々も興奮し切りではないかと思います。

さて、その中でも私が特に惹かれたのが Raspberry Pi 2 向け Windows の公開です。

何を隠そう Raspberry Pi B+ の購入から間もない内に発表された Raspberry Pi 2を完全に買い渋っていた私の背中を押したのがマイクロソフトによる「Raspberry Pi 2 向け Windows 10 出しちゃうよ」発言だったのですから。

Windows 10 TP インストール

下記を使えば Windows 10 がなくてもRaspberry Pi 向け Windows はインストール可能だそうです。

https://msdn.microsoft.com/ja-jp/windows/hardware/dn913721.aspx

そんなこととはつゆ知らず、Raspberry Pi 2 に Windows をインストール(SDカードへの焼きこみ)には Windows 10 TP が必要だと思い込みまずインストール。

VM, 手持ちの Windows マシンとのデュアルブートどちらでもSDカードへの焼きこみは可能です。

Windows 10 TP のディスクイメージは下記から取得できます。

http://windows.microsoft.com/ja-jp/windows/preview-iso

VirtualBox 使用

下記なんかを参考に、特にはまりポイントはなかったはず。

http://www.lancork.net/2014/10/windows-10-technical-preview-oracle-vm-virtualbox/

VirtualBox の設定で USB 機器を設定する。

http://qiita.com/civic/items/684c4b82428feb0c4ae1

SD カード(リーダーライター)がゲストの Windows 10 から見えれば OK。

デュアルブート

私は Windows 7 PC をデュアルブートにしました。

Windows 7パーティション縮小は「ディスクの管理」からではサイズ制限があってうまくいかないとか、8 の時にはまったやつをすっかり忘れていました。

下記を使用して Windows 10 用のディスク領域を確保。

http://gigazine.net/news/20101118_Easeus_Partition_Manager/

Windows 10 インストール用 USB フラッシュメモリ作成

Windows マシンをお持ちなら WUDT が簡単です。

http://www.atmarkit.co.jp/ait/articles/0912/18/news110.html

あとは BIOS から起動順序を変更し、作成した USB フラッシュメモリから起動してください。

インストール先には先ほど確保したディスク領域を選ぶのを忘れないように。

Raspberry Pi 2 への Windows インストール

基本、下記に沿って進めます。

http://ms-iot.github.io/content/GetStarted.htm

しっかりしたドキュメントで安心感があります。

Windows 10 IoT Core Insider Preview の入手

下記からダウンロードします。

https://connect.microsoft.com/windowsembeddedIoT/Downloads/DownloadDetails.aspx?DownloadID=57782

諸々の登録やらアンケート、規約への同意を必要に応じて行ってください。

micro SD カードへの焼きこみ

下記の通りで問題なかったです。

http://ms-iot.github.io/content/win10/SetupRPI.htm

特にはまることもなく無事に起動できました。

マウスは認識してくれたけどキーボードはダメみたい。

f:id:kfurue:20150502100609j:plain

設定アイコンからネットワークの設定とかができて、電源アイコンから電源がきれます。

そ、それだけ。。?

Visual Studio 2015 RC インストール

気を取り直して、Windows_IoT_Core_RPI2_BUILD.zip を解凍すると、中に WindowsDeveloperProgramForIoT.msi が入っています。

これを Windows 10 TP 側にインストールすると、Windows 入り Raspberry Pi を操作できるらしいのでインストール、と思ったら Visual Studio が無いとあきまへんだそうです。

どうせなら Build で発表のあった新機能も使ってみたいので 2015 RC をインストール。

https://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs.aspx

インストール時に、ユニバーサルWindowsアプリ開発ツールの選択がいるとかいらないとか(インストール後でも、インストーラをもう一度起動して「変更」を選べば追加可能ぽいです)。

f:id:kfurue:20150506223906p:plain

WindowsIoTCoreWatcher のインストール

これでやっと watcher アプリがインストールできます。

WindowsDeveloperProgramForIoT.msi を選択すれば普通にインストールできますが、そのままでは起動できません(64bit環境だけ?)。

https://connect.microsoft.com/windowsembeddedIoT/Feedback/Details/1295993

ということで Developer Command Prompt for VS2015(日本語環境の場合は「開発者コマンド プロンプト for VS2015」) を管理者権限で起動し、下記を実行。

sn -Vr "C:\Program Files (x86)\Microsoft IoT\WindowsIoTCoreWatcher.exe"
corflags "C:\Program Files (x86)\Microsoft IoT\WindowsIoTCoreWatcher.exe" /32BIT+ /FORCE

これで watcher なるものが起動できます。

Raspberry Pi 2 + Windows 10 IoT Core のマシン名や IP アドレスが見れます。

こ、これだけ。。。?

対象の Raspberry Pi を右クリックで「Web Browser Here」でステータスやら確認できます。

f:id:kfurue:20150506223859p:plain

が、ブラウザから Raspberry Pi の IP アドレスを指定してやれば同じ画面が見れます。

watcher、無理に使わなくてもいいかもしれませんね。

Raspberry Pi 2 への PowerShell でのリモート接続

これは下記の通り。

http://ms-iot.github.io/content/win10/samples/PowerShell.htm

はまりポイントなしです。

Raspberry Pi 2 上でのデバッグ実行

下記に沿って進めていくと、Raspberry Pi 2 上でアプリが実行できます。

http://ms-iot.github.io/content/win10/samples/HelloWorld.htm

Windows アプリ初心者だもので、以下のコードを足せとか言われても「え、どこに?」状態でした。

変更後のコードを貼っておきます。

MainPage.xaml

<Page
    x:Class="App1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
            <TextBox x:Name="HelloMessage" Text="Hello, World!" Margin="10" IsReadOnly="True"/>
            <Button x:Name="ClickMe" Content="Click Me!"  Margin="10" HorizontalAlignment="Center" Click="ClickMe_Click"/>
        </StackPanel>
    </Grid>
</Page>

MainPage.xaml.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409

namespace App1
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void ClickMe_Click(object sender, RoutedEventArgs e)
        {
            this.HelloMessage.Text = "Hello, Windows IoT Core!";
        }

    }
}

Default Language 云々で警告がでますが(私の環境だけ?)、マニフェストデザイナーが起動できず修正不可(xml 直接いじれよ)。

実行は可能なので放置。

ソリューション(?)のプロパティから 構成プロパティ→構成 と辿り、プラットフォームを ARM に変更する必要がありました。

f:id:kfurue:20150506223902p:plain

それ以外は上記リンク先の通りに進めれば Raspberry Pi の HDMI 出力先モニタ上にアプリのラベルとボタンが表示されます。

雑感

長い道のりでしたが、まぁそのあれです、Raspbian とかで慣れちゃってたのでてっきりデスクトップ的なの動くと思ってたのは私だけではないはず。。

ともあれこれで環境は整いました。IoT × Windows、その未来や如何に。

お次は Visual Studio への iOS アプリ移植でも試してみようかな。(まだハードル高そう)