Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
Windows 10 IoT入門【Creators Update対応】(1)

Windows 10 IoT入門【Creators Update対応】(1)

Windows 10 IoT Core(最新Creators Update版)で何ができるのか?

2017年9月1日 改訂 (初版:2015/05/21)

最新Creators Update版のWindows 10 IoT Core(OS)は、どのような機能を持つのか? Raspberry Pi 3にインストールして試した結果を画像キャプチャして示しながら、その特徴と機能をまとめる。

デジタルアドバンテージ 一色 政彦
  • このエントリーをはてなブックマークに追加
本稿は、2015年5月21日に公開した『Raspberry Pi 2電子工作をWindows 10 IoT Coreで始めよう!』を大幅に改訂、ほぼリライトした記事です。

 安価な小型コンピューターであるRaspberry Pi(ラズベリーパリ、略してラズパイ)を活用すれば、お金を掛けずに手軽に電子工作が楽める。例えば、LEDを点滅させるような簡易なものから、ロボットのような機械の制御といったものまで、想像と工夫次第で「何でも」と言ってよいほどさまざまなモノが製作できる。特に、センサーなどから取得したデータをクラウドに送信して、蓄積されたビッグデータを分析・活用するIoT(Internet of Things)のデバイス製作には、お勧めできる。

 もちろんIoT向きのエッジデバイスとしては、Arduino(アルデュイーノ)なども有力な選択肢として挙げられるだろう。しかしRaspberry Piには、OSをインストールしてPC(パーソナルコンピューター)として利用できるという特徴があり、この特徴を生かせば多種多様なプログラムを動かせるという強力なメリットがある。Raspberry Piは、数あるマイコンボードの中でも特に活用の幅が広くて使いやすいデバイスだといえるだろう。

 Raspberry Piにインストールできる最も基本的なOSRaspbian(ラズビアン)だ。これ以外にも、筆者がよく使っているUbuntu MATEWindows 10 IoT Coreと、さまざまなOSがインストール可能となっている。本稿では、数あるOSの中からWindows 10 IoT Coreの最新Creators Update版(以下、IoT Core)を使用する。Windows 10 IoT Coreを使えば、C#/C++開発者にとって使い慣れたVisual Studioで開発できるし、これまで開発資産として蓄積されているArduinoのスケッチ(=プログラム)も基本的にそのまま動作するというメリットがある。そういったことに興味がある人は、ぜひ本連載を一通り読んでみてほしい。

 なお本連載では、Raspberry Piのモデル*1として、Raspberry Pi 3 Model B(図1)を使用する。

  • *1 Raspberry Piにはいくつかのモデルがある。各モデルで、メモリ容量やUSBポートの数などが異なる。モデルごとのハードウェア仕様などの紹介は、本稿では割愛するので、詳しくは公式サイトを参照してほしい。
