Azure + Win10 IoT Core 関連のメモ

Azure やら Windows 10 IoT Core やらで IoT 的なことをするにあたって、躓いたポイントとか、

ライブラリの情報とかを適当にメモっておこうと思います。(最近全然ブログ書いてないし…)

 

Event Hubs で最初につまずくのが SAS トークンの生成回り。

https://azure.microsoft.com/ja-jp/documentation/articles/service-bus-sas-overview/

 

No.1 がブチザッキに書いてくれていますが、そこそこ面倒です。

https://buchizo.wordpress.com/2015/08/11/windows-10-iot-core%EF%BC%88uwp%EF%BC%89%E3%81%A7sas%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%82%92%E7%94%9F%E6%88%90/

 

代替策はないもんかと探してみると、IoT Hub の発表に伴ってか、Device Explorer なんて便利ツールが。

https://github.com/Azure/azure-iot-sdks/blob/master/tools/DeviceExplorer/doc/how_to_use_device_explorer.md

SAS トークンとか、接続文字列を生成してくれる模様です。

DeviceExplorer

 

あと、ライブラリ回りの話。

MS 純正の WindowsAzure.ServiceBus は .NET Framework 4.5 Full Profile が必要で、
Raspberry Pi 2 とか Windows 10 IoT Core 系の UWP では使えない。

https://msdn.microsoft.com/en-us/library/ee732537.aspx

 

他にはないものかと探してみると、AMQPNET Lite と AzureSBLite なんてものがあるらしい。

http://amqpnetlite.codeplex.com/

https://github.com/ppatierno/azuresblite

 

さらに、先ほどの Device Explorer とあわせて Microsoft.Azure.Devices.Client なんてものまで純正で発見。

https://www.nuget.org/packages/Microsoft.Azure.Devices.Client/

Preview ですが期待大ですね。

 

で、Device Explorer あたりを軽くまとめようと思ったら、linyixian 先生がすでにまとめてくれてました。

http://qiita.com/linyixian/items/e319c5f63f9e57459ac0

ありがとうございます。

Azure VM に RDP 接続が通らず、Ping も応答がない

 

2016/02/23 追記:
Japan Azure Technical Support Engineers’ Blog で情報が出ましたので、対処法はこちらを参照ください。
Azure 仮想マシンにおける不要な NIC を削除する方法

Twitter とかを見ていると、Azure を使い慣れている人には有名な話のようですが、
知らない人もいると思うので、念のためブログに残しておきます。

現象としては RDP 接続不可だったり、仮想マシンの Ping 応答がない場合で、
定期的に仮想マシンのシャットダウンと起動を繰り替えしている場合に発生します。

 

ネタ元
https://systemcenterpoint.wordpress.com/2014/10/16/hidden-network-adapters-in-azure-vm-and-unable-to-access-network-resources/comment-page-1/

 

管理ポータルからシャットダウンを行った場合、Azure 側ではリソースの開放
(すなわち、データセンター内のどこかのラックのどこかのサーバー上の仮想マシンを削除)
する仕組みになっています。

再度 VM の起動を行うと、別のラックの別のサーバー上でリソース確保を行い、
Hyper-V 的に新しい仮想マシンを作ったことになり、この動作によってゲストの
OS 側では異なる NIC が刺さったとみなされます。

以下の画像 (ネタ元から抜粋) は現象が発生している端末の例ですが、デバイス
マネージャーで、[表示] – [非表示のデバイスの表示] にチェックをして、大量の
未使用 NIC (以前使っていた NIC) が見つかる場合、この現象に該当します。
101614_1157_hiddennetwo1

これら過去に使っていた NIC の情報は自動では削除されないので、ネタ元のサイトの
PowerShell スクリプトを使って、不要なものは削除しておくことをお勧めします。
Azure VM を常時稼働させている場合には全く問題ないですが、こまめに再起動を
している場合はタスク等で自動実行にしておくとよいかもしれません。

