Azure SphereデバイスをTP4.2.1から18.11にアップデート

これの続きです。

matsujirushi.hatenablog.jp

バイスのOSをTP4.2.1から18.11にアップデートします。

リリースノートの手順に沿って、実行します。

docs.microsoft.com

バイスのOSバージョンを確認

バイスのOSバージョンを確認します。

C:\>azsphere device show-ota-status
warn: Your device's Azure Sphere OS version (TP4.2.1) is deprecated. Recover your device using 'azsphere device recover' and try again. See aka.ms/AzureSphereUpgradeGuidance for further advice and support.
Your device is running Azure Sphere OS version TP4.2.1.
The Azure Sphere Security Service is targeting this device with Azure Sphere OS version 18.11.
warn: Your device is running an older Azure Sphere OS version (TP4.2.1). It has not yet started receiving the available update to version 18.11.
warn: Your device is not connected to Wi-Fi. Please check the Wi-Fi configuration on your device and try again.
Go to aka.ms/AzureSphereUpgradeGuidance for further advice and support.
Command completed successfully in 00:00:03.6789809.

「Azure Sphereセキュリティサービスの対象は18.11」で、
「あなたのデバイス、TP4.2.1で廃止されるよ」と脅されますw

バイスグループを変更

TP4.2.1で作ったアプリケーションがOTAでインストールされないようにするため?に、デバイスのデバイスグループをSystem Software Onlyに設定します。

C:\>azsphere device update-device-group -d cd037ae5-27ca-4a13-9e3b-2a9d87f9d7bd
warn: Your device's Azure Sphere OS version (TP4.2.1) is deprecated. Recover your device using 'azsphere device recover' and try again. See aka.ms/AzureSphereUpgradeGuidance for further advice and support.
Successfully moved device '961B0F3AF5C4EA9581512975F8E21A81DFED93BEF7A73854D802C8BDEFF7F5A8516639B653E6F082009F5C660C9B96BB1B16F49A56D7DE51A089AC01AE3376EC' to device group 'cd037ae5-27ca-4a13-9e3b-2a9d87f9d7bd' in your Azure Sphere tenant.
Command completed successfully in 00:00:02.9167273.

はい、あいかわらずバージョンで脅されますが、デバイスグループが変更できました。

ちなみに、-dで指定しているcd037ae5-27ca-4a13-9e3b-2a9d87f9d7bdSystem Software Onlyの意味です。

バイスのOSをアップデート

では、OSをアップデートしましょう。

azsphere device recoverを実行せよ、ということですが、TP4.2.1では-iパラメータが必須でした。
どうやら、18.11でオプションになったようです。

C:\>azsphere device recover
Starting device recovery. Please note that this may take up to 10 minutes.
Board found. Sending recovery bootloader.
Erasing flash.
Sending images.
Sending image 1 of 16.
Sending image 2 of 16.
...
Sending image 16 of 16.
Finished writing images; rebooting board.
Device ID: 961B0F3AF5C4EA9581512975F8E21A81DFED93BEF7A73854D802C8BDEFF7F5A8516639B653E6F082009F5C660C9B96BB1B16F49A56D7DE51A089AC01AE3376EC
Device recovered successfully.
Command completed successfully in 00:02:40.9711364.

イメージファイルはここに展開されていました。 C:\Program Files (x86)\Microsoft Azure Sphere SDK\RecoveryImages

バイスのOSバージョンを確認(2回目)

バイスのOSバージョンを確認します。

C:\>azsphere device show-ota-status
Your device is running Azure Sphere OS version 18.11.
The Azure Sphere Security Service is targeting this device with Azure Sphere OS version 18.11.
Your device has the expected version of the Azure Sphere OS: 18.11.
Command completed successfully in 00:00:03.4614457.

アップデート完了!!

TP4.2.1のプロジェクトが実行できない

TP4.2.1で作ったプロジェクトを18.11で実行してみようとしたところ、プロジェクトにターゲットAPIセットが設定されていないとエラーになりました。