図1 Raspberry Pi 3 Model B
図1 Raspberry Pi 3 Model B

 本連載では全4回で以下の内容を紹介する予定だ。

  • 第1回: Windows 10 IoT Core(最新Creators Update版)の概要と特徴(今回)
  • 第2回: [C#]Raspberry Pi 3 + Windows 10 IoT CoreによるGUIアプリの“IoT”開発
  • 第3回: [C#]バックグラウンドアプリ開発と、GPIOを活用した電子工作
  • 第4回: [C++]Arduinoスケッチによる開発と、Arduinoとの連携

 まず今回は、IoT Coreがどのようなものなのかを、実際に試してみた結果を示しながら、その特徴をまとめる。

Windows 10 IoT Coreとは? 何ができるのか?

Windows 10 IoT Coreの種類

 いくつかのマイコンボード向けに最適化されたIoT Coreが存在し、記事公開時点では次の7種類がリリースされている。

  • Raspberry Pi 3
  • Raspberry Pi 2
  • Raspberry Pi 2 Starter Pack
  • DragonBoard 410c
  • MinnowBoard MAX
  • Intel Joule 「2017年12月16日に出荷終了すること」がアナウンスされており、これから使うのならお勧めできない。
  • Intel Compute Stick USBスティック型PC。Creators Updateで追加された新しい対応デバイスである。

 今回は、IoT CoreをRaspberry Pi 3上で動かす(図2)。

図2 IoT Coreのメイン画面(IoT Core Default App: IoT Coreのデフォルトアプリ)

画面中央には[デバイス名]や[ネットワーク情報]が表示されている。
左上では[デバイス情報]/[コマンドライン]/[チュートリアル]タブが選択できる。
右上の電源アイコからは[シャットダウン]や[再起動]が行える。
右上の歯車アイコンからは[言語]や[キーボードレイアウト]といった[基本設定]だけでなく、Wi-Fi、Bluetooth、Cortanaの設定などが行える。

Windows 10 IoT Coreの特徴・機能

 筆者が試して確認した印象では、IoT Core(Creators Update版)には主に下記のような特徴・機能がある(ちなみに本稿は改訂記事であるが、前回触った2015年当時のプレビュー版のIoT Coreと比べて、当時は不満だった部分が最新版ではかなり改善してきていると思った)。

GUI有りのフォアグラウンド(Foreground)アプリ
  • GUI有りのフォアグラウンドアプリ(UWPアプリ)が動作する
  • GUIなので、キーボードやマウスによるユーザー入力を受け付ける(ちなみに前回レビューした初期バージョンと比べて反応は速くなった印象)
  • 単一のシングルウィンドウで動作し、IoTデバイス上で使えるシェル(=デスクトップ環境やマルチウィンドウシステム)は無い
図3 サンプルとして標準提供されており、インストール後にサンプルの実行をクリックするだけで、すぐに試せる「Hello World」アプリ
図3 サンプルとして標準提供されており、インストール後にサンプルの実行をクリックするだけで、すぐに試せる「Hello World」アプリ
複数アプリの実行制御
  • マルチウィンドウシステムでは無いが、複数のアプリを実行できる(前面にはどれか1つのフォアグラウンドアプリが表示された状態になる。iOS/Androidアプリと同じシングルウィンドウの仕組み)
  • デプロイ済みのフォアグラウンドアプリ/バックグラウンドアプリを、OSスタートアップ時に起動したり、手動で任意のタイミングで実行したりできる
  • なおデフォルトの設定では、図4のIoTCoreDefaultAppがOSスタートアップ(Startup)時に実行されることにより、図2に示したメイン画面が表示される
図4 リモートのWindows PC上にインストールしたWindows Device Portal(Webアプリ)上で複数のアプリを制御・管理できる
GUI無しのバックグラウンド(Background)アプリ
  • GUI無しのバックグラウンドアプリ(UWPライブラリが参照されたコンソールアプリ)が動作する(図4の下の2行)
  • フォアグラウンドアプリ、バックグラウンドアプリ、どちらでもGPIO(=電子工作に使うピン)を操作したり、IoT(=クラウドへのデータ送受信)を実現したりできる(図5)
図5 バックグラウンドアプリでのGPIO操作
図5 バックグラウンドアプリでのGPIO操作
コマンドライン
  • メイン画面の[コマンドライン]タブ(図2)を開くと、CUIで各種コマンドが実行できるリモートからでもほぼ同じ作業ができるので、ほとんど使わないはず)
  • Cドライブを探るとProgram FilesなどがありWindowsシステムそのものUSBメモリのような外部ドライブも利用できる)