既に RDP 等で VM 内に入れなくなった場合には、残念ですが VHD を AzCopy 等で
ローカルにダウンロードして、Hyper-V 上で上記の処置を行い、Azure 上に戻すしかありません。
結構な手間ですが、こればかりは他に方法がありませんので、あきらめましょう。
VHD のダウンロードは費用が発生するので、あまりやりたくはありませんが…。

Windows 10 IoT Core をインストールする方法

Windows 10 IoT Core のブログ三本目です。

Windows 10 の PC がない場合は、前の記事の通り VHD ブートなりで環境を用意してください。
このポストでは Windows 10 の PC がある前提で手順をまとめています。

1. 事前準備

基本的には以下のページの通り進めます。
http://ms-iot.github.io/content/win10/SetupRPI.htm

まずは、Windows 10 IoT Core を入手するため、以下の URL から Microsoft Connect の
Insider Preview Program に登録を行います。

https://connect.microsoft.com/windowsembeddediot/SelfNomination.aspx?ProgramID=8558

初めて Connect に登録する場合は、ユーザー登録等が必要です。
Microsoft アカウント (hotmail / outlook 等々) でログインして、適宜進めてください。

image

事前に EULA (ライセンス条項) の同意が必要ですので、それぞれ確認して同意します。

image

登録が終わったら [ダウンロード] ページ より以下のファイルをダウンロードします。

他のボード用や、各種ツールもありますので、必要に応じてダウンロードしてください。

左下の [ダウンロード] ボタンは、Windows 用のダウンロード ツール向けなので、
[単一のファイルを~] の下にある [ダウンロード] から落とすとよいです。

image

ZIP をダウンロードしたら解凍しておきましょう。

2. microSD カードへ OS イメージを書き込み

解凍したファイルの中に、flash.ffu というファイルがありますが、これが OS のイメージ。

以下の手順で microSD に書きこみます。

[手順]

管理者権限でコマンドプロンプトを起動します。

1

diskpart と打って、そのあとで list disk と入力しディスク一覧を表示します。
その後、exit と入力して diskpart コマンドを抜けます。

2

続いて、以下のコマンドで microSD に Windows 10 IoT Core の OS イメージを書き込みます。
この際、ドライブの番号には上で確認したものを入力します。(PhysicalDriveN の N の箇所)

dism.exe /Apply-Image /ImageFile:<ダウンロード したflash.ffu のパス> /ApplyDrive:\.PhysicalDriveN /SkipPlatformCheck

3

これで、microSD に Windows 10 IoT Core のイメージが書き込まれました。

あとは Raspberry Pi 2 に microSD を入れて、HDMI と LAN ケーブル、電源を刺せば OK です。

こんな感じで画面が表示されたら起動完了です。

が、どうも電源ボタンやら設定ボタンっぽいのを押せない模様。
基本的には GUI 操作ではなくて、PowerShell とかブラウザからの様です。

Windows 10 の物理マシンなしで Windows 10 IoT Core をインストールする方法

Windows 10 IoT Core のブログ二本目です。

Twitter や Facebook で、「Windows  10 のマシンがない!」 という声を耳にしたので、
検証用の物理マシンを用意せずに Windows IoT Core を導入する方法についてまとめます。

1. 具体的な方法

  • VHD ブートを使う
  • Virtual Box を使う

現在確認されている方法としては、以上二点が有効です。

今回は前者の VHD ブートでご紹介しますが、まずは前提知識として、VHD ブートの説明から。

通常、Windows OS はローカルの HDD 上に OS のファイル群がそのまま配置されています。

image

これを、仮想ハードディスクのイメージ (VHD ファイル / VHDX ファイル) を作り、
その中に Windows 10 を入れるという方法をとることで、既存の OS を残したまま
Windows 10 とのデュアルブート環境を作ることが出来ます。

image

こうすることで元々の環境を壊さずに、いわば Mac の BootCamp のように二つの OS を
起動時に切り替えることで使い分けることが出来るようになる訳です。

