Azure SphereをX.509でAzure IoT Centralに接続する

連休後半に入って、ようやく落ち着いて作業できる時間が取れたので、かねてから気になっていた「Azure SphereをX.509でAzure IoT Centralに接続」をやってみました。

f:id:matsujirushix:20190503200225p:plain

動機

Azure SphereとAzure IoT Centralに接続するのに、いままでは、Azure IoT Centralに手動でデバイスを追加してから、デバイスの接続情報を使ってdps_cstrコマンドでAzure IoT Hub接続文字列を取得して、これをAzure Sphereのコードに埋め込んでいました。

Azure Sphereから見れば、結局、Azure IoT Hubへ接続文字列で繋ぎにいくので分かりやすいわけですが、これを大規模にスケールするには問題があります。

  • Azure IoT Centralに手動で追加が手間
  • SASトークンなので若干不安
  • OTAで配布が困難

と、もやもやしていたところ、X.509でAzure IoT Centralに接続するサンプルコードが公式githubにアップされたので、試してみました。

github.com

やり方

Azure IoT Centralアプリケーションを作成

いつものように、Sign in to Azure IoT CentralにアクセスしてAzure IoT Centralアプリケーションを作ります。Trialでも大丈夫だと思いますが、なにか引っかかるとヤなのでPay-As-You-Goにしておきます。

f:id:matsujirushix:20190503184201p:plain

Azure SphereテナントとAzure IoT Centralを連携

次に、Azure SphereテナントとAzure IoT Centralを連携します。
細かく言うと、Azure Sphereテナントが証明書を発行したデバイスを、Azure IoT Centralが信頼するよう、Azure IoT Centralに設定します。

Azure SphereテナントのCA証明書を取得します。

azsphere tenant download-CA-certificate --output CAcertificate.cer

f:id:matsujirushix:20190503185250p:plain

Azure IoT Centralの、Administration - Device conneciton画面にある、Certificates(X.509)のPrimaryのところのフォルダアイコンをクリックして、さきほど取得したCA証明書を選択します。このとき、拡張子でフィルタされて表示されないので*.*に切り替える必要があります。

f:id:matsujirushix:20190503185740p:plain

すると、「Needs Verification」という警告が表示されているかと思います。これは、さきほど設定したCA証明書(のプライベートキー)を本当に所有しているのか?検証が必要だぞ!という警告です。

それでは、Verificationしましょう。
Primaryのところの歯車マークをクリックして、Verification Codeを生成します。

f:id:matsujirushix:20190503190224p:plain

Verification CodeをAzure Sphereテナントに渡して、検証証明書を取得します。

azsphere tenant download-validation-certificate --output ValidationCertification.cer --verificationcode <Verification Code>

f:id:matsujirushix:20190503190411p:plain

検証証明書をAzure IoT Centralに渡します。
Verifyをクリックして、さきほど取得した検証証明書を選択します。すると、Verifiedに切り替わります。

f:id:matsujirushix:20190503190808p:plain

Azure Sphereアプリケーションに必要な情報を揃える

あとは、Visual Studioazure-sphere-samples/AzureIoT.sln at master · Azure/azure-sphere-samples · GitHub を開いて、環境固有の情報を書き入れて実行するだけですが、、、

現在のサンプルコードでは、これだけの情報を入れる必要があります。

  • Azure IoT Central Scope ID
  • Azure Sphere tenant ID
  • Azure DPS global endpoint URL
  • Azure IoT Hub URL <- 曲者

思うところがいろいろと。

  • Azure Sphere tenant IDは、Azure Sphereアプリケーションで自動的に取得できるのでは?
  • Azure DPS global endpoint URLって、固定だよね??固定じゃないの??
  • Azure IoT Hub URL、、、、デバイスをRegisterしてProvisioningしないと分からない。いつも一緒とは限らないのでは?となるとOTAできない??

特に最後のは、AzureIoTライブラリとPluton Subsystemを連携できるようにしないといけないんでしょうけど、、、GAまでには対処してほしぃ。

気を取り直して、それぞれの情報を取得します。

