azsphereのネットワーク診断コマンド

ちょっとRDB使おうとしたところ、ネットワークに接続できない現象が発生したので、20.07で追加されたネットワーク診断機能を試してみました。

azsphere device wifi listtemp-disabledになっているので、ネットワークに接続できていません。

C:\AzureSphere>azsphere device wifi list
Network list:

ID                  : 0
SSID                : TP-Link_4C38_5G
Configuration state : temp-disabled
Connection state    : disconnected
Security state      : psk
Targeted scan       : True

ネットワーク診断機能show-statusを実行すると、Network time sync statusがincompleteと表示されています。時刻同期ができていないのが原因のようです。

C:\AzureSphere>azsphere device network show-status
Is device authentication ready: False
Network time sync status      : incomplete

show-diagnosticsの実行結果は、azsphere device wifi listと同じ情報が記録されるようです。でも、時刻同期ができていないのでTimestampががw

C:\AzureSphere>azsphere device network show-diagnostics

Timestamp           : 2000-01-01t00:02:09+0000
Network ID          : 0
SSID                : TP-Link_4C38_5G
Last Recorded Error : ConnectionFailed
Configuration State : temp-disabled
Connection State    : disconnected
No certificate errors logged.

何回かresetボタンを押してみましたが、状況は改善されず。
明日も直らないようなら、パケットキャプチャしてみようと思います。

Azure Sphereに関連した日本語資料・動画

日本語で公開されている、Azure Sphereの資料、動画リンクです。希少!
現時点、見ておいたほうがいいオススメに★印を付けました。

スライド

[2018/5/22] AD32 Secure なデバイスを開発するための最新テクノロジー Microsoft Azure Sphere 登場 @de:code 2018

(公開URL見つからずorz)

[2018/8/24] Azure Sphere コミュニティ勉強会

https://www.slideshare.net/TakashiMatsuoka2/azure-sphere

[2018/10/1] Azure Sphere MCU

https://www.slideshare.net/TakashiMatsuoka2/azure-sphere-mcu

[2018/11/17] Azure Sphere MCU (Update!)

https://www.slideshare.net/TakashiMatsuoka2/azure-sphere-mcu-123272582

★[2019/4/6] IoT祭り2019 Azure Sphereの今

www.slideshare.net

[2020/2/6] Azure Sphereのマルチコア

https://www.slideshare.net/TakashiMatsuoka2/azure-sphere-227128702

★[2020/2/6] Azure Sphere概要 @アブネット細倉さん

www.slideshare.net

[2020/2/6] Azure Sphereのセキュリティ @マイクロソフト太田さん

https://www.slideshare.net/HiroshiOta4/microsot-azure-iot-security-for-iot-algyan-tech-seminar-202026

[2020/4/25] Azure Sphereって実際どうなの?

https://www.slideshare.net/TakashiMatsuoka2/azure-sphere-232628405

[2020/7/2] Azure Sphere開発する前に知っておくこと

https://www.slideshare.net/TakashiMatsuoka2/azure-sphere-236734151

★[2020/7/3] Azure Sphereリアルタイム処理

www.slideshare.net

★[2020/7/27] これからAzure Sphereで開発する方へ

www.slideshare.net

★[2020/8/9] 試してGOTTEN READY! Azure Sphere @マイクロソフト太田さん

www.slideshare.net

動画

★[2020/6/17-7/17] X02 セキュリティは万全ですか? Azure Sphere によるセキュリティ紹介 @マイクロソフト 梅津さん

www.youtube.com

★[2020/7/27] Azure Sphere技術セミナー!最新のIoTセキュリティソリューションとは!

www.youtube.com

Azure Sphere 20.07がリリース

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

ここ最近は、アップデートに関してブログを書いていませんでしたが、、、気になる機能が追加されたので、久しぶりに書いておきたいと思います。(気になる機能は太字)

docs.microsoft.com

ネットワーク機能

静的IPアドレス、ネットワーク診断APIネットワーク診断コマンドが追加されました。

時々、なぜかネットワーク機能が有効にならないときがあって(Networking_IsNetworkingReady())、azsphere device wifi listコマンドぐらいしか確認する手段が無くて詰んでいたのですが、こういうときに有効と思われるネットワーク診断コマンドazsphere device networkが追加されました。

f:id:matsujirushix:20200802212526p:plain

show-statusshow-diagnosticsが気になります。

show-statusを実行してみると、デバイスが認証済みかどうかと、時刻同期の状態が表示されました。

C:\>azsphere device network show-status
Is device authentication ready: False
Network time sync status      : incomplete


C:\>