2. 事前準備

まず、最低限以下を用意しましょう。

  • Windows 7 / 8 / 8.1 搭載の PC (+ 十分なディスクの空き : 20 GB くらい?)
  • Windows 10 Technical Preview の ISO ファイル ※ 1
  • 8 GB 以上の USB メモリ (もしくは DVD のメディアと読み込み用のドライブ)
  • Windows USB/DVD Download Tool ※ 2

※ 1 日本語で、x86 / x64 どちらでも問題ないと思います。古いビルドだとダメという話もあるので
一応最新のビルドをダウンロードすることをお勧めします。 (2015/05/02 現在は 10074 が最新)

※ 2 そもそも ISO って何ぞやという人もいるかもしれないので、念のため説明しておくと
ISO ファイルは DVD のイメージを 1 ファイルに固めたものだと思ってください。
Windows 8 以降だと、ダブルクリックするだけで、中身のファイルが見れると思います。

3. インストール

まず始めは、Windows 10 の USB インストーラーを作成します。
ISO ファイルを DVD に焼いて、ドライブから直接起動する方法でも構いません。

あと、私はいつでも OS をインストール出来るように、仮想 DVD ドライブとして使える
外付け HDD ケースに一通りの OS の ISO をすべて入れて持ち歩いています。(廃盤ですが。)

[手順]

1. ダウンロードした Windows USB/DVD Download Tool をインストールします。

1

2. デスクトップにアイコンが追加されていますので、こちらから起動します。

2

3. [Browse] からダウンロード済みの ISO ファイルを指定します。

3

4. 今回は USB メモリでインストール メディアを作成するので、[USB device] を選択。

4

5. USB メモリを認識しますので、そちらを選択し、[Begin Copying] をクリック。

5

6. USB メモリの中身が削除される旨の警告が二回でます。適宜続行。

6
7

7. 数分待つと USB にファイル コピーが終わり、インストール メディアが出来ます。

8

ここまでが第一段階。

続けて、OS を再起動して、USB メモリからブートします。

マシンのメーカーにもよりますが、USB を刺したまま電源を入れるだけで済む場合と、BIOS で
ブート順序を入れ替えるために F2 / F8 / F10 / Del 辺りを押しながら起動しする場合がありますが
その辺りは適宜メーカー様のマニュアルなど見てくださいね。

PC の電源が入ったのち、[Press any Key from CD or DVD…] と表示されたら、任意のキーを
押して USB のインストール メディアから起動します。

9

インストーラーが起動したら、[Shift] + [F10] を同時に押してコマンドプロンプトを立ち上げます。

10

起動したら、以下の通りコマンドを実行して、Windows 10 をインストールするための
仮想ディスク (VHD ファイル) を作成しましょう。以下では 20000 MB の固定サイズで
VHD ファイルを作っています。

(ディスク ボリュームの一覧表示)
   list vol

(Windows 10 をインストールする VHD の作成)
   create vdisk file=<VHD を作成するパス> maximum=20000 type=fixed

(作成したディスクのアタッチ)
   select vdisk file=<上記で作成した VHD のパス>
   attach vdisk

以上で Windows 10 をインストールする VHD ファイルの作成は完了です。
コマンドプロンプトは [×] ボタンで閉じちゃいましょう。

余談ですが、type=expandable にすると VHD ファイルが可変で作成されます。
ただ、可変で作成すると OS 起動時に最大サイズと同容量の空きがない場合に
OS が起動しないなど予期せぬトラブルの元なので、固定で作りましょう。

11

インストーラー画面に戻ります。

12

[今すぐインストール] を選択。

13

ライセンス条項を読んで、[同意します] をチェックして [次へ] をクリック。

14

先ほどコマンドで作成した仮想ディスクが出てきますので、そちらを選択して [次へ] をクリック。
(インストール出来ませんと表示されていても、[次へ] がクリックできる場合は問題ありません。)

15