1>------ ビルド開始: プロジェクト: SteppingMotor, 構成: Debug ARM ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\Application Type\Linux\1.0\AzureSphere.targets(38,5): error : 'Target API Set' project property is not set. Open the Project Properties and set this field using the drop-down box. Ensure that the Configuration selected on that page includes the active build configuration (e.g. Debug, Release, All Configurations).
1>プロジェクト "SteppingMotor.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

ターゲットAPIセットを1に設定したところ、問題なくコンパイル、実行できました。

Azure Sphere SDK 18.11をインストール

これの続きです。

matsujirushi.hatenablog.jp

Azure Sphere SDK 18.11をインストールしてみます。

インストーラをダウンロード

ブラウザでhttp://aka.ms/AzureSphereSDKDownloadを開くと、インストーラがダウンロードされます。

Azure_Sphere_SDK_Preview_for_Visual_Studio.exeと、ファイル名にバージョン番号が無いので、ちょっと分かりにくいです。

ダウンロードしてから、ファイルの詳細を見るとバージョンが18.11.3.20192であることが確認できます。

f:id:matsujirushix:20181116204054p:plain

インストール

わたしのPCには、すでにAzure Sphere SDK TP4.2.1が入っていますが、それをアンインストールせずに、ダウンロードしたEXEを実行してインストールしてみました。

画面の指示に従い、進めていくと、、、完了。

事前に古いバージョンのアンインストールは不要でした。

インストール結果

azsphereコマンド

azsphereコマンドは、18.11.3.20146になりました。

C:\>azsphere
Missing required positional argument '<Operation>'.

Azure Sphere Utility version 18.11.3.20146
Copyright (C) Microsoft Corporation. All rights reserved.
...

Visual Studio拡張

Visual Studio拡張は、18.11.3.20192になりました。

f:id:matsujirushix:20181116204536p:plain

プロジェクトテンプレート

Blank Applicationが増えてる!!
これはウレシイ。

f:id:matsujirushix:20181116204649p:plain

f:id:matsujirushix:20181116204730p:plain

いいねぇ♪

あと、ライブラリがちゃんとビルドできるように直ったっぽい。これは追って調査せねば。

f:id:matsujirushix:20181116204900p:plain

Azure SphereがTP4.2.1から18.11にアップデート

Azure Sphere 18.11がリリースされました。

azure.microsoft.com

リリースノートから、どんな変更点があったのか?確認したいと思います。

18.11リリースノート

リリースノートはこちらです。

docs.microsoft.com

バージョン表記について、以前は4.2.1という連番でしたが、今回から年と月になりました。Windows10風。
今回、2018年11月にリリースしたので、18.11だそうです。

出だしから、驚きの内容がが。

updating the OS to the 18.11 release will involve connecting the device to a PC and manually installing the OS instead of receiving the software over the air (OTA).

18.11へのOSアップデートは、OTAではなくPCから手動でインストールするようです。

お、おぅ、、、って感じw

OTAによるOSアップデート、楽しみにしていたのですが、、、
次回からはOTAでできるようになるようなので、お楽しみに。

Update to the 18.11 release

アップデート手順です。
ここはスルーで。

New features and changes in this release

新機能や変更点です。

Target API set and Beta APIs

Visual Studioで開発するプロジェクトのプロパティに、Target API Setが追加になり、Beta APIの利用可否を設定するようになりました。

f:id:matsujirushix:20181116184727p:plain

Beta APIとは、どんなAPIなの?については、あらたに説明ページが追加されているので、そちらを見ると分かります。

docs.microsoft.com

Strict prototype checking

デフォルトで、厳密なプロトタイプチェックが有効になりました。-Wstrict-prototypesですかね。
「引数無しの関数は(void)と書いてね」だそうです。

Wi-Fi setup using Bluetooth low-energy (BLE)

スマートフォンからBluetooth LE経由で、Azure SphereWi-Fi設定するサンプルコードが用意されました。
Azure Sphereとは別に、Bluetooth LEの通信ができるデバイスが必要です。そりゃそうですね。
んー、nRF52 Development Kitがいるみたいだし、Azure Sphereに特別な機能が追加されたようには見受けられないので、スルーかな。
ちなみに、こちらに結線図があります。

github.com

Real-time clock

コイン電池でバックアップされたRTCを使えるようになりました。Beta API

