「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
Windows 10 IoT Coreの評価を実施中。
基本 †
Headモード、Headlessモード †
Headモード †
Headlessモード †
- GUI無しモード
- リソース消費を抑えることが出来る。
切替方法 †
以下のコマンドで切り替え可能。
ドライバの種類 †
Inboxドライバ †
- プラグ・アンド・プレイに対応した機器をパソコンに接続すると、
Windowsに同梱されるドライバの中から自動的にドライバが選択され組み込まれる。
- この、Windowsに同梱されているドライバを、Inboxドライバと呼ぶ。
DMAPドライバ †
- DMAP : Direct Memory Mapped
- InboxドライバよりもGPIOパフォーマンスの向上を実現する開発用ドライバ
- 以下のケースでは、安全にDMAPドライバを使用できる。
- 信頼できるアプリケーションのみのマシン上で使用する。
- Lightningプロバイダ(Microsoft.IoT.Lightning.Providers.*)経由でのみ使用する。
- または、「Arduino Wiring sketches」のみ使用する。
- 悪意のあるアプリはH/W、Securityの問題を引き起こす可能性がある。
準備 †
作業用のPC †
- OSは、Windows 10とする。
- 企業内なら、開発用NWへの接続が許可されているもの。
IoT機器 †
本体 †
Raspberry Pi 3 MODEL B
電源 †
micro USB(Androidと同じ)
周辺機器 †
ストレージ †
- microSDメモリーカード(Raspberry Pi 3に挿す)
- microSD から メモリーカード への 変換アダプター(PCに挿す)
ネットワーク †
スイッチとして機能する機器(PCとRaspberry Pi 3を接続する)
- 有線LANの場合: L2スイッチとLANケーブル
- 無線LANの場合: プライバシー・セパレータ機能を搭載したWifiルーター
入出力 †
- モニタとHDMI ケーブル。
- USB マウス, USB キーボード
セットアップ †
Windows 10 IoT Coreのインストール †
Windows 10 IoT Core Dashboardのダウンロード †
- Get Windows 10 IoT Core Dashboardをクリック
- setup.exeがダウンロードされるのでダブルクリックして実行
- Windows 10 IoT Core Dashboardをインストールする。
microSDにWindows 10 IoT CoreのOSイメージを書き込む。 †
- インストール後、そのままWindows 10 IoT Core Dashboardが起動する。
- 「microSD から メモリーカード への 変換アダプター」をPCに挿す。
- [新しいデバイスのセットアップ]で以下の入力を行う。
- [ダウンロードとインストール]をクリックしてmicroSDにOSイメージを書き込む。
- はじめに、Windows 10 IoT Coreがダウンロードされる。
- 次に、microSDにOSイメージを書き込まれる(フラッシング)。
この際、コマンド・プロンプトで進捗表示がされる。
- 書き込みが完了すると「SDカードは準備が完了しています」と表示される。
- この画面で表示されている「3.デバイスを検索します」の「自分のデバイス」ボタンを押下し、
「Dashboard」と「Raspberry Pi 3」との通信を許可しておく。
Windows10IoTCoreDashboard?.exeのインバウンドが許可される。
Raspberry Pi 3へ機器を接続 †
- 周辺機器
- OSイメージを書き込んだ microSD を挿す。
- 有線接続の場合、LANケーブルに接続する。
- 入出力
- USB マウス、USB キーボード
- モニタ(HDMI ケーブル)
Windows 10 IoT Coreの初期設定をする。 †
起動時 †
- 無線LANの場合、
- Wifiを選択可能
- IPアドレスはDHCPで自動配布される。
- 有線LANの場合、
- 起動前にLANケーブルを接続しておく。
- IPアドレスはAPIPAのアドレスになっている。
その他、適宜 †
Windows 10 IoT Core Dashboardから接続・操作する。 †
- PC側のIPアドレスの設定
- 無線LANの場合、DHCPで自動配布されるアドレスで通信可能なので設定は不要。
- 有線LANの場合、APIPAのアドレスを確認し、ホストPCのアドレスを設定・変更する。
- IPアドレス : 169.254.x.x
- サブネットマスク : 255.255.0.0
- Windows 10 IoT Core Dashboardを起動する。
- 「自分のデバイス」からRaspberry Pi 3を選択、
Device Portal †
- 接続
- 右クリック、[Device Portalで開く]を選択する。
- Administratorのログイン・アカウント情報を入力する。
- ログイン後、Device Portalが表示される。
- 操作
- Device Portalから操作する。
- HOME:タイムゾーンの変更
- PROCESS: 電源(再起動など)
- ,etc.
SMB †
- 接続
- 右クリック、[ネットワーク共有を開く]を選択する。
上手く行かない時は、「\\[Raspberry Pi 3のIPアドレス]\C$」を直打ち。
- Administratorのログイン・アカウント情報を入力する。
- 「\\[Raspberry Pi 3のIPアドレス]\C$」が開く。
- 接続
- 右クリック、[PowerShellを起動]を選択する。
- Administratorのログイン・アカウント情報を入力する。
開発環境 †
開発用PCをの準備 †
Windows 10がインストールされたPCを準備する。
開発環境のセットアップ †
- ターゲットがCreators Updade対象になっているようで、Visual Studio 2015ではなく2017が必要。
- インストール時に、ユニバーサル Windowsアプリ開発ツールをインストールすること。
開発者モードを有効にする。 †
Windows SDKのインストール †
Windows 10 用のWindows SDKをダウンロードしてインストールする。
- Windows 10 用のWindows SDKをダウンロード
- 以下から選択可能だが、ここでは1台だけの構築なのでEXEを選択する。
- .EXE をダウンロードする
- .ISO をダウンロードする
- Windows 10 用のWindows SDKをインストール
- winsdksetup.exeをダブルクリックしてインストーラを実行。
- インストーラーが起動したら既定値でインストールする。
“Hello World”的にサンプルを実行する準備 †
サンプル・プログラムをGitHubからDownloadZIPする。 †
- 解凍して、HelloWorld?とHelloBlinky?を入手する。
HelloWorld?する。 †
- HelloWorld?.slnをダブルクリックしてVS 2017を起動する。
- [Debug]ボタンのドロップダウンから[リモート コンピューター]を選択。
- 以下の入力を行う。
- アドレス: IPアドレスを手打ち(自動検出できなかった場合)
- 認証モード: ユニバーサル(暗号化されていないプロトコル)
- [選択]ボタンを押下する。
- [Debug]ボタンを押下する。
HelloBlinky?する。 †
- HelloWorld?.slnと同じ手順で、HelloBlinky?.slnをDebug実行する。
- (2回目なので、)自動検出されているRaspberry Pi 3を選択する。
- GPIO pinsの初期化が正しく行われた旨のメッセージが表示される。
サンプル・プログラムをデプロイして起動する。 †
デプロイ †
- [ソリューション構成]を「Release」に変更し、
- [ビルド]から「xxの配置」を選択する。
- [配置が完了しました]・・・の[完全パッケージ名]をメモしておく。
スタートアップアプリに指定 †
- 以下のコマンドを実行する。
iotstartup list
- shutdown /r /t 0で再起動すれば、次回起動時から自作のIoTアプリが起動する。
いろいろな処理を実装する。 †
空のプロジェクトから実装を始める。 †
プロジェクトの新規作成 †
- [新規作成]-[プロジェクト]
- [テンプレート]-[Visual C#]
- GUI有りのIoTアプリ
[Windows ユニバーサル]-[空白のアプリ]を選択
- GUI無しのIoTアプリ
[Windows IoT Core]-[Background Application (IoT)]を選択
- Background Application (IoT)の利用には以下のインストールが必要。
- Windows IoT Core Project Templates for VS 201x - Visual Studio Marketplace
UWP バージョンを選択する †
[ターゲットバージョン]と[最小バージョン]を選択する。
- UWP バージョンの説明
- ターゲットバージョン :一般ユーザー向けのコードを新しく開発する場合、常に最新ビルドの Windows (14393) を使う。
- 最小バージョン :エンタープライズ アプリを開発する場合は、最小バージョンで古いバージョンをサポートすることを検討する。
Debug実行 †
- この状態だと、選択したUWP バージョン次第で、ローカルでのDebug実行も可能。
- しかし、移行、H/Wに関する処理を実装していくとローカルでのDebug実行はできなくなる。
色々設定を行う †
- 参照設定で[Universal Windows]-[拡張]-[Windows IoT Extension for the UWP]をチェックする。
- NuGetから「Direct Memory Mapped Driver」の「Microsoft.IoT.Lightning」をインストールして参照設定を追加。
- 以下の「Direct Memory Mapped Driver」の「Microsoft.IoT.Lightning」を利用するための設定を行う。
- [Device Portal]からドライバを切替える。
- [Devices]をクリックしてページを切り替える。
- [Default Controller Driver]を[Direct Memory Mapped Driver]に設定する。
- 「Warning: This option will reduce Windows security
in exchange for performance using an in development driver.」と表示される。
- [Update Driver]をクリックしてドライバ設定を更新する。
- リブートするかどうかのメッセージが表示されるのでリブートする。
- 以下のコードをマニフェストファイル(Package.appxmanifest)に追加。
Lチカを実装する。 †
using System.Threading.Tasks;
using Windows.Devices;
using Windows.Devices.Gpio;
using Microsoft.IoT.Lightning.Providers;
namespace App1
{
/// <summary>
/// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
/// </summary>
public sealed partial class MainPage : Page
{
/// <summary>
/// GpioPin #5は青色
/// GpioPin #6は白色
/// </summary>
private readonly int LED_PIN = 6;
/// <summary>GpioPin</summary>
private GpioPin _gpioPin;
/// <summary>Lチカを実装する。</summary>
public MainPage()
{
this.InitializeComponent();
// LightningProviderが利用可能かどうかチェックする。
if (LightningProvider.IsLightningEnabled)
{
// LowLevelDevicesAggregateProviderを取得
LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();
}
// GpioControllerを取得
GpioController gpioCtrl = GpioController.GetDefault();
if (gpioCtrl == null)
{
return;
}
// GpioControllerでGpioをコントロール。
this._gpioPin = gpioCtrl.OpenPin(LED_PIN);
this._gpioPin.SetDriveMode(GpioPinDriveMode.Output);
this._gpioPin.Write(GpioPinValue.High);
this.loop();
}
/// <summary>
/// UIをハングさせないよう、asyncなloop内でawaitを使用する。
/// System.Threading.Threadが無いので、こうなる。
/// </summary>
private async void loop()
{
while (true)
{
await Task.Delay(1000);
this._gpioPin.Write(GpioPinValue.Low);
await Task.Delay(1000);
this._gpioPin.Write(GpioPinValue.High);
}
}
}
}
参考 †
電子工作 †
Build Insider †
MS †
ms-iot/samples: Windows 10 IoT Core Samples †
https://github.com/ms-iot/samples
Windows 10 IoTCore ハンズオントレーニング †
Tags: :インフラストラクチャ, :Windows, :IoT