azure_iot_utilities.cのルートCA証明書
Azure SphereからAzure IoT Hubに接続するために、デバイスにルートCA証明書が必要です。
厳密には、Azure Sphereに限らず、Azure IoT Hubに接続するクライアントには、ルートCA証明書が必要。
この記事を書いたときはVisual Studioの接続済みサービス追加で自動生成されたazure_iot_utilities.cにあるルートCA証明書(Baltimore)をコピーしたのですが、、、
最近、証明書の有効期限が話題になっていてちょっと心配だったので、このルートCA証明書の有効期限を確認しました。
SSL証明書の内容を確認するには?
証明書の内容を表示する方法が分からず、ググってみたところ、、、
便利サイトがありました!
WebページにSSL証明書を貼り付けて、クリックするだけ!
なんと便利な、、、
例の証明書を確認
証明書を貼り付けて、ポチっと。
でました!
Baltimore CyberTrust Rootで、有効期限は2025/5。
Azure IoT Hub Sampleの調査メモ
Azure Sphere SDKに含まれている、Azure IoT Hub Sample for MT3620 RDB (Azure Sphere)プロジェクトのコードを調べます。
main()から、Azureに絡む関数のコールツリーはこんな感じ。
main() InitPeripheralsAndHandlers() AzureIoT_Initialize() AzureIoT_SetMessageReceivedCallback(&MessageReceived); AzureIoT_SetDeviceTwinUpdateCallback(&DeviceTwinUpdate); AzureIoT_SetDirectMethodCallback(&DirectMethodCall); AzureIoT_SetConnectionStatusCallback(&IoTHubConnectionStatusChanged); CreateTimerFdAndAddToEpoll(,, &azureIotEventData,); WaitForEventAndCallHandler() ClosePeripheralsAndHandlers() AzureIoT_DestroyClient(); AzureIoT_Deinitialize();
SetXxxCallback()で、コールバック関数を設定している。
あと、タイマーイベントでAzureIotDoWorkHandler()へのコールバックも有り。
static event_data_t azureIotEventData = {.eventHandler = &AzureIotDoWorkHandler};
static void AzureIotDoWorkHandler(event_data_t *eventData) { ... if (AzureIoT_SetupClient()) { AzureIoT_DoPeriodicTasks(); } }
ボタン押したらメッセージ送信している部分はこれ。
static void SendMessageToIotHub(void) { ... AzureIoT_SendMessage("Hello from Azure IoT sample!"); ... }
ざっと見た感じ、AzureIoT_xxxxという関数を呼んでいる。
AzureIoT_xxxxは、ウィザード?が生成したazure_iot_utilities.h/.cで定義されている。
使っている関数の、azure_iot_utilitiesの中を見るとこんな感じ。
AzureIoT_Initialize() IoTHub_Init() AzureIoT_SetupClient() IoTHubDeviceClient_LL_CreateFromConnectionString() IoTHubDeviceClient_LL_SetOption() IoTHubDeviceClient_LL_SetMessageCallback() IoTHubDeviceClient_LL_SetDeviceMethodCallback() IoTHubDeviceClient_LL_SetDeviceTwinCallback() IoTHubDeviceClient_LL_SetConnectionStatusCallback() IoTHubDeviceClient_LL_SetRetryPolicy() AzureIoT_DoPeriodicTasks() IoTHubDeviceClient_LL_DoWork() AzureIoT_SendMessage() IoTHubMessage_CreateFromString() IoTHubDeviceClient_LL_SendEventAsync() IoTHubMessage_Destroy() AzureIoT_DestroyClient() IoTHubDeviceClient_LL_Destroy() AzureIoT_Deinitialize() IoTHub_Deinit()
Azure SphereデバイスをTP4.2.1から18.11にアップデート
これの続きです。
デバイスのOSをTP4.2.1から18.11にアップデートします。
リリースノートの手順に沿って、実行します。
デバイスの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-2a9d87f9d7bd
がSystem 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 スキップ ==========
Azure Sphere SDK 18.11をインストール
これの続きです。
Azure Sphere SDK 18.11をインストールしてみます。
インストーラをダウンロード
ブラウザでhttp://aka.ms/AzureSphereSDKDownload
を開くと、インストーラがダウンロードされます。
Azure_Sphere_SDK_Preview_for_Visual_Studio.exe
と、ファイル名にバージョン番号が無いので、ちょっと分かりにくいです。
ダウンロードしてから、ファイルの詳細を見るとバージョンが18.11.3.20192
であることが確認できます。
インストール
わたしの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
になりました。
プロジェクトテンプレート
Blank Application
が増えてる!!
これはウレシイ。
いいねぇ♪
あと、ライブラリがちゃんとビルドできるように直ったっぽい。これは追って調査せねば。
Azure SphereがTP4.2.1から18.11にアップデート
Azure Sphere 18.11がリリースされました。
リリースノートから、どんな変更点があったのか?確認したいと思います。
18.11リリースノート
リリースノートはこちらです。
バージョン表記について、以前は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の利用可否を設定するようになりました。
Beta APIとは、どんなAPIなの?については、あらたに説明ページが追加されているので、そちらを見ると分かります。
Strict prototype checking
デフォルトで、厳密なプロトタイプチェックが有効になりました。-Wstrict-prototypes
ですかね。
「引数無しの関数は(void)
と書いてね」だそうです。
Wi-Fi setup using Bluetooth low-energy (BLE)
スマートフォンからBluetooth LE経由で、Azure SphereのWi-Fi設定するサンプルコードが用意されました。
Azure Sphereとは別に、Bluetooth LEの通信ができるデバイスが必要です。そりゃそうですね。
んー、nRF52 Development Kitがいるみたいだし、Azure Sphereに特別な機能が追加されたようには見受けられないので、スルーかな。
ちなみに、こちらに結線図があります。
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にアップデートしました。
7月に、Azure IoT Edgeをラズパイにインストールしましたが、、、そこから手順に変更が無いか、確認しました。
RasPi3B + Raspbian
いつものように、マイクロSDをSDFormatterでイレースしてから、Win32DiskImagerでRaspbianイメージをマイクロSDに書き込みます。
Raspbianイメージは現時点最新のLite、2018-10-09-raspbian-stretch-lite.img
にしました。
あと、忘れずに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をインストール
手順はこちら。
書かれているコマンドをコピペして実行すれば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からまるっと入れ替えしましたが、旧バージョンからのアップグレードも可能です。
手順はこちら。
Center CLR Try!開発 #2
昨日は「Center CLR Try!開発 #2」に参加しました。
Try!開発とは、もくもく会のように、みんなで集まって気楽に開発をやるイベントです。 イベントというよりも、もくもく開発、寄り合い、寺子屋といった表現のほうが正しいのかもしれません。
今回は水曜日に告知からの土曜日開催なので、参加者3名と寂しい感じでした。
やること・教えてほしいこと
最初に「やること・教えてほしいこと」を自己申告でホワイトボードに書いて情報共有。
わたしは11/17に京都で開催される、AzureSphereセミナーのプレゼン資料の作成をやることにしました。(切実)
Matsuiさんは(あいかわらず)IL2Cの例外だそうです。お手伝いできそうなところはナイっす。
ayumaxさんは忘年会で使えるUnityアプリ開発。これまたお手伝いできそうなところはナイっす。(ちょっと面白そう、、、実際に使ってみたい。)
もくもく
それぞれバラバラな内容ってことで、教えてもらう・教えるみたいなのはほとんど無く、各自もくもく作るって感じになりました。
情報交換?で印象的だったのは、、、
わたしは、、、やる気が上がらず、途中でミスドへ買い出しにいったりしていました。場所が金山駅近くなので、買い物に便利です。買い食いが捗る。
やったこと・教えてほしいこと
終わりの1時間前に、「やったこと・教えてほしいこと」を自己申告で情報共有。
わたしは、しゃべっていたり、ミスドへ行ったりしていたので、、、全体の8割ぐらいできたかなぁという程度でした。
毎月開催します
このイベント、毎月第2土曜日に開催するみたいなので、興味ある方は気軽にご参加ください。
(当面は、cre8 BASE KANAYAMAにご協力いただき、こちらの会議室でやる予定です。)
最後に写真
雰囲気がわかる写真を撮っておらず、、、 Matsuiさんの本日の成果説明の様子をアップしておきます。