Mutable storage

64Kのストレージ(内蔵Flashだよね。たぶん。)が使えるようになりました。Beta API

Private Ethernet

MT3620にプライベートな10Mbpsイーサネットワークが使えるようになりました。
SPIに接続したMicrochipのイーサネットインターフェースをC POSIX APIで使えるようになったと思われる。詳細はcoming soon。

External MCU update

外部に接続したMCUファームウェアをアップデートするサンプルコードが用意されました。

Software update improvements

OTA絡みで、ルート証明書の期限切れに対応したみたい。

Ping command

USB経由の接続で、以前はpingに応答していましたが、応答しないように変更されました。

感想

  • やってみようと思うのは、Mutable storageぐらい。
  • TP4.2.1から18.11とTP(Technical Preview?)が消えたけど、Preview扱い。PreviewとGAの判断がつかないよねこれ。

次は、SDKを確認して、OSアップデートしてみようと思います。

Azure IoT EdgeをRaspberry Piにインストール

11月にAzure IoT Edgeが1.0.4にアップデートしました。

azure.microsoft.com

7月に、Azure IoT Edgeをラズパイにインストールしましたが、、、そこから手順に変更が無いか、確認しました。

RasPi3B + Raspbian

いつものように、マイクロSDをSDFormatterでイレースしてから、Win32DiskImagerでRaspbianイメージをマイクロSDに書き込みます。
Raspbianイメージは現時点最新のLite、2018-10-09-raspbian-stretch-lite.imgにしました。

f:id:matsujirushix:20181116174253p:plain

あと、忘れずにbootにsshファイルを作っておきます。 Raspbian起動後、パソコンのTeraTermからSSH接続で操作したいので。

RasPiにマイクロSDを差して起動、念のためパッケージを最新します。

$ sudo apt update
$ sudo apt upgrade

この時点のディスク使用量はこちら。

$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       15003420 1138416  13222604   8% /
devtmpfs          470116       0    470116   0% /dev
tmpfs             474724       0    474724   0% /dev/shm
tmpfs             474724   12236    462488   3% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             474724       0    474724   0% /sys/fs/cgroup
/dev/mmcblk0p1     44143   22502     21642  51% /boot
tmpfs              94944       0     94944   0% /run/user/1000

IoT Edgeをインストール

手順はこちら。

docs.microsoft.com

書かれているコマンドをコピペして実行すればOKです。

コンテナーランタイムをインストール

$ curl -L https://aka.ms/moby-engine-armhf-latest -o moby_engine.deb && sudo dpkg -i ./moby_engine.deb
$ curl -L https://aka.ms/moby-cli-armhf-latest -o moby_cli.deb && sudo dpkg -i ./moby_cli.deb
$ sudo apt-get install -f

IoT Edgeセキュリティデーモンをインストール

$ curl -L https://aka.ms/libiothsm-std-linux-armhf-latest -o libiothsm-std.deb && sudo dpkg -i ./libiothsm-std.deb
$ curl -L https://aka.ms/iotedged-linux-armhf-latest -o iotedge.deb && sudo dpkg -i ./iotedge.deb
$ sudo apt-get install -f

IoT Edgeセキュリティデーモンをセットアップ

/etc/iotedge/config.yamlに、IoT Hubへ接続するためのIoT Edgeデバイス接続文字列を設定して、再起動します。

$ sudo vi /etc/iotedge/config.yaml
$ sudo systemctl restart iotedge

IoT Edgeの稼働確認

IoT Edgeセキュリティデーモンのバージョンは、1.0.4。

$ iotedge version
iotedge 1.0.4 (2835ac47fbb944ba628a5cfe812ff394768842e0)

edgeAgent、動いています。

$ sudo docker ps
CONTAINER ID        IMAGE                                      COMMAND                   CREATED             STATUS              PORTS               NAMES
347334cf656e        mcr.microsoft.com/azureiotedge-agent:1.0   "/bin/sh -c 'echo \"$…"   2 minutes ago       Up 2 minutes                            edgeAgent

edgeAgentのバージョンは、1.0.4.18259757。