Azure IoT Central Scope IDは、Azure IoT Centralの、Administration - Device conneciton画面にあります。

f:id:matsujirushix:20190503193305p:plain

Azure sphere tenant IDは、azsphereコマンドで取得します。

azsphere tenant show-selected

f:id:matsujirushix:20190503193430p:plain

Azure DPS global endpoint URLはglobal.azure-devices-provisioning.netです。

Azure IoT Hub URLは、、、
Azure IoT Centralに、ダミーのDevice Template、Real Deviceを登録して、ShowIoTCentralConfigコマンド(もしくはdps_cstrコマンド)で取得します。

f:id:matsujirushix:20190503194259p:plain

Azure Sphereアプリケーションを修正

サンプルコードのAzureIoT.slnを開いて、AzureIoTのapp_manifest.jsonに、先に調べた情報を入力します。

f:id:matsujirushix:20190503194803p:plain

実行

実行すると、出力ウィンドウにAZURE_SPHERE_PROV_RESULT_PROV_DEVICE_ERRORというエラーメッセージが表示されますが、

f:id:matsujirushix:20190503195005p:plain

Azure IoT Centralの、Device Explorer - Unassociated devicesにデバイスが追加されていれば正常です。

ここで自動的に追加されたデバイスの名称はAzure SphereのDevice IDを小文字にしたものです。Device IDはazsphere device show-attachedで確認することができます。

あとは、公式ドキュメントを参考にして、Device Templateを作って、TelemetryやEventを追加(TelemertyにTemperatureとか、EventにButtonPressとか。 )して、デバイスをAssociateすればOKです。

最後に

  • バイスに証明書埋め込まれているっていいね。手間がかからない。
  • 技術要素を学習するのにAzure Sphere + Azure IoT Centralは良さげ。
  • IoT Hub URLを省略できるようにしてほしい。(中の人がんばって!)
  • シナリオによってはAzure Sphereのマルチテナント必要と感じた。

ALGYAN4周年イベントで登壇しました

4/6にマイクロソフト品川で開催された、ALGYAN4周年 IoT祭り2019『IoTとAIとセキュリティ』大講演会&豪華ノベルティ抽選会!に登壇しました。

algyan.connpass.com

ちょっと過去の思い出を

ALGYAN発足から、わずか4年。まだ4年だったのね。

一番最初のイベントで、いきなり東京と大阪の同時開催。東京以外も大事にしている感ありますw
イベント申込ページが初々しい。

このときは、PinKit(GR-PEACH)+NETMFの講習でした。

PinKit(NETMF) -> Event Hub -> Stream Analytics -> Power BI, Machine Leaning

Event Hubってのが、時代を感じるなー

f:id:matsujirushix:20190413102150j:plain

当時の写真を見ると、あれまここで出会っていたのねという方々が。このイベントをキッカケに、デバイス沼にハマってしまった人も多数いるようです。

ALGYAN4周年

で、ALGYAN4周年。

まぁ、すごかった。

人多すぎ

f:id:matsujirushix:20190413103848j:plain

溢れんばかりの。。。というか、セミナールーム溢れていました。

ある方は「セミナールーム入ったときに(熱気で)曇っていた。」とおっしゃっていました。

講演すご

日本マイクロソフトSeeed(「e」3つ)、インテル、エヌビディア、ソニーセミコンダクタソリューションズ、STMicroelectronics、などなど、、、

名だたる企業の中の人が、IoT, AI, セキュリティの最新情報を一気に聞くことができました。

f:id:matsujirushix:20190413105328j:plain

支部の活動紹介も楽しかったです。
もうちょっとちゃんと時間を取ってあげたかったですね。

ふんわりした雰囲気

ビジネスイベントと違って、良い意味でふんわりとした雰囲気でした。

登壇者の方々も楽しそう。

f:id:matsujirushix:20190413140504j:plain

で、登壇振り返り

当日の様子は、4/6のtweetを見ていただくということで、、、

わたし自身の登壇について、振り返りたいと思います。

ノベルティボード解説&CAD解説