あとはインストールが終わるまで 10 分くらい待ちましょう。

16

しばらくすると、再起動されて、こんな感じに。
元々の OS (以下では Windows 8.1) と、Windows Technical Preview の二つになりました。

17

何度か再起動を繰り返すかもしれませんが、Windows 10 のインストールが終わると
以下のような初期設定画面になりますので、あとは指示に従ってユーザー作成とかをします。

18

これで Windows 10 がインストール完了です。

19

元々ハードディスクは 1 台しか搭載されていないマシンですが、二つに見えています。
C ドライブが VHD ファイルで、その VHD ファイルは D ドライブ直下にあったりします。
慣れないと混乱するかもですが、そういうもんだと思ってください。

image

あとは、通常の手順通り Windows 10 IoT Core のイメージを microSD に焼けば完了です。
そちらは次のポストで。

4. インストール後のお話

PC の再起動やら電源を入れた直後に、毎回 OS をどちらから起動するか確認されます。
このとき、放っておくと既定 (おそらく Windows 10) で起動してしまいます。
この選択時間を延ばしたり、規定を変更したい場合には、以下の様にすれば OK です。

[手順]

[Win] + [R] で [ファイル名を指定して実行] を開き、”msconfig” と入力します。

[ブート] タブを開いて、規定を変更したり、タイムアウト値を変更し、[OK] をクリックします。

20

あとは再起動すれば設定完了。Windows 10 が不要になったら、同じ画面で [削除] して、
残った VHD ファイルを削除すれば元通りなので、余計なゴミも残らず楽ちんです。

と言う訳で、物理環境が必要な検証作業は VHD ブートに限りますね!

最初から VHD ブートでインストールしておけば、他の PC に移動するのも楽ですし、
Diskpart と bcdedit 辺りを使いこなせるようになると大分幸せになれると思います。

[参考]

DiskPart のコマンド ライン オプション
https://technet.microsoft.com/ja-jp/library/cc766465%28v=ws.10%29.aspx

BCDEdit のコマンド ライン オプション
https://technet.microsoft.com/ja-jp/library/cc709667%28v=ws.10%29.aspx

と、ここまで書いて Gigazine にも同じ記事がありました。
あわせてご確認ください。

Windows 10テクニカルプレビューをVHDで今の環境に影響を与えずにデュアルブートで使う方法
http://gigazine.net/news/20141008-windows10-tp-vhd-install/

Windows 10 IoT Core 発表と、Windows for IoT の今後

先日の //build/ 2015 にて Windows 10 IoT Core が発表されましたね。

これまで出ていた Galileo 向けの Windows for IoT (と、私が呼んでいたもの) とあわせて、
IoT 向けの Windows 10 について現在の情報をまとめておきたいと思います。

1. IoT 向け Windows 10 のエディション

Windows 10 IoT Editions として、以下 3 エディションが用意される模様です。

  • Windows 10 IoT Core <= これが RasPi2 用
  • Windows 10 IoT for mobile devices
  • Windows 10 IoT for industry devices

IoT Core は公式のスライドにも書いてある通り、No shell で x86 / x64 / ARM で動作します。
(要は Explorer や従来のデスクトップ系のエクスペリエンスなしという事ですかね。)

スライド30

Windows 10 では Surface Hub のような巨大なタッチ液晶から、Raspberry Pi 2 のような小型の
ガジェットに至るまで、すべて共通のカーネル、共通のプラットフォームとストアに統合されます。

IoT デバイス、スマートフォン、タブレット、PC、Xbox One、HoloLens、Surface Hub 等々、
ありとあらゆるデバイス上で Windows 10 は動作します。結果として Universal Windows App の
重要性が今後一層高まることになるのですが、UWA については詳しい方のブログをご覧ください。

スライド4

2. 対応デバイス

現在までに対応が発表されたデバイスは、以下の通りです。

  • Rasberry Pi 2
  • Minnow Board Max
  • Galileo ※後述

