【 IoT 】建立與部署 Python 版本的 Module 到 Azure IoT Edge 及 Module 與 Hub 間通訊

【 IoT 】建立與部署 Python 版本的 Module 到 Azure IoT Edge 及 Module 與 Hub 間通訊

內容

  • 學習目標
  • 前置準備作業
  • 示意圖
  • 使用工具與服務
  • 前置準備作業
  • 實作
  • 清除資料與設定

學習目標

  • Azure CLI 使用
  • Docker 使用
  • Jupyter 使用
  • 實作範例
    • ﹝Case1﹞ - 部署 Python Flask API ModuleAzure IoT Edge
      • Module01 Version 0.1
    • ﹝Case2﹞ - Python Module 間透過 Message Route 溝通
      • Module01 Version 0.2 與 Module02 Version 0.1
    • ﹝Case3﹞ - Azure IoT Edge 透過 Output Route 傳送訊息到 Azure IoT Hub
      • Module03 Version 0.1
    • ﹝Case4﹞ - Azure IoT Edge 透過 send_message 方式傳送訊息到 Azure IoT Hub
      • Module04 Version 0.1
    • ﹝Case5﹞ - Azure IoT Edge 接收 Azure IoT Hub 傳送的訊息
      • Module05 Version 0.1

示意圖

---2020-01-03---9.53.36

  • 說明
    • 開發人員使用雲端的 Azure Ubuntu VM 上所安裝的 Jupyter 來開發 Python Module、使用 Azure CLI 建立 Azure 相關服務、建立 Docker Image、Push Docker Image 到 Azure Container Registry、設定 Azure IoT Hub 的 Edge 以更新地端 Raspberry Pi 的 Module,Azure IoT Edge 更新 Module 後會依 Module 的需求做相對應的動作,如 API 的 CRUD、Module 間的 Message Route、接收 IoT Hub 訊息、傳送訊息到 IoT Hub 等動作。

使用工具與服務

  • Azure IoT Hub
  • Azure IoT Edge
  • Azure Container Registry
  • Azure Ubuntu VM
  • Azure CLI
  • Raspberry Pi 4
  • Python 3
  • Jupyter
  • Git
  • Docker

前置準備作業


專案初始化

Step 1. 開啟 Jupyter

---2020-01-03---2.53.55


Step 2. 開啟 Terminal

  • 點選右上角的 New 再點選 Terminal

    ---2020-01-03---2.55.53


Step 3. 載入專案

  • Terminal 中輸入下方指令

    git clone https://github.com/ArcherHuang/Azure-IoT-Edge-Sample.git 

    ---2020-01-03---2.57.42


Step 4. 開啟 Jupyter 程式

  • 回到 Jupyter 首頁,再點選 Azure-IoT-Edge-Sample 資料夾

    ---2020-01-03---2.59.50

  • 點選 Create-Docker-Image-to-Rpi-IoT-Edge-Module-Use-Python.ipynb

    ---2020-01-03---3.00.42


建立與設定 Raspberry Pi DockerAzure IoT HubAzure IoT EdgeAzure Container Registry

Step 1. 執行 Jupyter 中的 1.1 進行套件更新

  • 點選此區塊後按上方的 Run

---2020-01-03---3.05.33


Step 2. 執行 Jupyter 中的 1.2 進行 Docker 安裝

  • 點選此區塊後按上方的 Run

---2020-01-03---3.09.25


Step 3. 執行 Jupyter 中的 1.3 進行 Azure CLI 安裝

  • 點選此區塊後按上方的 Run

---2020-01-03---3.23.08


Step 4. 登入 Azure

  • 點選此區塊後按上方的 Run

---2020-01-03---3.12.48

  • 點選所顯示的連結並輸入所顯示的 Code 進行登入認證

---2020-01-03---3.12.48--

  • 輸入所顯示的 Code

---2020-01-03---3.18.00

  • 選擇登入的帳號

---2020-01-03---3.18.33

  • 認證完成

---2020-01-03---3.20.00

---2020-01-03---3.24.56


Step 5. 執行 Jupyter 中的 1.5 進行 azure-cli-iot-ext 安裝

  • 點選此區塊後按上方的 Run

---2020-01-03---3.24.27


Step 6. 執行 Jupyter 中的 1.6 進行相關資訊設定

  • 點選此區塊後按上方的 Run

---2020-01-03---3.26.10


Step 7. 執行 Jupyter 中的 1.7 進行 新建資源群組

  • 點選此區塊後按上方的 Run

---2020-01-03---3.27.10


Step 8. 執行 Jupyter 中的 1.8 進行 IoT Hub 建立

  • 點選此區塊後按上方的 Run

---2020-01-03---3.32.54