www.slideshare.net

今回、Seeed(「e」3つ)のFusionPCBチームにスポンサーになっていただき、先着約130名にノベルティボードを配布しましたが、このノベルティボードの開発経緯と開発の流れ、部品の実装方法を解説しました。

概要と苦労した点、実装の3部でざっと説明しましたが、みなさん実装に興味があるようでした。カプトンテープ。

なお、ノベルティボードはこちらのリンクからデータをダウンロード、追加発注可能です。どうぞよろしく!

IoT祭り2019 Azure Sphereの今

www.slideshare.net

2018年10月からの、Azure Sphereのアップデートを解説するつもりでしたが、Azure Sphere知らない人も多いかな?と思い、Azure Sphereの本質(なぜ我々はAzure Sphereを作ったのか?)と、アップデートの2部構成にしました。

冒頭、Azure Sphereを知っている方に挙手いただいたのですが、、、8割くらい知っていると。
想定崩れて、うろたえて気持ち不安定になり、、、思っていたより言葉少なめ、硬めなトークになってしまいました。XBoxネタ、滑った感じだしorz
聞き苦しかったかと思います...。

思うところ

  • 良くも悪くも、tweetしたり声をかけてもらえたりして、嬉しかった。(反応無いと寂しい)
  • 次は、もうちょっと落ち着いて丁寧に話そう。
  • 人多くて想定外な部分もあったかと思うが、大きなトラブルなく運営すばらしい。

Azure Sphere 19.02がリリース

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

azure.microsoft.com

このブログ記事から気になる点のピックアップと、リリースノートを確認したいと思います。

ブログ記事

わたしが気になったところだけ抜粋。

Expect to see additional silicon announcements in the near future,

今はMT3620一択ですが、近いうちに別のチップが発表されることを示唆しています。

organizations will be able to use new peripheral classes (I2C, SPI) from the A7 core.

A7(Cortex-A7)から、I2CとSPIが使えるようになりました。
I2CはSeeed製Grove Shield併用で通信できたので気になりませんが、SPIは出来なかったので、SPI使いたい人には朗報ですね。

adding new platform support for critical networking services (DHCP and SNTP)

プライベートイーサネットDHCPとSNTP追加されました。
プライベートイーサネット、、、ゲートウェイ用途が多いのかなぁ。IIoTとか。

by leveraging our new reference solutions and hardware modules,

リファレンスソリューションとハードウェアモジュールが増えました。
リファレンスソリューションはこれ。AzureIoTとI2C, SPIは気になるので後で見る。
ハードウェアモジュールは、、、具体的に何だろう?ブログからは分かりませんでした。

リリースノート

docs.microsoft.com

新機能と変更

SPI

MT3620のSPIサポートが追加されました。(BetaAPI) (^^)/
APIこちら

I2C

MT3620のI2Cサポートが追加されました。(BetaAPI) (^^)/
APIこちら

DHCPサーバとSNTPサーバ

プライベートイーサネットDHCPサーバとSNTPサーバのサポートが追加されました。
(プライベートイーサネット試している人って、どれくらいいるんだろう??)

アプリケーションサイズとストレージ

フラッシュメモリの1MBを、アプリケーションを展開するイメージパッケージで使えるようになりました。
Flash、RAMに関して、詳しくはこちら
アプリケーションのメモリ使用状況を知ることができるようになりました。こちら。これはかなりうれしい。
また、azsphere device sideload show-quotaコマンドでmutable storageの使用量を表示できるようになりました。

アプリからread-only flash storageが読めるようになったっぽい。18.02でも出来たのかな?

Azure IoTサポート

Azure Sphere OSに入っているAzure IoT SDKを2018/10 LTSバージョンに更新しました。
Azure IoT CentralやAzure IoT Hubに繋ぐことができます。

ぱっと見、Azure IoT Centralは未だ辛そう... 要調査。

OSアップデートのリカバリ

Azure Sphere OSは、デバイス起動に失敗する可能性があるアップデートを検知して、ロールバックします。

CMake

CMakeのプレビューを公開しました。