図6 コマンドラインの実行例
図6 コマンドラインの実行例
  • 利用機会はほとんどないと思うが、Win32(C++)もしくは.NET Core(C#)のコンソールアプリもコマンドライン上で動作する(図7)
図7 コンソールアプリのコマンドライン実行例
図7 コンソールアプリのコマンドライン実行例
リモートからの設定・開発作業
  • ほとんどの設定作業と開発作業は、Windows PCからネットワーク越しのリモート操作のみとなる
  • ネットワーク接続は有線LAN接続もしくはWi-Fiで行う
  • 全ての作業はまず、Windows PC上にインストールしたWindows 10 IoT Core Dashboardから行うことになる(図8)
図8 Windows 10 IoT Core Dashboardに一覧表示されるネットワーク上の自分のデバイス
  • 図8の(右クリックにより表示された)コンテキストメニューのメニュー項目として表示されているように、リモート接続には「Device Portal(Webサイト)」「PowerShellセッション(LinuxのSSHと同じようなもの)」「IoTリモートクライアント(いわゆるリモートデスクトップ)」「Windowsエクスプローラーによるネットワーク共有」が使える(詳細後述)
すぐに試せるサンプルアプリ
  • Windows 10 IoT Core Dashboardの[サンプルを試す]ではいくつかのサンプルが試せる(図9)
  • ちなみに、後述する[Device Portal]の[Quick-run samples(即時実行サンプル)]ワークスペースでも同じサンプルが実行できる
GUI有りのフォアグランドアプリが実行される
図9 サンプルを簡単に試せるので、IoT Coreの機能内容がすぐに体験できる
  • また、IoT Core本体におけるメイン画面の[チュートリアル]タブから、電子工作のLチカ(=LEDを光らせること)がすぐに試せる(図10)
LEDが500ミリ秒間隔で点滅する
図10 電子工作のLチカサンプルもすぐに試せる
Device Portal
  • 前掲の図8に示したように、Windows 10 IoT Core Dashboard上に表示されたデバイス項目の右クリックメニューにある[Device Portal で開く]を実行するとWindows Device Portalがデフォルトブラウザーで開かれる(図11)
ログイン情報の入力を求められた場合、[ユーザー名]には「administrator」を入力する

ログイン情報の入力を求められた場合、[ユーザー名]には「administrator」を入力する

図11 Device Portalの初期表示([Device Settings]ワークスペース)
ワークスペース
  • 図11のように、Device Portalを表示すると、デバイス関連の設定が行える[Device Settings]ワークスペースが表示される
  • 左側のメニューリストに並んでいる項目はワークスペースと呼ばれ、[Device Settings]の他に、[Apps][Processes][Debug][Devices][Connectivity][TPM Configuration][Windows Update][Remote][Scratch][Tutorial]といったワークスペースが標準で用意されている(詳細後述)
  • 左上のハンバーガーメニューから、ワークスペースの内容をカスタマイズしたり、独自のワークスペースを作成したりできる(図12)
  • ちなみに、何のツールも追加されていない空の[Scratch]ワークスペースが最初から作成されているので、まずはこれを使うとよい
図12 Device Portalの初期表示([Device Settings]ワークスペース)
図12 Device Portalの初期表示([Device Settings]ワークスペース)

 Device Portalの内容は多岐にわたっているので、まとめて紹介しづらい。そこで、左側のメニュー項目について上から順番に1つずつ紹介していこう。

[Device Portal]Apps manager(アプリマネージャー)
  • [Apps manager]ワークスペースは、前掲の図4で示した機能の他に、任意のアプリを手動でインストールする機能がある(図13)
図13 Apps manager
[Device Portal]File explorer(ファイルエクスプローラー)
  • [File explorer]ワークスペースを使って、IoT Core本体のファイルシステム(ユーザーフォルダーのみ)を操作できるツールで、ファイルのダウンロード、削除、名前変更、アップロードができる(図13)
  • ただし、本格的にファイルを操作したい場合は、後述の「ネットワーク共有」の方が便利でお勧めである
図14 File explorer
[Device Portal]Processes Details(プロセスの詳細)
  • [Processes]-[Details]ワークスペースでは、実行中のプロセスを参照したり、プロセスを終了したりできる
図15 Processes Details
[Device Portal]Performance(パフォーマンス)
  • [Performance]ワークスペースでは、CPU、GPU、メモリ、I/O、ネットワークのパフォーマンスを閲覧できる
図16 Performance
[Device Portal]Run command(コマンド実行)
  • [Run command]ワークスペースでは、前述の「コマンドライン」と同様に各種コマンドが実行できる
  • ただし、本格的に各種コマンドを実行したい場合は、後述の「PowerShellセッション」の方が便利でお勧めである
図17 Run command
[Device Portal]Debug settings(デバッグ設定)
  • [Debug settings]ワークスペースでは、各種ダンプを取得したり、Visual Studioリモートデバッグなどのデバッグ設定が行えたりする
  • 運用時でしか起こらない問題など、特殊で危機的な状況のときに使うことになると思うが、筆者はまだ使ったことがない
図18 Debug settings
[Device Portal]ETW(Event Tracing for Windows)
  • [ETW]ワークスペースでは、ログをイベントとして残せるので便利
  • 参考コメント: 筆者は活用しているのだが、執筆時点では肝心の文字列出力にバグがあるようだ……
図19 ETW
[Device Portal]Perf tracing(パフォーマンストレース)
  • [Perf tracing]ワークスペースでは、パフォーマンス測定を実行でき、その結果を.etl形式のファイルとしてダウンロードできる
  • ダウンロードしたファイルをWindows Performance Analyzerで読み込むことで、システム性能などを閲覧・分析できる
図20 Perf tracing
[Device Portal]Devices(デバイス)とDirect Memory Mapped Driver
  • [Devices]ワークスペースでは、デバイスマネージャーが使え、デバイスやドライバーに関する情報を閲覧できる
  • また、デフォルトのコントローラードライバーとして、標準のInbox Driverの他に、Direct Memory Mapped DriverDMAP)が利用でき、DMAPを使うと、GPIOに高精度・高速にアクセスできるようになるので、例えば高精度が必要になる「リモコンの赤外線送受信」などを実現しやすい
  • Arduinoスケッチを動かしたい場合にも、DMAPを使用する
  • DMAPを使うと、GPIOコントローラーに対して、標準プのロバイダーではなく、Microsoft.IoT.LightningライブラリLightningGpioProviderを指定することになる点に注意が必要だ