そして、こっそり Arduino も名を連ねていますが、こちらは直接 Windows が乗るのではなく
Bluetooth や Arduino の Firmata などを使用してリモート操作が出来るという事の様。

  • Windows Remote Arduino
  • Windows Virtual Shield for Arduino

Windows Phone 等を Arduino の仮想シールドとして、操作用の UI は汎用の Windows 端末を使い、
ハードウェアは Arduino で楽々作れると言う訳ですね。

詳細は順次ブログにまとめて書きますのでお待ちを。

3. IoT が活躍する分野

「IoT (Microsoft 的には IoYT : Internet of Your Things) って、そもそも何に役立つんだ?」
という話は既に散々出たかと思いますが、セッション内ではこんなスライドが紹介されています。

ヘルスケアやホームセキュリティ、ネットに繋がる家電や、各種センシング系など、
既にあるものばかりですが、こうしてまとめると結構ありますね。

スライド6

個人的に、これを見て気になるのはやはり専用ハードウェアばかりという事。
まあ、昨今はハードウェア系のスタートアップ多いですからね。

とはいえ、ソフトもハードも専用設計で作っていてはコストがかかるものです。
前述の Arduino 向け Virtual Shiled はまだ未知数ですが、たとえばタッチ UI 系の
デバイスであれば Windows のタブレットでアプリを作って、ハードを Arduino で
作れるのであれば汎用品で安く作れそうな気がします。

Arudino なら個人 Maker でも気軽にいろいろ試せそうですし、プロトタイプを作るのも
だいぶ楽になりそうな嬉しい発表でした。(私が元々ハードウェア系の人間ではないので
Arudino に慣れているということもありますが。)

4. Windows for IoT の今後

“Windows Embedded Pre-Release Programs – Windows Developer Program for IoT” として
これまで提供されていた Galileo 用の Windows (私は Windows for IoT と呼んでいました)
ですが、公式の FAQs に衝撃の記載が!!!

Intel Galileo

Can I run Windows 10 IoT Core on the Intel Galileo Gen 1 or Gen 2 board?

We have no plans to bring Windows 10 to the Intel Galileo board at this time.

Will you continue to support the Windows Developer Program for IoT for Galileo?

We’ve been overwhelmed by the interest in our Windows 8.1 based program and appreciate all the incredible feedback the community has provided. While there will be no new feature development for the Galileo release we will continue to support this release for as long as significant community activity exists.

どうやら、Galileo 用の Windows 10 IoT Core は現時点では計画されていないそう。

そして、これまで提供されていた CUI Only な Windows Developper Program for IoT
について、“新機能の開発はない” ものの、今後も重要なコミュニティが存在する限り
出来る限りのサポートを続けるという事の様です。

少々残念ですが、世の中的には RasPi 2 が強いので自然な流れといったところ。
このブログで書いてきた既存の記事は、表記だけ修正して残そうと思います。

と言う訳で、ざっくりとメモがてらまとめでした。

スライドはbuild と WinHEC のイベントより、Channel 9 から拾っています。
動画と合わせて生のセッションを確認されたい方は以下をどうぞ。

Internet of Things Overview
http://channel9.msdn.com/Events/Build/2015/2-652

Windows for IoT で始める効率的なガジェット開発(基礎) – スライド公開しました。

なんと、Windows for IoT が Raspberry Pi 2 に対応したらしいですね!!!

既に二つほど注文して届くのを待つばかりではありますが、盛り上がっているようなので
ブログにせこせこ書いていた内容とかをまとめてスライド公開しました!

もともと研究室方面に向けて作っていたやつなのですが、まあいいか。
みんなで面白いガジェット作って IoT 盛り上げましょう!

Windows for IoT で始める効率的なガジェット開発(基礎)
http://www.slideshare.net/syuheiuda/windows-for-iot-44165936/

 

あ、不備とかあれば適宜コメント下さいませ。
その他、検証してほしい事項とかも書いていただければ、暇なときに調べます。