BLE経由のWi-Fi設定

BLEからWi-Fiを設定するリファレンスソリューションを更新しました。

OSフィード

OSフィードをPreview MT3620から、

  • Retail Azure Sphere OS
  • Retail Evaluation Azure Sphere OS <- 追加

にしました。

くわしくはこちら

将来、Retail Evaluation Azure Sphere OSRetail Azure Sphere OSよりも2週間前にリリースされる予定。(いまは同時リリース)

旧リリースとの互換性

(省略。Previewなんだから、最新の19.02で再構築しましょう。)

既知の問題

詳細はリリースノートを見てください。

  • Visual Studio 2017とVisual Studio 2019 Previewの両方をインストールしているとき
  • azsphere device wifi show-statusdevice error 13.1
  • パスにASCII以外(日本語とか)が含まれているのは未サポート
  • C++コードでビルドエラーは発生しないが未サポート。(C言語のみサポート)

Seeed ReButtonでメール送信

この記事の続きです。

matsujirushi.hatenablog.jp

ReButtonを押すとAzure IoT Centralにメッセージが飛んで記録されるところまで出来たので、今回はAzure IoT Centralにメッセージが来たらEメールを送信する、、、バックエンドの設定をやってみたいと思います。

ボタンを押すとAzure IoT Centralに表示される

まず、前記事の設定が正しく動いているか確認します。

ボタンをシングルクリックして、Azure IoT Centralにメッセージが届くことを確認。

f:id:matsujirushix:20190128211401p:plain

よしよし、ちゃんと動くぞ。

ルールを追加

メッセージが届いたときにEメール送信するにはルールというものを追加します。

まず、ルールを選択して、テンプレートの編集をクリックしてください。

f:id:matsujirushix:20190128211545p:plain

次に、新しい規則をクリックしてください。

f:id:matsujirushix:20190128211625p:plain

テレメトリイベントが表示されるので、イベントをクリックしてください。

f:id:matsujirushix:20190128211920p:plain

名前を適当に入れて、条件+をクリック、測定メッセージを選んでから、保存をクリックしてください。

f:id:matsujirushix:20190128212227p:plain

ちょっと分かりにくいですが、、、
ここまでの操作で、

  • ルールを追加(イベントルール)
  • ルールに、条件を追加(メッセージが発生)

が出来上がりました。

ようするに、

「イベントの”メッセージ”が来たら、なにかやるぞ!」

が設定できた状態です。

次に、Eメール送信を設定します。

アクション+をクリックして、電子メールをクリックしてください。

f:id:matsujirushix:20190128212819p:plain

そして、終了(!?)に、Eメールアドレスを入力してから、保存をクリックしてください。
このEメールアドレスは、Azure IoT Centralにサインインしたメールアドレスを入力してください。

終了ってなんだ??と思うでしょうが、、、英語表示にするとToですw

f:id:matsujirushix:20190128213212p:plain

最後に、テンプレートの編集のDoneをクリックしてください。

f:id:matsujirushix:20190128213317p:plain

ボタンを押す!

ボタンをシングルクリックすると、、Eメールが届くようになりました!!

f:id:matsujirushix:20190128213616p:plain

Eメールの宛先を増やす

Eメールの宛先は、Azure IoT Centralに登録されていて、かつ、サインインしたアドレスしか指定することができません。

ユーザーは、管理 > ユーザー で追加することができます。

f:id:matsujirushix:20190128213914p:plain

Seeed ReButtonを動かしてみる

マイクロソフトが開催している、IoT in Actionというイベントシリーズがあるのですが、

iotinactionevents.com

私たちはパートナー企業やお客様とともにあり、IoTの導入によって企業が驚くほど革新的に変わっていく様子を何度も目撃してきました。IoT in Action イベントシリーズは、マイクロソフトのお客様とパートナーエコシステムを活用して、世界を変える新しいIoTソリューションを構築・展開するためのコラボレーションの機会を提供します。

一部地域で開催されたイベントで、アンケートに答えると、なななんと!マイクロソフトとSeeedが一緒に作った、ReButton(非売品)が配られていたんです!!