図21 Devices
[Device Portal]Bluetooth
  • [Bluetooth]ワークスペースでは、Bluetoothデバイスが一覧表示され、ペアリングなどの操作もできる
図22 Bluetooth
[Device Portal]Network(ネットワーク)
  • [Network]ワークスペースでは、IP構成の情報表示や、ネットワークインターフェースの選択、接続設定を保存したプロファイルの切り替え、検出しているWi-FiのSSID名の一覧表示が行える
図23 Network
[Device Portal]その他

 ここまでに紹介したもの以外のワークスペースは、より細かな設定内容のものになっているので、画面キャプチャでの例は示さず、箇条書きのみで内容を紹介する。

  • [Internet connection sharing]ワークスペースでは、Wi-Fi SoftAP越しに接続されているデバイスへのインターネット接続共有が行える
  • [Onboarding]ワークスペースでは、IoTデバイス同士をWi-Fiでスムーズに接続する技術であるAllJoynに関する設定が行える
  • [TPM Configuration]ワークスペースでは、セキュリティ機能であるTrusted Platform ModuleTPM)の構成設定が行える。後述のAzure IoT Hubを使用する場合には自動で登録される
  • [Windows Update]ワークスペースでは、現在のOSアップデート状況が表示され、最新のアップデートがあるかを手動でチェックすることもできる。なお、通常のWindowsと同じく、OSは自動的にアップデートされ、その自動更新をストップする手段は提供されていない(wuauservサービスを無効にすればストップできるが、推奨はできない)
  • [Remote]ワークスペースでは、後述の「IoTリモートクライアント」を動かすためのモードを設定できる
  • [Scratch]ワークスペースは、空のワークスペースである(前述の「ワークスペース」で説明済み)
  • [Tutorial]ワークスペースは、Device Portalを使うためのチュートリアル(英語)である

 Device Portalの内容紹介は以上である。続いて、PowerShellセッション、IoTリモートクライアント、Windowsエクスプローラーによるネットワーク共有についてまとめる。

PowerShellセッション
  • Windows PowerShellを使って、IoT Core上の各種コマンドを実行できる
ユーザー名はadministrator
図24 PowerShellセッション
IoTリモートクライアント
  • 「いわゆるリモートデスクトップ」とすでに説明したが、Windows PCからリモートでIoT Core本体と同じ画面を操作できる(図25)
  • ただし、少し遅くて、わずかにタイムラグが生じる
  • リモートでIoT Core本体のGUIを操作する場面はあまりないと思われるが、本体画面を動画撮影するには便利である
図25 IoTリモートクライアント
  • IoTリモートクライアント(=Windows IoT Remote Client)は、Microsoftストアから入手できる
  • 前述したように、Device Portalの[Remote]ワークスペースで「IoTリモートクライアント」を動かすためのモードを事前に有効化する必要がある(図26)