$ sudo docker logs edgeAgent
[2018-11-16 09:17:17 +00:00]: Starting Edge Agent
[11/16/2018 09:17:17.886 AM] Edge Agent Main()
2018-11-16 09:17:19.134 +00:00 [INF] - Starting module management agent.
2018-11-16 09:17:20.228 +00:00 [INF] - Version - 1.0.4.18259757 (2835ac47fbb944ba628a5cfe812ff394768842e0)

この時点のディスク使用量はこちら。

$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       15003420 1442820  12918200  11% /
devtmpfs          470116       0    470116   0% /dev
tmpfs             474724       0    474724   0% /dev/shm
tmpfs             474724   12324    462400   3% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             474724       0    474724   0% /sys/fs/cgroup
/dev/mmcblk0p1     44143   22502     21642  51% /boot
tmpfs              94944       0     94944   0% /run/user/1000

まとめ

  • GA直後と手順は一緒。チョー簡単。
  • ディスク使用料は+298MB。(モジュールはedgeAgentのみの場合)

なお、今回はOSからまるっと入れ替えしましたが、旧バージョンからのアップグレードも可能です。
手順はこちら。

docs.microsoft.com

Center CLR Try!開発 #2

昨日は「Center CLR Try!開発 #2」に参加しました。

Try!開発とは、もくもく会のように、みんなで集まって気楽に開発をやるイベントです。 イベントというよりも、もくもく開発、寄り合い、寺子屋といった表現のほうが正しいのかもしれません。

今回は水曜日に告知からの土曜日開催なので、参加者3名と寂しい感じでした。

やること・教えてほしいこと

最初に「やること・教えてほしいこと」を自己申告でホワイトボードに書いて情報共有。

わたしは11/17に京都で開催される、AzureSphereセミナーのプレゼン資料の作成をやることにしました。(切実)

Matsuiさんは(あいかわらず)IL2Cの例外だそうです。お手伝いできそうなところはナイっす。

ayumaxさんは忘年会で使えるUnityアプリ開発。これまたお手伝いできそうなところはナイっす。(ちょっと面白そう、、、実際に使ってみたい。)

もくもく

それぞれバラバラな内容ってことで、教えてもらう・教えるみたいなのはほとんど無く、各自もくもく作るって感じになりました。

情報交換?で印象的だったのは、、、

  • C#のcatchにwhere句があるが、内部実装はスゲー大変。を切々と語られた。
  • ILには、よく考えて作られたものと、あまり考えられていないものに大別できるっぽい?
  • UEのC++にはGCがある(!)

わたしは、、、やる気が上がらず、途中でミスドへ買い出しにいったりしていました。場所が金山駅近くなので、買い物に便利です。買い食いが捗る。

やったこと・教えてほしいこと

終わりの1時間前に、「やったこと・教えてほしいこと」を自己申告で情報共有。

わたしは、しゃべっていたり、ミスドへ行ったりしていたので、、、全体の8割ぐらいできたかなぁという程度でした。

毎月開催します

このイベント、毎月第2土曜日に開催するみたいなので、興味ある方は気軽にご参加ください。

(当面は、cre8 BASE KANAYAMAにご協力いただき、こちらの会議室でやる予定です。)

最後に写真

雰囲気がわかる写真を撮っておらず、、、 Matsuiさんの本日の成果説明の様子をアップしておきます。

f:id:matsujirushix:20181111105536p:plain

AzureのFlow, Logic Apps, Functions, Virtual Machineの価格比較(定期実行時)

SeeedのWio Node、ちょっとしたデータ取得には便利なのですが、、、
連携しているWio Serverには定期的にデータを取得、チェック(たとえば、定期的に温度を測って、異常に高いときはEメール通知するとか)することができません。
Wio Serverは外部からリクエストが来ると、Wio Nodeへ問い合わせして、現在の値を取得する、、、という仕組みなので。

定期実行できて、ちょっとした条件を加えて、外部へ通知する、、、のに適したAzureサービスはなんだろう??主に価格面でw
というわけで、調べました。

Flow

  • Free
    • 無料
    • 実行数 750回/月(1回/時間)
    • 最短周期 15分
  • Plan1
    • $5.00/月
    • 実行数 4500回/月(6回/時間)
    • 最短周期 3分
  • Plan2
    • $15.00/月
    • 実行数 15000回/月(20回/時間)
    • 最短周期 1分

