konchangakita

KPSを一番楽しんでいたブログ 会社の看板を背負いません 転載はご自由にどうぞ

Azure IoT と Jetson Nano を使ってみる準備

f:id:konchangakita:20201129152458p:plain

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デバイスとして登録するのは、コイツ
f:id:konchangakita:20201119214107p:plain
「Jetson Nano Dev Kit B01」アキバのマルツ電子本店で 12,000円 で入手しました

箱の裏にも書いてますが、これ単品で買っても動きません
f:id:konchangakita:20201119214959p:plain

一緒に買っておこう・micro SD 32GB以上
・micro USB 電源ケーブル 5V 2A(ヘビーな処理させるなら3A?)


ついでに一緒に買った、アルミのケース(これ高かった。。。)を装着
f:id:konchangakita:20201119222649p:plain

Jetson Nano セットアップ

Jetson Nano に入れる OS 「JetPack」を下記から入手して
Micro SD にイメージを書き込みます
JetPack SDK | NVIDIA Developer


Micro SD を突き刺して、電源をケーブルを接続すると起動してきます
(本体に電源スイッチなんか無い)
f:id:konchangakita:20201119223849p:plain

起動すると見覚えのある Ubuntu の画面で初期セットアップを行っていきます
f:id:konchangakita:20201119222937p:plain

一通り終えると nVIDIA ぽい画面のデスクトップが表示されます
f:id:konchangakita:20201119223034p:plain


ターミナルを開いて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 作ります
f:id:konchangakita:20201129155524p:plain
f:id:konchangakita:20201120215714p:plain

IoT Hubを作る際に重要なのは「サイズとスケール」
課金体系を選ぶのですが、デフォルトで「S1」になっているので、課金されます
「F1」は検証用で制限ありますが、無料で使えます
但し、あとで変更は不可能で IoT Hub から作り直しが必要になります
f:id:konchangakita:20201129161344p:plain


「確認および作成」の後には10分近くかかります
f:id:konchangakita:20201120215629p:plain


IoT Edge をつくる

作った IoT Hub 内で、IoT Edge で選びます
f:id:konchangakita:20201129164550p:plain

デフォルトで、対象キーの方でいきます
f:id:konchangakita:20201129165143p:plain


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 の中身を確認
f:id:konchangakita:20201120211445p:plain
ubuntu arm64 のリンクをコピー
f:id:konchangakita:20201120211852p:plain

Ubuntu バージョン 18.04 ですが、16.04 でも問題無いです
ダウンロードしたして下記のインストールコマンドでも OKですが
 curl -L -o libiothsm-std.deb && sudo dpkg -i ./libiothsm-std.deb
 curl -L -o iotedge.deb && sudo dpkg -i ./iotedge.deb

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


Azure IoT Edge の登録

手順はコチラになります
docs.microsoft.com

さっき作った Azure IoT Edge を選択して
f:id:konchangakita:20201129172400p:plain

プライマリ接続文字列をコピーしておきます
f:id:konchangakita:20201129172509p:plain

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

・・・(中略)・・・

1120 22:49:23 kon-jetson iotedged[13753]: 2020-11-20T13:49:23Z [INFO] - Successfully created module edgeAgent
1120 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」になってます
f:id:konchangakita:20201120231219p:plain


VSCode 開発環境の準備

VSCode に仕込み
f:id:konchangakita:20201121122002p:plain

IoT Hub と IoT Edge の名前が取得できますf:id:konchangakita:20201129174502p:plain
まだ何ができるわからんけど、VSCode すげー


さぁ準備は完了だ