Wi-Fiに接続設定して、再度、show-statusを実行してみると、デバイス認証されていることが表示されました。

C:\>azsphere device network show-status
Is device authentication ready: True
Network time sync status      : complete


C:\>

どうやら、アプリケーションをデプロイしなくても、コマンドラインでNetworking_IsNetworkingReady()が確認できるようになった感じです。

それでは、show-diagnosticsを実行してみます。

C:\>azsphere device network show-diagnostics
No errors logged.


C:\>

あ、、、そういう感じなんですね、、、。
ちょっと寂しい。

コンテナー

Azure Sphereアプリをビルドするコンテナーイメージが提供されました。

Visual StudioVisual Studio Codeのテンプレート

Visual StudioVisual Studio Codeに、2つのプロジェクトテンプレートが入りました。

テナント証明書の更新

Azure Sphereテナント証明書は2年間有効です。初期ユーザーの証明書の有効期限が切れますので、更新する方法とタイミングがドキュメントに掲載されました。

本番運用では超重要事項。
あとで読む。

wolfSSL

Azure Sphereアプリケーションでwolf SSL client-side TLS APIを使用できるようになりました。

PCからデバイスへの通信の安定性

WindowsのFTDIドライバーに関連するPCとデバイス間の通信の安定性に関する問題に対して、バグ修正と機能強化が含まれました。

遭遇したこと無いです、、、

パブリックAPI

Azure Sphere Public APIに機能追加されました。
* バイスグループを削除
* 製品を削除する
* テナント証明書の取得
* テナント証明書チェーンを取得する
* 所有証明書の証明を取得する
* テナント証明書の一覧表示

うぉーーーー、これは胸アツ。
バイスグループやプロダクトを削除するAPIが追加になりました。

azsphereコマンドには未だ上記機能は無いので、デバイスグループやプロダクトを削除する唯一の方法ですね。

ADCとPWM

ADCとPWMのAPIが、βからLTSに昇格されました。

リアルタイムアプリケーション開発

RTApp開発がLTSに昇格されました。

これで安心してRTApp使えるようになりました。

ハードウェア定義

既定のハードウェア定義がAzure Sphere SDKに含まれるようになりました。

いままではazure-sphere-samplesに入っていて、自身のプロジェクトでハードウェア定義を使うときはコピーしなければいけませんでしたが、一般的なものがSDKに同封になりました。

うむ、、、切り出して公開していたの、不要になったな、、、。

公開しているプロジェクトも、ハードウェア定義を利用しているものは修正したほうが良さそう。

サンプルアプリケーション

Azure IoT サンプルアプリケーションが更新されました。

起動タイミング

起動が約750ミリ秒短縮されました。

GNU Armパス検出

Visual StudioVisual Studio CodeのAzure Sphere拡張が、GNU Armパスの場所を検出する手順が同じになりました。

製造サンプル

(割愛)

Azure IoT C SDKのサポート

Azure IoT C SDKのlts_02_2020をサポートされるようになりました。

ほぅ。
あとで調べる。

Linuxカーネル

Linuxカーネルのバージョンが5.4に更新されました。

Arduinoのシリアルプロッタ

Arduino IDEについているシリアルプロッタ、便利ですよね。
ときどき、マイコンのデータをパッとグラフにしたいときに使っています。

はて、いったいどういうフォーマットのシリアルデータを受け付けるんだろうか、、、と思い、調べました。

公式のドキュメントがなかなか見つからず、、、いろいろと探し回ったところ、ここにありました。

github.com

シリアルプロッタのプロトコル

一時点のデータ群をメッセージといいます。
メッセージには、複数のパートを含めることができ、パートラベルラベルと値のいずれかです。

メッセージの終端 '\n'
(メッセージ内の)パートのセパレータ ' ' or '\t' or ','
ラベルと値のセパレータ ':'

さらに、ラベルのみのメッセージで、ラベルを指定できます。(CSVヘッダースタイルと言うらしい)

コード例

CSV形式とラベル付加形式を試しました。
CSV形式だと、最初のメッセージ(ラベル)をシリアルプロッタが正しく受信できないとラベルが表示されません。
ラベル付加形式では、各値にラベルが付いているので、上記のような不安はありませんが、、、各値にラベルが付いているので通信量が多いです。
どっちも一長一短なので、好みで選べば良いと思います。(わたしはラベル付加形式かな。)

CSV形式

example1.ino:

#define SEPARATOR   ','

int count = 0;

void setup() {
  Serial.begin(115200);
  Serial.print("a");
  Serial.print(SEPARATOR);
  Serial.print("b");
  Serial.println();
}

