Azure IoT と Jetson Nano を使ってみる準備
MS Learn で Azure IoT のお勉強してきましたが、NVIDIA Jetson Nano を入手する機会があったのでこれを気にやってみる
実質 KPS と一部競合にもなりえそうなので、とりあえず触ってみないことにはね
めっちゃ長くなりました
Azure IoTのサービス
Azure IoT内にいくつか種類がある模様
Azure IoT Hub
・リモート デバイスから送信された大量のテレメトリを処理できるクラウド サービス
・クラウドでホストされるマネージド サービスであり、IoT アプリケーションとそれが管理するデバイス間の双方向通信のための中央メッセージ ハブとして機能
・ほとんどすべてのデバイスを IoT ハブに接続できる|
Azure IoT Central
・IoT デバイスの接続、監視、管理を可能にするダッシュボードを追加することで、IoT Hub 上に構築される。
・UI を使用すると、簡単に新しいデバイスを接続し、テレメトリやエラー メッセージの送信開始時を監視する。 すべてのデバイスにわたってパフォーマンス全体を総合的に監視する。
Azure Sphere
・エンドツーエンドの安全性の高い IoT ソリューションを作成。これにはデバイス上のハードウェアや OS から、メッセージをデバイスからメッセージ ハブに送信する安全な方法まで、あらゆるものが含まれる。 Azure Sphere には、インターネットに接続されたデバイス用の通信とセキュリティの機能が組み込まれている
エッジデバイスの準備
IoT Edgeデバイスとして登録するのは、コイツ
「Jetson Nano Dev Kit B01」アキバのマルツ電子本店で 12,000円 で入手しました
箱の裏にも書いてますが、これ単品で買っても動きません
ついでに一緒に買った、アルミのケース(これ高かった。。。)を装着
Jetson Nano セットアップ
Jetson Nano に入れる OS 「JetPack」を下記から入手して
Micro SD にイメージを書き込みます
JetPack SDK | NVIDIA Developer
Micro SD を突き刺して、電源をケーブルを接続すると起動してきます
(本体に電源スイッチなんか無い)
起動すると見覚えのある Ubuntu の画面で初期セットアップを行っていきます
一通り終えると nVIDIA ぽい画面のデスクトップが表示されます
ターミナルを開いてHW情報を確認してみましょう
$ cat /proc/cpuinfo processor : 0 model name : ARMv8 Processor rev 1 (v8l) BogoMIPS : 38.40 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd07 CPU revision : 1 processor : 1 model name : ARMv8 Processor rev 1 (v8l) BogoMIPS : 38.40 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd07 CPU revision : 1 processor : 2 model name : ARMv8 Processor rev 1 (v8l) BogoMIPS : 38.40 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd07 CPU revision : 1 processor : 3 model name : ARMv8 Processor rev 1 (v8l) BogoMIPS : 38.40 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd07 CPU revision : 1 $ free -m total used free shared buff/cache available Mem: 3964 1024 2107 29 832 2761 Swap: 1982 0 1982 $ uname -a Linux kon-jetson 4.9.140-tegra #1 SMP PREEMPT Mon Dec 9 22:47:42 PST 2019 aarch64 aarch64 aarch64 GNU/Linux $ cat /etc/os-release NAME="Ubuntu" VERSION="18.04.5 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.5 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic
======
CPU ARMv8
Memory 4GB
ubuntu 18.04
======
Azure IoT Hub の設定
まず Azure ポータル上で IoT Hub 作ります
IoT Hubを作る際に重要なのは「サイズとスケール」
課金体系を選ぶのですが、デフォルトで「S1」になっているので、課金されます
「F1」は検証用で制限ありますが、無料で使えます
但し、あとで変更は不可能で IoT Hub から作り直しが必要になります
「確認および作成」の後には10分近くかかります
IoT Edge をつくる
作った IoT Hub 内で、IoT Edge で選びます
デフォルトで、対象キーの方でいきます
Jetson Nano で IoT Edge の設定
Jetson Nano へランタイムインストール
ここから、Jetson Nano に Azure IoT Edge のランタイムをインスールしていきます
ココを参照していくのですが
Azure IoT Edge をインストールする | Microsoft Docs
手順通りやっても apt のリポジトリの問題か、arm64だからか
$ sudo apt install iotedge
ではうまいことインストールできません
書かれているAzure IoT Edge リリースへいって、直接インストールしてやりましょう
Releases · Azure/azure-iotedge · GitHub
Ubuntu 用の libiothsm-std と iotedge を探します
それぞれのバージョンの Assets の中身を確認
ubuntu arm64 のリンクをコピー
Ubuntu バージョン 18.04 ですが、16.04 でも問題無いです
ダウンロードしたして下記のインストールコマンドでも OKですが
curl -L
curl -L
Jetson Nano から Curl で直インストールでも OK
【コマンド例】
・libiothsm-std
curl -L https://github.com/Azure/azure-iotedge/releases/download/1.0.10.2/libiothsm-std_1.0.10.2-1_ubuntu16.04_arm64.deb -o libiothsm-std.deb && sudo dpkg -i ./libiothsm-std.deb
・iotedge
curl -L https://github.com/Azure/azure-iotedge/releases/download/1.0.10.2/iotedge_1.0.10.2-1_ubuntu16.04_arm64.deb -o iotedge.deb && sudo dpkg -i ./iotedge.deb
Jetson Nano 側に Azure IoT Edge の情報を登録
/etc/iotedge/config.yaml の device_connection_string: に
Azure IoT Edge の プライマリ接続文字列 を追記します
sudo vi /etc/iotedge/config.yaml
# Manual provisioning configuration using a connection string provisioning: source: "manual" device_connection_string: "HostName=kon-jetson-iothub.azure-devices.net;DeviceId=kon-jetson-iotedge;SharedAccessKey=xxxxxxxxxxxxxxx" dynamic_reprovisioning: false
iotedge サービスを再起動します
$ sudo systemctl restart iotedge
$ sudo systemctl status iotedge ● iotedge.service - Azure IoT Edge daemon Loaded: loaded (/lib/systemd/system/iotedge.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-11-20 22:49:00 JST; 23s ago Docs: man:iotedged(8) Main PID: 13753 (iotedged) Tasks: 14 (limit: 4183) CGroup: /system.slice/iotedge.service └─13753 /usr/bin/iotedged -c /etc/iotedge/config.yaml ・・・(中略)・・・ 11月 20 22:49:23 kon-jetson iotedged[13753]: 2020-11-20T13:49:23Z [INFO] - Successfully created module edgeAgent 11月 20 22:49:23 kon-jetson iotedged[13753]: 2020-11-20T13:49:23Z [INFO] - Starting module edgeAgent...
Azure IoT Edge との接続状況確認
$ iotedge list NAME STATUS DESCRIPTION CONFIG edgeAgent running Up 5 minutes mcr.microsoft.com/azureiotedge-agent:1.0
なんとなく docker コンテナ見てみると、なるほど
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9249bebd0320 mcr.microsoft.com/azureiotedge-hub:1.0 "/bin/sh -c 'echo \"$…" 6 hours ago Up 6 hours 0.0.0.0:443->443/tcp, 0.0.0.0:5671->5671/tcp, 0.0.0.0:8883->8883/tcp edgeHub 9636a76cc65f mcr.microsoft.com/azureiotedge-agent:1.0 "/bin/sh -c 'exec /a…" 9 hours ago Up 8 hours edgeAgent
Azureポータル上の IoT Edge 確認するとモジュールの数が「1」になってます