☁️

チュートリアル: Raspberry Pi 3 B+ 参照イメージを使用した Device Update for Azure IoT Hub

2024/01/03に公開

はじめに

Azure Device Update for IoT Hubは、IoTデバイスのOTA更新をできるようにするサービスです。Device Update Serviceは更新するデバイスやファームウェアを管理し、Device Update Agentはデバイスにインストールされてクラウドサービスと通信します。このサービスを使えば大量のデバイスを一度に更新することができます。

公式ドキュメントには5つのシナリオのチュートリアルが掲載されています。ここでは「チュートリアル: Raspberry Pi 3 B+ 参照イメージを使用した Device Update for Azure IoT Hub」を実際にやってみて重要と思う部分を解説します。本記事を読むことでAzure Device Update for IoT Hubがどのようなものか理解が深まるでしょう。

https://learn.microsoft.com/ja-jp/azure/iot-hub-device-update/device-update-raspberry-pi

1. 必要なもの

  • Azureサブスクリプション
    Azure使うので必要です。
  • Raspberry Pi 3B+ と周辺機器
    使えるデバイスはRaspberry Pi 3B+[1]です。マイクロSDとACアダプターも必要です。
    コンソールから操作するのでディスプレイ+キーボードもしくは、パソコンから有線LANで接続する機材を用意してください。

2. Azureリソースを作成

クラウドにはAzure IoT HubAzure Device Update for IoT HubAzure Storage Containerの3つが必要です。

Azure IoT Hubはデバイスの管理と通信を担う重要なサービスです。Azure Device Update for IoT HubはAzure IoT Hubを利用した機能拡張サービスなので、Azure IoT Hub無しの単独で利用することはできません。
Azure Storage Containerはデバイスへ送るファームウェア(アップデートファイル)をAzure Device Update for IoT Hubに取り込むときに使用します。

2-1. Azure IoT Hubを作成

Azure IoT Hubを作成します。

  • レベル(Tier)はStandardにします。BasicはNG。Azure Device Update for IoT HubがStandardでしか使えない機能(デバイスツインなど)を利用するからです。[2]


2-2. Azure Device Update for IoT Hubを作成

Azure Device Update for IoT Hubを作成します。日本語表示は「IoTハブ用のデバイス更新」[3]です。

  • 場所に日本(東日本、西日本)は選択できませんでした。まだ日本にはこのリソースを立てられないようです。
  • 「デバイス更新の管理者の役割を割り当てます。」をチェックしておきます。チェックしていないと手動で役割の割り当てしなければいけなくなります。つまりチェックしていないと面倒くさいことになります。
  • 作成に30分程度かかります。気長に待ちましょう。


2-3. Azure Storage Containerを作成

Azure Storage Account[4]を作成します。

  • ファームウェアのアップロードでStorage Containerが必要ですが、アップロード操作をするときに作成できる(し、そのときに作成したほうがわかりやすい)ので、ここではAzure Storage Accountの作成だけをやっておきます。


2-4. Azureリソースの作成結果を確認

リソースグループに3つのリソースがあれば正常です。

  • IoT Hub
  • IoT ハブ用のデバイス更新
  • ストレージ アカウント

AzureポータルからAzure Device Update for IoT Hubを作成すると、リソースに対して自動的にロールが割り当てられます。具体的には、Azure IoT HubにIoT Hubデータ共同作成者、Azure Device Update for IoT Hubにデバイス更新の管理者です。Azure CLIで作成するとこららのロールは割り当てられないので、あとから設定する必要があります。


3. デバイスを登録

Azure Device Update for IoT HubでOTA更新するデバイスをAzure IoT Hubに登録します。
OTA更新するデバイスだからといって、特別な設定は必要ありません。Azure IoT Hubにデバイスを追加すればOKです。


4. Raspberry Piをセットアップ

マイクロSDにRaspberry PiのOSイメージを書き込んで、Device Update AgentにAzure IoT Hubへ接続するようセットアップします。

4-1. OSイメージを書き込む

Azure Device Update for IoT Hubのチュートリアル用にRaspberry PiのOSイメージが用意されています。

チュートリアル用のRaspberry Pi OSイメージの作成手順は公開されています。
https://zenn.dev/matsujirushi/articles/f0680f0103b5a3

GitHubのリリースページにあるTutorial_Raspberry3.zipをダウンロードします。

https://github.com/Azure/iot-hub-device-update/releases