Step 9. 執行 Jupyter 中的 1.9 進行 IoT Edge 建立

  • 點選此區塊後按上方的 Run

---2020-01-03---3.34.35


Step 10. 執行 Jupyter 中的 1.10 進行取得 Azure IoT EdgeConnection String

  • 點選此區塊後按上方的 Run

---2020-01-03---3.36.17


Step 11. 執行 Jupyter 中的 1.11 進行 Azure Container Registry 建立

  • 點選此區塊後按上方的 Run

---2020-01-03---3.40.05


Step 12. 執行 Jupyter 中的 1.12 進行啟用 Azure Container RegistryAdmin user

  • 點選此區塊後按上方的 Run

---2020-01-03---3.41.27


Step 13. 執行 Jupyter 中的 1.13 進行取得 Azure Container Registrynamepassword

  • 點選此區塊後按上方的 Run

---2020-01-03---3.42.55


Case1 部署 Python Flask API ModuleAzure IoT Edge

Step 1. 執行 Jupyter 中的 2.1 產生 deployment-1.json

  • 點選此區塊後按上方的 Run

---2020-01-03---3.45.05


Step 2. 執行 Jupyter 中的 2.2 進行安裝在 x86 系統中能 Build ARM 的 Images 套件

  • 點選此區塊後按上方的 Run

---2020-01-03---3.46.40


Step 3. 執行 Jupyter 中的 2.3 產生 Module01Docker Image

  • 點選此區塊後按上方的 Run

---2020-01-03---3.49.12


Step 4. 執行 Jupyter 中的 2.4 產生 acr_password.txt

  • 點選此區塊後按上方的 Run

---2020-01-03---3.50.53


Step 5. 執行 Jupyter 中的 2.5 進行 Azure Container Registry Login

  • 點選此區塊後按上方的 Run

---2020-01-03---3.51.44


Step 6. 執行 Jupyter 中的 2.6 進行將 Module01Docker Image 上傳到 Azure Container Registry

  • 點選此區塊後按上方的 Run

---2020-01-03---3.53.07


Step 7. 執行 Jupyter 中的 2.7 設定 Azure IoT HubEdgemodule 以進行部署到 Azure IoT Edge

  • 點選此區塊後按上方的 Run

---2020-01-03---3.54.45


Step 8. 在 Raspberry Pi 中查看部署狀況

  • 請在 Raspberry Pi 的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )

    sudo iotedge list 

    ---2020-01-03---3.59.50


Step 9. 查看 Raspberry PiIP

  • 請在 Raspberry Pi 的終端機輸入下方指令

    hostname -I 

    ---2020-01-03---4.01.41


Step 10. 開啟瀏覽器進行測試

  • 網址輸入

    • Raspberry-Pi-IP 請輸入 Step 9 所取得的 IP
    http://Raspberry-Pi-IP:8080 
  • 測試結果

    ---2020-01-03---4.04.01


Case2 Python Module 間透過 Message Route 溝通

Step 1. 執行 Jupyter 中的 3.1 建立 Module01Docker Image

  • 點選此區塊後按上方的 Run

---2020-01-03---4.07.55


Step 2. 執行 Jupyter 中的 3.2 進行將 Module01Docker Image 上傳到 Azure Container Registry

  • 點選此區塊後按上方的 Run

---2020-01-03---4.09.09


Step 3. 執行 Jupyter 中的 3.3 建立 Module02Docker Image

  • 點選此區塊後按上方的 Run

---2020-01-03---4.10.37


Step 4. 執行 Jupyter 中的 3.4 進行將 Module02Docker Image 上傳到 Azure Container Registry

  • 點選此區塊後按上方的 Run

---2020-01-03---4.12.06


Step 5. 執行 Jupyter 中的 3.5 產生 deployment-2.json

  • 點選此區塊後按上方的 Run

---2020-01-03---4.12.44


Step 6. 執行 Jupyter 中的 3.6 進行設定 Azure IoT HubEdgemodule 以進行部署到 Azure IoT Edge

  • 點選此區塊後按上方的 Run

---2020-01-03---4.13.39


Step 7. 在 Raspberry Pi 中查看部署狀況

  • 請在 Raspberry Pi 的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )

    sudo iotedge list 

    ---2020-01-03---4.15.00


Step 8. 查看 Raspberry PiIP

  • 請在 Raspberry Pi 的終端機輸入下方指令

    hostname -I 

    ---2020-01-03---4.01.41


Step 9. 測試部署狀況

  • 瀏覽器端

  • Raspberry Pi 端

    • 請輸入下方指令

      sudo iotedge logs module02 
    • 顯示結果

      ---2020-01-03---4.16.38


Case3 Azure IoT Edge 透過 Output Route 傳送訊息到 Azure IoT Hub