そして、昨日東京で開催されたイベントでも、ReButtonの配布がありました。

f:id:matsujirushix:20190123142727p:plain

何ができるのか?をざっくり(一例?)書くと、

  • ボタンのクリック(5種類)をAzure IoT Centralに通知
  • Azure IoT Centralでクリックしたタイミングを可視化
  • Azure IoT Centralから外部サービスに連携(メール通知とか)

で、単四電池2本で動くWi-Fi接続型のボタンです。

詳細は公式ドキュメントを見ていただくとして、ここでは、ボタンをクリックしたらAzure IoT Centralに表示されるまでのセットアップ方法を書いておきます。

ハードウェア

電池を入れる

裏蓋を外して、単四電池2本を入れてください。
蓋はシリコン製なのでグンニャリします。隙間にツメを突っ込んで引っ張り上げれば簡単に外れると思います。

f:id:matsujirushix:20190123144404p:plain

電池を入れるとこんな感じになります。

f:id:matsujirushix:20190123144522p:plain

電池を入れたら、裏蓋は元の状態に戻してください。

ボタン操作を練習する

ReButtonは、最初のクリックの反応が遅いです。これは、ボタンを押したときに回路の電源スイッチがONして動き出そうとしている時間です。
そのため、最初のプッシュはちょっと長めに押し続ける必要があります。「強く押す」ではありません!「長く押す」です

コツとしては、、、LEDが青色に点灯するまで押して、青色になったら離す。ちょっとコツが必要ですw

ボタンの内部プログラムでは、

  1. 押す→LEDが青色に
  2. 離す→LEDは青色のまま
  3. 1秒間放置→シングルクリックと判断
  4. クラウドへ通知しようとしてエラー(LEDが赤色で3回点滅)

とクリックを判定しています。

まだWi-FiやAzure IoT Centralが設定されていないため、エラー(LEDが赤色)になります。

また、3.の1秒間放置のときに押すと、ダブルクリック、トリプルクリックと変化して、LED表示が変わります。

クリック種類 LED色
シングルクリック
ダブルクリック
トリプルクリック

何回か試してみて、クリックのコツを掴みましょうw

10秒長押しすると、LEDが消灯しなくなります。(白色の点滅) そうなったときは、一度電池を抜いて電源を断ってください。

Azure IoT Central

Azure IoT Centralを用意する

Azure IoT Centralにアクセスして、マイクロソフトアカウントでサインインしてください。アカウントを持っていない場合は、作成を選んで、アカウントを作ってください。

f:id:matsujirushix:20190123150822p:plain

Azure IoT Centralのアプリケーションマネージャーが表示されたら、新しいアプリケーションをクリックしてください。

f:id:matsujirushix:20190123151124p:plain

アプリケーションの作成に必要な情報を入力します。
Azureサブスクリプションを持っているなら、重量課金制を。持っていないorまずは動くのを見たいだけなら、評価版を選択してください。
アプリケーションテンプレートはカスタムアプリケーションを。
アプリケーション名とURLは任意なので分かりやすいものを入れてください。

f:id:matsujirushix:20190123151509p:plain

このように表示されれば成功です。

f:id:matsujirushix:20190123151722p:plain

これを、Azure IoT Centralのアプリケーションと言います。

Azure IoT Centralアプリケーションにテンプレートを追加する

アプリケーションビルダー画面を表示してください。
右側にある下から3つ目のアイコンをクリックすると表示されます。

f:id:matsujirushix:20190123152401p:plain

バイステンプレートの作成をクリックしてください。

f:id:matsujirushix:20190123152448p:plain

カスタムをクリックしてください。

f:id:matsujirushix:20190123152920p:plain

バイステンプレートの名前に分かりやすい文言を入れて、作成をクリックしてください。

f:id:matsujirushix:20190123153103p:plain

これで、テンプレートが追加され、そこにシミュレートのデバイスが1つ追加された状態になりました。

バイスエクスプローラを見ると、テンプレートとデバイスを確認することができます。

