Table of contents
Overview
Here we will explain the steps to build the iPRO Camera SDK app using the Azure IoT Edge container and check its operation. Also, in this tutorial, the SDK installation directory is described as ${SDK_DIR}
.
This tutorial only supports SDK ver.2.00 or later. Please note that it cannot be used with SDK ver.2.00 or lower.
Operation confirmation procedure
Create a new IoT Edge Solution on Visual Studio Code
The following describes the case where the sample app to be referenced is skeleton_sample_app for the C version, additional_info_sample_app for the Python version, and test_app for the Edge Solution to be created. Please note that the Edge Solution name must be in all lowercase letters.
Description of C version/Python version application
The operation confirmation method for both the C version and Python version of the application is almost the same. I will explain using the C version as an example, and the different parts will be explained as appropriate. Also, the application path is as follows, so please read it as appropriate.
C version app path${SDK_DIR}
/src/adamapp
Python version app path${SDK_DIR}
/src/adamapp-py
Launch Visual Studio Code directly under [SDK folder].
cd ${SDK_DIR} code .
Copy the ”${SDK_DIR}
/src/adamapp/skeleton_sample_app” folder into the same folder.
Rename the copied folder to test_app.
Rename the "skeleton_sample_app" folder in [copied folder]/container/modules to test_app.
Right-click the folder (test_app) copied from Visual Studio Code's EXPLORER and select "Find in Folder..." to display the SEARCH window.
Search for "skeleton_sample_app" and replace everything with "test_app". The targets are as follows.
${SDK_DIR}
\src\adamapp\test_app\container\deployment.template.json${SDK_DIR}
\src\adamapp\test_app\container\modules\test_app\module.json
作成したイメージをプッシュするコンテナレジストリの情報を入力します。
Azure Portal にログインし、対象とするコンテナレジストリを選択します。下記画面は例です。
左側のメニューから 「設定」 - 「アクセスキー」を表示します。
表示された情報をもとに、以下を入力します。
${SDK_DIR}
\src\adamapp\test_app\container\deployment.template.json
内の “registryCredentials” を以下のように入力します。 「コンテナレジストリ名」はAzure Portalの「レジストリ名」を小文字にしたもの (「ログインサーバー」の .azurecr.ioよりも前の文字列と同じ) となります。"registryCredentials": { "[コンテナレジストリ名]": { "username": "$CONTAINER_REGISTRY_USERNAME_[コンテナレジストリ名]", "password": "$CONTAINER_REGISTRY_PASSWORD_[コンテナレジストリ名]", "address": "[ログインサーバー]" } }
例えばコンテナレジストリ名がiprocv5xcontainerregistry、コンテナレジストリログインサーバーがiprocv5xcontainerregistry.azurecr.io の場合は以下のようになる。
${SDK_DIR}
\src\adamapp\test_app\container\modules\test_app\module.json
内の “repository” を以下のように入力します。"repository": "[ログインサーバー]/test_app"
コンテナレジストリログインサーバーがiprocv5xcontainerregistry.azurecr.io の場合は以下のようになる。
${SDK_DIR}
\src\adamapp\test_app\container
ディレクトリ内に.envファイルを作成し、コンテナレジストリのユーザー名、パスワードを記載して保存します。CONTAINER_REGISTRY_USERNAME_[コンテナレジストリ名]=[ユーザー名] CONTAINER_REGISTRY_PASSWORD_[コンテナレジストリ名]=[password]
例を以下に示します。
アプリのコーディング
このままVisual Studio Code上で任意にコーディングを行います。
skeleton_sample_appなどをコピーした場合、ソースファイル名がコピー前 (skeleton_sample_appの場合はskeletonSampleApp.cpp) になっているので必要に応じてリネームしてください。下記は一例です。
変更前 ${SDK_DIR}\src\adamapp\test_app\skeletonSampleApp.cpp 変更後 ${SDK_DIR}\src\adamapp\test_app\testApp.cpp
Makefile内のSRC_FILESも必要に応じて修正してください。下記は一例です。
${SDK_DIR}\src\adamapp\test_app\Makefile 変更前 SRC_FILES= skeletonSampleApp.cpp 変更後 SRC_FILES= testApp.cpp
Makefile内のPROG_NAME、configuration.txt内のAPPLICATION、deployment.template.json内のAPPLICATION_NAMEも必要に応じて修正してください。下記は一例です。
${SDK_DIR}\src\adamapp\test_app\Makefile 変更前 PROG_NAME= SkeletonSampleApp 変更後 PROG_NAME= TestApp ${SDK_DIR}\src\adamapp\test_app\configuration.txt 変更前 APPLICATION SkeletonSampleApp 変更後 APPLICATION TestApp ${SDK_DIR}\src\adamapp\test_app\container\deployment.template.json 変更前 "APPLICATION_NAME=SkeletonSampleApp" 変更後 "APPLICATION_NAME=TestApp"
アプリのビルド
ビルドを行う際はAzure IoT拡張機能の組込み機能を使用します。Visual Studio Codeのエクスプローラで${SDK_DIR}
\src\adamapp\test_app\container\deployment.template.jsonを右クリックするとビルドメニューが表示されます。
「Build IoT Edge Solution」を選択します。この操作ではビルドのみ実施されます。
初回のビルドの場合は、コンテナレジストリへのログインが要求されます。 以下はコンテナレジストリがiprocv5xcontainerregistry.azurecr.ioの場合の例です。
ERROR: failed to solve: iprocv5xcontainerregistry.azurecr.io/cadamappbase:0.0.2: failed to authorize: failed to fetch anonymous token: unexpected status: 401 Unauthorized
この時はVisual Studio Codeの端末上で下記コマンドを入力します。
docker login iprocv5xcontainerregistry.azurecr.io
続いて表示されるUsernameおよび Passwordを入力します。コンテナレジストリのIDとパスワードを入力します。
Username: [ユーザー名] Password: [password]
Login Succeeded
と表示されたらログイン成功です。
次に${SDK_DIR}
\src\adamapp\test_app\container\deployment.template.jsonを右クリックして、
「Build and Push IoT Edge Solution」を選択します。この操作ではビルドとコンテナレジストリへのプッシュを行います。
ビルドは、${SDK_DIR}
\src\adamapp\test_app\ 以下にある Dockerfile.arm64v8 ファイルに記載の通りにDocker buildx buildが実行されることで行われます。Dockerfile.の後の環境名(arm64v8)は上記の手順で選択されたアーキテクチャが選択されています。(Visual Studio Codeの下部に現在のアーキテクチャが表示されます)
ビルドしたイメージの確認
ビルドが成功すれば、そのイメージは docker images で存在が確認できます。下記は一例です。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE iprocv5xcontainerregistry.azurecr.io/azureiot/test_app 0.0.5-arm64v8 f1772ccfed77 35 minutes ago 91.4MB
カメラへのデプロイ
左下の「AZURE IOT HUB」以下からデプロイしたいデバイスを選択し、右クリックして「1つのIoT Edgeに配置」を選択することで、カメラへデプロイされます。デプロイする内容は${SDK_DIR}
\src\adamapp\test_app\container\deployment.template.json に従います。
Visual Studio Codeの上部にプルダウンが表示されるので下記を選択します。${SDK_DIR}
\src\adamapp\test_app\container\config\deployment.arm64v8.json
Deployment Succeeded
と表示されたらデプロイ成功です。
Azure上でランタイム状態の確認
Azure Portal にログインして、IoT Hub - IoT Edge画面で追加したIoT Edgeデバイスを選択します。
画面下部に表示されているデプロイしたアプリのランタイムの状態を確認します。「running」になっていればエラーが発生していない状態です。「エラー」と表示されている場合は選択するとエラーメッセージが表示されるので、デバッグしてください。
デプロイしてしばらくはランタイムの状態は「エラー」になります。「running」になるまで時間が必要です。ただし、「running」になるまでに必要な時間はアプリに依存します。
アプリの動作確認
カメラと接続可能なPCで下記URLにアクセスします。
http://[カメラのローカルIPアドレス]/cgi-bin/cadam.cgi?methodName=getApplicationList
カメラの応答が表示されます。下記は一例です。
{ "appCount": "1", "limitationMode": "Shared", "maxAppCount": "9", "appList": [ { "appType": "0", "funcId": "0000FF01", "appInfo": { "installId": "124B569A", (中略) }
"installId": "124B569A",
と表示されている情報を使います。
下記のURLにアクセスします。
http://[カメラのローカルIPアドレス]/cgi-bin/cadam.cgi?Language=1&methodName=sendDataToAdamApplication&installId=[インストールID]&s_appDataType=0&s_appData=e3tMYW5ndWFnZToxfX0%3D
カメラのIPアドレスが192.168.100.33、"installId": "124B569A",
の場合は下記になります。
http://192.168.100.33/cgi-bin/cadam.cgi?Language=1&methodName=sendDataToAdamApplication&installId=124B569A&s_appDataType=0&s_appData=e3tMYW5ndWFnZToxfX0%3D
下記のようにアプリ動作を確認できます。下記はskeleton_sample_appを動作させた例です。
Checkpoints if things don't work in the WSL environment
If it does not work in WSL environment, please check the following.
The following must be enabled in the Visual Studio Code "LOCAL" extension
Dev Containers
Remote - SSH, Remote - SSH: Editing Configuration FIles, Remote - Tunnels, Remote Development, Remote Explorer
WSL
The following must be enabled in Visual Studio Code's "WSL: UBUNTU-20.04" extension:
Azure Account
Azure IoT Edge
Azure IoT Hub
"WSL: Ubuntu-20.04" is displayed at the bottom left of the Visual Studio Code screen.
If permission denied is displayed in Build IoT Edge Solution, check whether the current user has access rights to the target directory.
sudo chown -r ipro:ipro [development directory] ※ipro:ipro is an example, so please set it according to each environment.
Run the above to change the owner.