このzipファイル内にあるadu-base-image-raspberrypi3-1.0.2.wic.gzがOSイメージです。これをマイクロSDに書き込みます。イメージファイルなのでそれ用のツールを使って書き込まないといけません。わたしはRaspberry Pi Imagerを使いました。



書き込んだマイクロSDをRaspberry Piに差して起動すると、Yocto Project(Poky)が起動します。起動後はネットワークからSSHでターミナルにrootユーザー(パスワードなし)で接続できます。

4-2. Deivce Update Agentを設定

Raspberry Piの /adu/du-config.json/adu/du-diagnostics-config.json を設定します。

/adu/du-config.jsonにはデバイスの製造会社や製品名とともにデバイスの接続文字列を設定します。デバイスの接続文字列の箇所はAzure IoT Hubに登録したデバイスの接続文字列を書きます。

/adu/du-config.json
{
   "schemaVersion": "1.0",
   "aduShellTrustedUsers": [
      "adu",
      "do"
   ],
   "manufacturer": "contoso",
   "model": "virtual-vacuum-v2",
   "agents": [
      {
      "name": "main",
      "runas": "adu",
      "connectionSource": {
         "connectionType": "string",
         "connectionData": "デバイスの接続文字列" 
      },
      "manufacturer": "contoso",
      "model": "virtual-vacuum-v2"
      }
   ]
}

/adu/du-diagnostics-config.jsonはロギングの設定です。下記をコピペします。

/adu/du-diagnostics-config.json
{
   "logComponents":[
      {
         "componentName":"adu",
         "logPath":"/adu/logs/"
      },
      {
         "componentName":"do",
         "logPath":"/var/log/deliveryoptimization-agent/"
      }
   ],
   "maxKilobytesToUploadPerLogPath":50
}

5. Azure IoT HubとDevice Update Agentの接続確認

Device Update AgentがAzure IoT Hubと接続、通信できると、Azure IoT Hubのデバイスのデバイスツインに、Device Update Agentの情報が書き込まれます。具体的には、properties.reported.deviceInformation.manufacturercontosoproperties.reported.deviceInformation.modelvirtual-vacuum-v2と書かれていれば正常です。

6. インポート

Raspberry Piのファームウェアアップデートに必要なファイルをAzure Device Update for IoT Hubにインポートします。手元のアップデートファイルを直接インポートするのではなく、アップデートファイルをAzure Storage Containerへアップロードし、Azure Device Update for IoT Hubに取り込みます。

6-1. インポートを開始

Azure IoT Hubの更新プログラム画面で新しい更新プログラムのインポートを実行します。

6-2. Azure Storage Containerを選択

Azure Storage Acccountを選んでAzure Storage Containerを作成し、選択します。




6-3. アップデートファイルをAzure Storage Containerへアップロード

アップデートファイルをAzure Storage Containerへアップロードします。アップロードするファイルは「4-1. OSイメージを書き込む」のTutorial_Raspberry3.zipに含まれています。



6-4. アップデートファイルをAzure Device Update for IoT Hubへインポート

Azure Storage ContainerにあるアップデートファイルをAzure Device Update for IoT Hubにインポートします。


6-5. インポートが完了するまで待つ

「更新プログラムのインポート」を実行すると、バックグラウンドでインポート作業を開始します。実際に完了したかどうかはインポート履歴の表示で確認できます。状態が成功になれば完了です(3分程度)。




6-6. Azure Storage Containerを削除

Azure Device Update for IoT Hubにインポートが完了すれば、Azure Storage Containerは削除しても大丈夫です。

7. デプロイ

アップデートファイルをRaspberry Piへデプロイします。



デプロイが完了したかどうかは現在の更新プログラムで確認できます。成功が1になれば完了です(3分程度)。インストール済みの更新プログラムが1.0.2.2になります。



まとめ

  • AzureリソースはAzure IoT Hub、Azure Device Update for IoT Hub、Azure Storage Containerの3つ。
  • Azure Storage Containerはインポートで一時的に使用。
  • Azure IoT HubはStandard。
  • Azure Device Update for IoT Hubの操作はAzure IoT Hubの更新プログラム画面。
  • Device Update Agentの設定はdu-config.jsonとdu-diagnostics-config.jsonの2つ。

参考

脚注
  1. えっ?Raspberry Pi 4Bは使えないの??🤔 ↩︎

  2. Freeは試していません。動きそうな気もしますがどうなんでしょうね。 ↩︎

  3. この名称が頭に浮かばなくて、Azureポータルでリソースを探すのに苦労しました。😅 ↩︎

  4. 正式名称はAzure Storage? Azure Storage Account? よくわからん。 ↩︎

Discussion