f:id:matsujirushix:20190123153740p:plain

自動的に作成されたシミュレートのデバイスは、削除しても問題ありません。

バイスを追加する

テンプレートを作成すると、デフォルトでシミュレートのデバイスが1つ追加されますが、これをそのまま物理デバイスに紐づけることはできません。
物理デバイスを追加する必要があります。

バイスエクスプローラのデバイス一覧の上にあるプラスマークをクリックして、実際(英語だとReal)を選択してください。

f:id:matsujirushix:20190123155526p:plain

バイスを分かりやすい文言に変更して、作成をクリックしてください。

f:id:matsujirushix:20190123155706p:plain

このように表示されれば成功です。

f:id:matsujirushix:20190123160120p:plain

イベントにメッセージの項目を追加する

ボタンから送られてくるメッセージを、テンプレートに追加します。
テンプレートに追加ですが、、、実際の操作は、デバイスを選んでから、テンプレートの編集という流れになります。(ちょっと分かりにくい)

バイスエクスプローラでデバイス一覧を表示して、デバイスをクリックしてください。
そして、テンプレートの編集をクリックしてください。

f:id:matsujirushix:20190123160257p:plain

新しい測定をクリックして、イベントを選択してください。

f:id:matsujirushix:20190123160432p:plain

Display Nameにメッセージ、フィールド名にmessage、規定の重要度を情報にして、保存をクリック、最後にDoneをクリックしてください。
フィールド名は、必ずmessageと入れてください。

f:id:matsujirushix:20190123160701p:plain

イベントの欄に、メッセージが追加されていれば成功です。

f:id:matsujirushix:20190123160929p:plain

接続情報を取得

後でReButtonに設定する、Azure IoT Central(のデバイス)への接続情報を取得します。

バイスエクスプローラでデバイス一覧を表示して、デバイスをクリックしてください。
そして、右上の接続をクリックしてください。

f:id:matsujirushix:20190123161153p:plain

表示されたデバイス接続情報のうち、

を、後で使うのでメモ帳などにコピーしてください。

f:id:matsujirushix:20190123161258p:plain

ReButton

ReButtonをAccess Pointモードで起動して、パソコンからReButtonに接続、WebページでWi-FiアクセスポイントとAzure IoT Centralの接続情報を設定します。

ReButtonをAccess Pointモードで起動

ボタンを押し続けてください。10秒以上。 この間、LEDが青色→黄色→水色→白色と変化します。白色になったら、ボタンを離してください。

すると、ボタンがAccess Pointモードで起動して、LEDが白色の点滅になります。

ReButtonのアクセスポイントに接続

AZB-xxxxxxxxという名前のアクセスポイントがReButtonです。
パソコンからこのアクセスポイントに接続してください。

f:id:matsujirushix:20190123162130p:plain

接続操作すると、接続試行中で時間がかかりますが、接続試行中表示のまま、次の作業に進んでください。

Wi-FiとAzure IoT Centralの接続を設定する

任意のブラウザで、http://192.168.0.1/ にアクセスしてください。

f:id:matsujirushix:20190123162616p:plain

Wi-Fiをクリックして、SSIDパスフレーズを入力、Saveをクリックしてください。

f:id:matsujirushix:20190123163102p:plain

Homeをクリック、Azure IoT Centralをクリックしてから、

を入力して、Saveをクリックしてください。

f:id:matsujirushix:20190123163321p:plain

最後に、Shutdownをクリックしてください。

ボタン通知

ボタンをクリックすると、、、
Azure IoT Centralにメッセージが通知され、Webで確認することができます!

f:id:matsujirushix:20190123170510p:plain

Azure SphereのOSアップデートの挙動を調べた

以前から、OSアップデートするときにアプリケーションはどうなるのか気になっていた、、、

  • OSのダウンロード中にアプリは停止するのか?
  • アプリの停止は事前に通知されるのか?
  • アプリの停止時間は?

のですが、1/10にAzure Sphere OS 18.11.2のOSアップデートがOTA配信開始したので、挙動を調べることに。

挙動を調べるためのコード

