azsphereのネットワーク診断コマンド
ちょっとRDB使おうとしたところ、ネットワークに接続できない現象が発生したので、20.07で追加されたネットワーク診断機能を試してみました。
azsphere device wifi list
がtemp-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ボタンを押してみましたが、状況は改善されず。
明日も直らないようなら、パケットキャプチャしてみようと思います。
Wio TerminalをAzure IoTに接続
本記事はBenjaminに許可をもらって、Connecting the Wio Terminal to Azure IoTを日本語訳したものです。
Benjamin-san, Thank you so much for a great article!
続きを読む
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のセキュリティ @マイクロソフト太田さん
[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 によるセキュリティ紹介 @マイクロソフト 梅津さん
★[2020/7/27] Azure Sphere技術セミナー!最新のIoTセキュリティソリューションとは!
Azure Sphere 20.07がリリース
Azure Sphereの20.07がリリースされました。
ここ最近は、アップデートに関してブログを書いていませんでしたが、、、気になる機能が追加されたので、久しぶりに書いておきたいと思います。(気になる機能は太字)
ネットワーク機能
時々、なぜかネットワーク機能が有効にならないときがあって(Networking_IsNetworkingReady())、azsphere device wifi listコマンドぐらいしか確認する手段が無くて詰んでいたのですが、こういうときに有効と思われるネットワーク診断コマンドazsphere device network
が追加されました。
show-status
とshow-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 StudioとVisual Studio Codeのテンプレート
Visual StudioとVisual 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-samplesに入っていて、自身のプロジェクトでハードウェア定義を使うときはコピーしなければいけませんでしたが、一般的なものがSDKに同封になりました。
うむ、、、切り出して公開していたの、不要になったな、、、。
公開しているプロジェクトも、ハードウェア定義を利用しているものは修正したほうが良さそう。
サンプルアプリケーション
Azure IoT サンプルアプリケーションが更新されました。
起動タイミング
起動が約750ミリ秒短縮されました。
GNU Armパス検出
Visual StudioとVisual Studio CodeのAzure Sphere拡張が、GNU Armパスの場所を検出する手順が同じになりました。
製造サンプル
(割愛)
Azure IoT C SDKのサポート
Azure IoT C SDKのlts_02_2020をサポートされるようになりました。
ほぅ。
あとで調べる。
Linuxカーネル
Arduinoのシリアルプロッタ
Arduino IDEについているシリアルプロッタ、便利ですよね。
ときどき、マイコンのデータをパッとグラフにしたいときに使っています。
はて、いったいどういうフォーマットのシリアルデータを受け付けるんだろうか、、、と思い、調べました。
公式のドキュメントがなかなか見つからず、、、いろいろと探し回ったところ、ここにありました。
シリアルプロッタのプロトコル
一時点のデータ群をメッセージといいます。
メッセージには、複数のパートを含めることができ、パートはラベル、値、ラベルと値のいずれかです。
メッセージの終端 | '\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 ...
シリアルプロッタ表示:
ラベル付加形式
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 ...
シリアルプロッタ表示:
おまけ
データの歯抜けがあったときに、きちんとグラフが表示されるのか試したところ、、、あぁ、なるほどな表示でした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); }
シリアルプロッタ表示:
参考
メッセージのパース(解析)コードはこちら。
IoT Centralのデバイスコード自動生成
久しぶりにAzure IoT Centralをイジっていたら、、、テスト用のデバイスコードを自動生成する機能がありましたので試しました。
この機能、まぁまぁ以前からあったのかもしれません。気づいていませんでした。
Azure IoT Centralを立てる
料金プランの内容が補記されてた。これは分かりやすくてグー。
そうそう、そういえば今年の春ぐらいから(?)、場所に日本が選べるようになったんですよね。
デバイステンプレートを追加する
次に、デバイステンプレートを追加します。
今回は、実デバイスを用意してつなげるわけではないので、、、あらかじめ用意されているAzure Sphere Sample Deviceを追加することに。
デバイステンプレート > 新規 > Azure Sphere Sample Device を選択、作成します。
テスト用のデバイスコードを生成する
で、ここからが本題。
作成したデバイステンプレートのテストデバイスの管理で、テストデバイスのコードを自動生成、ダウンロードします。
現時点、選べる言語は4種類。
ここでは、CSharpを選んでみました。
ダウンロードしたzipの中に、C#プロジェクトファイル(.csproj)があります。
デバイスコードを実行
Visual StudioでC#プロジェクトファイルを開いて実行してみると、、、
黒画面が起動して、Sending telemetry ...と、送信されているっぽいメッセージが表示されて、
Azure IoT Centralのグラフに値が表示されました!
デバイスコードの中身
ふむふむ。.NET Core 3.1。
Azure IoT Centralへは、AMQPプロトコルで対称キー(!= クライアント証明書)を使ってAzure IoT DPSに接続している。
なので、Azure IoT Centralで事前にデバイスを作成しておく必要は無い。
500[ms] * 20 = 10秒周期にTelemetryとDeviceTwinを送信していて、
Telemetryの値は固定値。
まとめ
- デバイステンプレートに合わせた(テスト用途の)デバイスコードが自動生成できる。
- Azure IoT DPSに接続。事前にデバイスの追加は不要。
- 認証は対称キー。(クライアント証明書ではない。)
- データは固定値。周期は10秒。
デバイスを作る前に、Azure IoT Centralのデバイステンプレートを作って見た目とか動きを確認するときに使うと良さそう。