Logic Apps

※ 西日本リージョンの場合

Functions

  • 実行時間 0.001792円/GB・秒(毎月400000GB・秒が無料提供)
  • 総実行回数 22.40円/100万実行回数あたり(毎月100万実行回数が無料提供)
  • 開発はC#, JavaScript, F#, Java

※ 西日本リージョンの場合
※ ストレージを使った場合は別料金が発生
※ Azure IoT Edgeを使えば無料

Linux Virtual Machine

  • B2MS(Core x2, RAM 8GB)
  • 14.34円/時間

シナリオ

  • 2分周期でセンサーのデータを収集。
  • センサーは5台。
  • データはtwitterなどへ転送するものとし、Azure上で保持しない。

Flow

無理。 (Plan2でも、実行回数の制限に引っかかる。)

Logic Apps

2アクション+1Standardコネクタを5台。(という考え方で良いのかな?) 2438円/月。

Functions

総実行回数は22320回。(センサー5台を逐次取得した場合)
実行時間、、、わからん。

Linux Vertual Machine

10669円/月。

参考リンク

Azure Sphereテナントの作成(準備編)

こちらの記事を、分かりやすく書き直そうとしています。

matsujirushi.hatenablog.jp

予備知識

Azure Sphereテナント

MCUバイス(Azure Sphere対応MCU)のセキュリティ更新やプログラムアップデートなど、いくつかの機能を実現するために、マイクロソフトからAzure Sphereセキュリティサービスが提供されています。
Azure Sphereでは、このAzure Sphereセキュリティサービスの使用が必須です。MCUバイスをインターネットに接続してAzure Sphereセキュリティサービスと紐づけしない限り、MCUバイスにプログラムを入れることさえできません!!
そして、このMCUバイスAzure Sphereセキュリティサービスの管理範囲を、Azure Sphereテナントと言います。
具体的には、MCUバイスを紐づけたり、プログラムアップデートなどを指示するときは、Azure Sphereテナントを指定して操作します。

f:id:matsujirushix:20181002194209p:plain

Azure Sphereテナントの認証

Azure Sphereテナントのリソースに対する認証は、Azure ADテナントを使用します。
そのため、Azure Sphereテナントは1つのAzure ADテナントと紐づけされなければいけません。
また、Azure Sphereテナントで使える認証のアカウントは、組織アカウント(Work or school account)に制限されています。(個人アカウント(Microsoft account)は使用することができません。)

f:id:matsujirushix:20181002194806p:plain

Azure ADテナント

Azureのポータルにログインできる状態ですと、必ずAzure ADテナントが存在、使用しています。
自身が保有、利用できるAzure ADテナントは、Azureポータルの画面上部にある手帳マークをクリックすると、一覧表示されます。

f:id:matsujirushix:20181002213548p:plain

組織アカウントと個人アカウント

組織アカウント個人アカウントは、アカウント名からは判断できません。
Azure ADのユーザー一覧にある”ソース”列や、ログインするときに表示されるアイコンで判断します。

ソース列の"Azure Active Directory"は組織アカウント、"Microsoftアカウント"は個人アカウント
f:id:matsujirushix:20181002211727p:plain

ネームタグアイコンは組織アカウント、人型アイコンは個人アカウント
f:id:matsujirushix:20181002212126p:plain

計画

以上から、

  • どのAzure ADテナントを使うのか?
  • どの組織アカウントで認証するのか?

を決めて、用意してから、

  • Azure Sphereテナントを作成

する流れになります。

プライベートで使用しているAzureとか、大企業のAzureとか、状況によってどうするのがベストなのか迷うところですが、、、

プライベート使用であれば、普段選択されているAzure ADテナント組織アカウントを追加するだけで良いと思います。

たとえば、普段、選択されているAzure ADテナントが”xxx.onmicrosoft.com”だったときは、

  • Azure ADテナントは、xxx.onmicrosoft.comを使用する
  • xxx.onmicrosoft.comに、組織アカウント yyy@xxx.onmicrosoft.comを追加する

という感じで。