アプリが再起動するため、Visual Studio(やgdb)でLog_Debugを見て確認することができません。 そこで、UARTに連続してデータを出力して、それをロジックアナライザでキャプチャすることにしました。
アプリは、起動時に"STX\n"を送信した後、0x00~0xffを連続して送信し続けます。SIGTERMを受けたら、"ETX\n"を送信して終了。

int main(int argc, char *argv[])
{
    Log_Debug("Application starting.\n");

    // Register a SIGTERM handler for termination requests
    struct sigaction action;
    memset(&action, 0, sizeof(struct sigaction));
    action.sa_handler = TerminationHandler;
    sigaction(SIGTERM, &action, NULL);

    UART_Config config;
    UART_InitConfig(&config);
    config.baudRate = 115200;
    config.flowControl = UART_FlowControl_None;
    int uartFd = UART_Open(MT3620_UART_ISU3, &config);
    assert(uartFd);

    write(uartFd, "STX\n", 4);

    char data = 0;
    while (!terminationRequired) {
        int ret = write(uartFd, &data, 1);
        if (ret == 1) data++;
    }

    wait_ms(100);  // easyio
    write(uartFd, "ETX\n", 4);
    wait_ms(100);  // easyio
    close(uartFd);

    Log_Debug("Application exiting.\n");
    return 0;
}

実行手順

色々と試しましたが、、、この流れがベストのようです。

  1. azsphere device recoverでOSを18.11にする。
  2. azsphere device prep-debug
  3. VSからアプリを実行して、停止。(Flashにアプリを入れる)
  4. ロジックアナライザを接続。
  5. resetボタンをクリック。
  6. ロジックアナライザがキャプチャできていることを確認。
  7. azsphere device wifi addして、azsphere device wifi listでconnectedになることを確認、すぐにresetボタンをクリック。←この操作は短時間に!
  8. 10分くらいキャプチャし続ける。

実行結果

  • アプリが起動してから(OSアップデートで)停止するまで、約377秒(約6分)
  • (OSアップデートで)アプリ停止時間、約83秒(約1分)
  • OSのダウンロードがアプリ稼働中か停止中かは、判断つかなかった。

f:id:matsujirushix:20190114102756p:plain

  • アプリ停止直前は、SIGTERMシグナルが来ていた。

f:id:matsujirushix:20190114103803p:plain

まとめ

実運用では、OSアップデートで1分くらい停止しても大丈夫なように、全体設計しておく必要がありそうです。

Azure Sphereの18.11がマイナーアップデート

Azure Sphere 18.11がマイナーアップデートされました。

azure.microsoft.com

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

18.11,18.11.1,18.11.2リリースノート

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

docs.microsoft.com

18.11リリースノートを変更して、18.11.1と18.11.2が追加されています。

18.11.1と18.11.2が同時リリースってちょっとおかしくない?という感じですが、

  • SDKが、18.11 -> 18.11.1
  • (デバイスの)OSが、18.11 -> 18.11.2

ということで、OSの18.11.1は存在しないようです。

SDK 18.11.1 リリース

Private Ethernetの機能が追加されました。

これだけなので、この機能を使わないなら、SDKをアップデート不要です。

なお、SDK 18.11から18.11.1へアップデートは自動ではありません。SDK18.11.1をダウンロード、インストール操作してください。

OS 18.11.2 リリース

Azure SphereバイスWi-Fiに接続できない問題が解決されました。

OS 18.11から18.11.2はOTAで自動的にアップデートされます。更新は10分以内です。
18.11.2になると、azsphere device image list-installed --fullを実行して表示されるNW KernelのImage IDが44ed692e-ce49-4425-9aa6-952b84ce7b32になります。

感想

  • 通常、SDKのアップデートは不要でしょう。
  • OSのアップデートは、、、不要であっても、インターネットに接続していると勝手に更新しますねこれ。Wi-Fi接続できないのは稀にあったので大変嬉しい。
  • マイナーアップデートが出たことで、OSのアップデートの挙動を調べることが出来そう。後日、調べようと思う。