void loop() {
  double a = sin(count * PI / 180);
  double b = cos(count * PI / 180);
  ++count;
  
  Serial.print(a);
  Serial.print(SEPARATOR);
  Serial.print(b);
  Serial.println();

  delay(10);
}

シリアル出力:

a,b
0.00,1.00
0.02,1.00
0.03,1.00
...

シリアルプロッタ表示:
f:id:matsujirushix:20200723135827p:plain

ラベル付加形式

example2.ino:

#define SEPARATOR   ','

int count = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  double a = sin(count * PI / 180);
  double b = cos(count * PI / 180);
  ++count;
  
  Serial.print("a:");
  Serial.print(a);
  Serial.print(SEPARATOR);
  Serial.print("b:");
  Serial.print(b);
  Serial.println();

  delay(10);
}

シリアル出力:

a:0.00,b:1.00
a:0.02,b:1.00
a:0.03,b:1.00
...

シリアルプロッタ表示:
f:id:matsujirushix:20200723140159p:plain

おまけ

データの歯抜けがあったときに、きちんとグラフが表示されるのか試したところ、、、あぁ、なるほどな表示でしたw(凡例の表示もなんともいえない動き)

example3.ino:

#define SEPARATOR   ','

int count = 0;

void setup() {
  Serial.begin(115200);
}

void loop() {
  double a = sin(count * PI / 180);
  double b = cos(count * PI / 180);
  ++count;
  
  Serial.print("a:");
  Serial.print(a);
  Serial.print(SEPARATOR);
  if (count % 15 == 0) {
    Serial.print("b:");
    Serial.print(b);
  }
  Serial.print(SEPARATOR);
  Serial.print("c:");
  Serial.print(b);
  Serial.println();

  delay(10);
}

シリアルプロッタ表示:
f:id:matsujirushix:20200723140820p:plain

参考

メッセージのパース(解析)コードはこちら

IoT Centralのデバイスコード自動生成

久しぶりにAzure IoT Centralをイジっていたら、、、テスト用のデバイスコードを自動生成する機能がありましたので試しました。

この機能、まぁまぁ以前からあったのかもしれません。気づいていませんでした。

Azure IoT Centralを立てる

料金プランの内容が補記されてた。これは分かりやすくてグー。
そうそう、そういえば今年の春ぐらいから(?)、場所日本が選べるようになったんですよね。

f:id:matsujirushix:20200712205224p:plain

バイステンプレートを追加する

次に、デバイステンプレートを追加します。
今回は、実デバイスを用意してつなげるわけではないので、、、あらかじめ用意されているAzure Sphere Sample Deviceを追加することに。
バイステンプレート > 新規 > Azure Sphere Sample Device を選択、作成します。

f:id:matsujirushix:20200712210008p:plain

テスト用のデバイスコードを生成する

で、ここからが本題。

作成したデバイステンプレートのテストデバイスの管理で、テストデバイスのコードを自動生成、ダウンロードします。

f:id:matsujirushix:20200712210406p:plain

現時点、選べる言語は4種類。

ここでは、CSharpを選んでみました。

f:id:matsujirushix:20200712210526p:plain

ダウンロードしたzipの中に、C#プロジェクトファイル(.csproj)があります。

f:id:matsujirushix:20200712210800p:plain

バイスコードを実行

Visual StudioC#プロジェクトファイルを開いて実行してみると、、、

黒画面が起動して、Sending telemetry ...と、送信されているっぽいメッセージが表示されて、

f:id:matsujirushix:20200712210953p:plain

Azure IoT Centralのグラフに値が表示されました!

f:id:matsujirushix:20200712211426p:plain

バイスコードの中身

ふむふむ。.NET Core 3.1。

f:id:matsujirushix:20200712211929p:plain

Azure IoT Centralへは、AMQPプロトコルで対称キー(!= クライアント証明書)を使ってAzure IoT DPSに接続している。

f:id:matsujirushix:20200712212205p:plain

なので、Azure IoT Centralで事前にデバイスを作成しておく必要は無い。

500[ms] * 20 = 10秒周期にTelemetryとDeviceTwinを送信していて、

f:id:matsujirushix:20200712212502p:plain

Telemetryの値は固定値。

f:id:matsujirushix:20200712212611p:plain

まとめ

  • バイステンプレートに合わせた(テスト用途の)デバイスコードが自動生成できる。
  • Azure IoT DPSに接続。事前にデバイスの追加は不要。
  • 認証は対称キー。(クライアント証明書ではない。)
  • データは固定値。周期は10秒。

バイスを作る前に、Azure IoT Centralのデバイステンプレートを作って見た目とか動きを確認するときに使うと良さそう。