図26 [Enable Windows IoT Remote Server]にチェックを入れる
ネットワーク共有
  • Windowsネットワーク上のPCクライアントと同じように、Windowsエクスプローラーでリモートのファイルシステムを操作できる
  • 前掲の図7で示したWin32(C++)/.NET Core(C#)コンソールアプリのファイル群は、このネットワーク共有機能を使ってWindowsエクスプローラー上で配置することになる
図27 ネットワーク共有
図27 ネットワーク共有
Azure IoT Hub開発の補助
  • IoT CoreではAzure IoT Hubに接続するためのプロビジョニング(=準備)が簡単に行える(図28)
  • 実際にプロビジョニングすると、前述のTPM構成が自動的に作成される。TPMといっても、Raspberry Pi 3にTPM(セキュリティチップ)が搭載されていないので、ソフトウェアでエミュレートしたものとなる
図28 Windows 10 IoT Core Dashboardの[Azure に接続]からプロビジョニング
その他の特徴・機能
  • IoT Coreのアプリ開発では、ここまでに説明したC#(もちろんVisual BasicもOK)やC++だけでなく、Node.jsPythonもサポートされている
  • Arduino関連の開発機能もさまざま提供されている。すでに紹介したArduinoスケッチを活用する以外にも、Arduinoとデバイス連携したり、IoT CoreからリモートでArduinoのGPIOを制御したりできる(Arduinoについては第4回で解説する予定)
  • 通常のheaded(=ディスプレイ接続するモードで、フォアグランドアプリも実行可能)と、図28に示すheadless(=ディスプレイ接続しないモードで、バックグラウンドアプリのみが実行可能)という2つのデバイスモード(ブート時に設定)がある。headlessモードは、特にシステムリソースを節約したい場面で使うことになるだろう
図29 headlessモード

 以上でIoT Coreの特徴と機能を一通り紹介した。ここまで「IoT Core」というエディションに絞って説明してきたが、Windows 10 IoTのエディションはこれだけではない。各エディションの概要と使い道を簡単に紹介して、今回の記事は終わることとしよう。

Windows 10 IoTの使い道と、対応エディション

 Windows IoTには、以下のエディションも用意されている。

  • Windows 10 IoT Enterprise ディスプレイを通してユーザーと対話するATMや券売機などのような産業IoTデバイス用のOS
  • Windows 10 IoT Mobile Enterprise スマートフォンやタブレットのようなモバイルIoTデバイス用のOS
  • Windows 10 IoT Core Raspberry Piのような小型IoTデバイス用のOS

 マイクロソフトは近年、「One Windows Platform」というコンセプトの下、各種デバイスOSを1つのWindowsに集約してきた。例えば、以前から組み込みデバイス向けに提供してきたWindows Embeddedファミリーは、このコンセプトに従い、図30のように、Windows Embedded Standard/Handheld間でのOSカーネルの集約に始まり、アプリモデル/アプリ自体/ドライバーなどを、徐々に現在のWindows 10 IoTに集約した。ちなみにWindows Embedded Compactは、Windows 10 IoTには集約されなかった。

図30 Windows 10 IoTに集約されていった以前のWindows Embeddedファミリー

Internet of Things Overview | Build 2015 | Channel 9」より引用。

 このようにしてWindows 10 IoTは、各種デバイス上で動くWindowsとなったので、「Windows on Devices」と表現されることがある。

 筆者が最初に触ったプレビュー版時点のIoT Coreは、あらゆる面で印象があまり良くなかった。しかし今回、最新Creators Update版のIoT Coreを久々に触ってみて、IoT Coreの各種機能が大きく拡張、改善されてきていることに、正直、驚いた。

 他のIoTデバイス開発環境と比較すると、確かにArduinoは、開発効率が良く、電子工作がしやすい。だが、メモリなどのシステムリソースが少なすぎること、複雑度の高いプログラムは作りにくいこと(特に複数のプログラムを同時実行できないこと)、Arduino Unoなど最も代表的なデバイスにもWi-Fiやイーサネットが標準搭載されていないことがデメリットとなる。特にIoTをしたい人にとっては、ネットにつなぐためにWi-Fiやイーサネットの部品を追加するという手間が1つ増えてしまうのは心理的にマイナスが大きい。

 そういったデメリットが気になる場合は、Raspberry Pi 3でRaspbianやUbuntu MATEを使えばよいかもしれない。しかしRaspbianなどのデスクトップの操作は重くて遅いことが気になってくる。「そもそもデスクトップなんて要らないのでは? マルチウィンドウシステムも要らないよね。でもGUIでポチポチと設定できるのは便利だから、そこだけGUIが欲しい」。

 そんなふうに考えると、リモートからDevice PortalとPowerShellでサクサクと必要な設定を一度施しておけば、あとはVisual StudioやWindowsエクスプローラーで簡単にデプロイできるのはすごく楽と思えるようになってきた。また、ユーザー操作が行われるディスプレイ画面が必要なケース(例えばデジタル看板や、キオスク端末、飲食店の注文タブレットなど)を考えても、そもそもそこにデスクトップ画面は必要なくて、スマートフォン的なシングルウィンドウのシステムの方が適切な形態に思える。

 以前は「他にいいのがあるのだから使わないよなぁ」という感じだったIoT Coreに対する印象が、「ちょっと使ってみてもいいかな」という印象に、筆者自身は変わってきた。ここまで読んでいただいた読者の皆さまはどうだろうか?

 さて次回は、今回の内容を踏まえて、より実践的な内容を説明していく。まずはインストール方法とGUI有りのフォアグラウンドアプリの作り方についてだ。お楽しみに。

サイトからのお知らせ

Twitterでつぶやこう!