Step 1. 執行 Jupyter 中的 4.1 進行建立 Module03Docker Image

  • 點選此區塊後按上方的 Run

---2020-01-03---4.19.00


Step 2. 執行 Jupyter 中的 4.2 進行將 Module03Docker Image 上傳到 Azure Container Registry

  • 點選此區塊後按上方的 Run

---2020-01-03---4.20.07


Step 3. 執行 Jupyter 中的 4.3 產生 deployment-3.json

  • 點選此區塊後按上方的 Run

---2020-01-03---4.20.40


Step 4. 執行 Jupyter 中的 4.4 進行設定 Azure IoT HubEdgemodule 以進行部署到 Azure IoT Edge

  • 點選此區塊後按上方的 Run

---2020-01-03---4.21.48


Step 5. 在 Raspberry Pi 中查看部署狀況

  • 請在 Raspberry Pi 的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )

    sudo iotedge list 

    ---2020-01-03---4.23.29


Step 6. 執行 Jupyter 中的 4.5Azure IoT Hub 查看 Device to Cloud (D2C)訊息

  • 點選此區塊後按上方的 Run

---2020-01-03---4.23.50


Case4 Azure IoT Edge 透過 send_message 方式傳送訊息到 Azure IoT Hub

Step 1. 執行 Jupyter 中的 5.1 進行取得 Azure IoT EdgeConnection String 並存在 .env

  • 點選此區塊後按上方的 Run

---2020-01-03---4.26.19


Step 2. 執行 Jupyter 中的 5.2 進行建立 Module04Docker Image

  • 點選此區塊後按上方的 Run

---2020-01-03---4.29.01


Step 3. 執行 Jupyter 中的 5.3 進行將 Module04Docker Image 上傳到 Azure Container Registry

  • 點選此區塊後按上方的 Run

---2020-01-03---4.30.11


Step 4. 執行 Jupyter 中的 5.4 產生 deployment-4.json

  • 點選此區塊後按上方的 Run

---2020-01-03---4.30.37


Step 5. 執行 Jupyter 中的 5.5 進行設定 Azure IoT HubEdgemodule 以進行部署到 Azure IoT Edge

  • 點選此區塊後按上方的 Run

---2020-01-03---4.31.18-1


Step 6. 在 Raspberry Pi 中查看部署狀況

  • 請在 Raspberry Pi 的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )

    sudo iotedge list 

    ---2020-01-03---4.32.00


Step 7. 執行 Jupyter 中的 5.6 進行從 Azure IoT Hub 查看 Device to Cloud (D2C)訊息

  • 點選此區塊後按上方的 Run

---2020-01-03---4.32.22


Case5 Azure IoT Edge 接收 Azure IoT Hub 傳送的訊息

Step 1. 執行 Jupyter 中的 6.1 進行取得 Azure IoT EdgeConnection String 並存檔成 .env

  • 點選此區塊後按上方的 Run

---2020-01-03---4.34.12


Step 2. 執行 Jupyter 中的 6.2 建立 Module05Docker Image

  • 點選此區塊後按上方的 Run

---2020-01-03---4.36.25


Step 3. 執行 Jupyter 中的 6.3 進行將 Module05Docker Image 上傳到 Azure Container Registry

  • 點選此區塊後按上方的 Run

---2020-01-03---4.37.21


Step 4. 執行 Jupyter 中的 6.4 產生 deployment-5.json

  • 點選此區塊後按上方的 Run

---2020-01-03---4.38.02


Step 5. 執行 Jupyter 中的 6.5 進行設定 Azure IoT HubEdgemodule 以進行部署到 Azure IoT Edge

  • 點選此區塊後按上方的 Run

---2020-01-03---4.38.54


Step 6. 在 Raspberry Pi 中查看部署狀況

  • 請在 Raspberry Pi 的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )

    sudo iotedge list 

    ---2020-01-03---4.39.37


Step 7. 執行 Jupyter 中的 6.6Azure IoT Hub 傳送訊息到 Device - Cloud to Device (C2D)

  • 點選此區塊後按上方的 Run

---2020-01-03---4.41.00


Step 8. 測試部署狀況

  • Raspberry Pi 端
    • 請輸入下方指令

      sudo iotedge logs module05 
    • 顯示結果

      ---2020-01-03---4.41.39


清除資料與設定

Step 1. 執行 Jupyter 中的 7.1 進行移除 deployment-*.jsonacr_password.txt

  • 點選此區塊後按上方的 Run

---2020-01-03---4.43.27


Step 2. 執行 Jupyter 中的 7.2 進行移除 Azure IoT Hub & Azure Container Registry & Resource Group

  • 點選此區塊後按上方的 Run

---2020-01-03---4.45.20


Reference
GitHub
List of blogs