【 IoT 】建立與部署 Python 版本的 Module 到 Azure IoT Edge 及 Module 與 Hub 間通訊
內容
- 學習目標
- 前置準備作業
- 示意圖
- 使用工具與服務
- 前置準備作業
- 實作
- 清除資料與設定
學習目標
- Azure CLI 使用
- Docker 使用
- Jupyter 使用
- 實作範例
- ﹝Case1﹞ - 部署
Python Flask API Module
到Azure 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
- ﹝Case1﹞ - 部署
示意圖
- 說明
- 開發人員使用雲端的 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
前置準備作業
- Azure
- 已安裝
Azure Ubuntu 16.04 VM
- Ref 建立 Azure VM
- 已安裝
Python 3.6
- Ref Python 版本管理與虛擬環境
- 已安裝 Jupyter
- 已安裝
- Raspberry Pi 4
- 已安裝 Raspbian Buster
- 已設定網路連線
專案初始化
Step 1. 開啟 Jupyter
Step 2. 開啟 Terminal
-
點選右上角的
New
再點選Terminal
Step 3. 載入專案
-
在
Terminal
中輸入下方指令git clone https://github.com/ArcherHuang/Azure-IoT-Edge-Sample.git
Step 4. 開啟 Jupyter
程式
-
回到
Jupyter
首頁,再點選Azure-IoT-Edge-Sample
資料夾 -
點選
Create-Docker-Image-to-Rpi-IoT-Edge-Module-Use-Python.ipynb
建立與設定 Raspberry Pi Docker
、Azure IoT Hub
、Azure IoT Edge
、Azure Container Registry
Step 1. 執行 Jupyter 中的 1.1
進行套件更新
- 點選此區塊後按上方的
Run
Step 2. 執行 Jupyter 中的 1.2
進行 Docker
安裝
- 點選此區塊後按上方的
Run
Step 3. 執行 Jupyter 中的 1.3
進行 Azure CLI
安裝
- 點選此區塊後按上方的
Run
Step 4. 登入 Azure
- 點選此區塊後按上方的
Run
- 點選所顯示的連結並輸入所顯示的
Code
進行登入認證
- 輸入所顯示的
Code
- 選擇登入的帳號
- 認證完成
Step 5. 執行 Jupyter 中的 1.5
進行 azure-cli-iot-ext
安裝
- 點選此區塊後按上方的
Run
Step 6. 執行 Jupyter 中的 1.6
進行相關資訊設定
- 點選此區塊後按上方的
Run
Step 7. 執行 Jupyter 中的 1.7
進行 新建資源群組
- 點選此區塊後按上方的
Run
Step 8. 執行 Jupyter 中的 1.8
進行 IoT Hub
建立
- 點選此區塊後按上方的
Run
Step 9. 執行 Jupyter 中的 1.9
進行 IoT Edge
建立
- 點選此區塊後按上方的
Run
Step 10. 執行 Jupyter 中的 1.10
進行取得 Azure IoT Edge
的 Connection String
- 點選此區塊後按上方的
Run
- 請再依照 安裝 Azure IoT Edge 於 Raspberry Pi 4 進行
Azure IoT Edge
的安裝與Connection String
設定
Step 11. 執行 Jupyter 中的 1.11
進行 Azure Container Registry
建立
- 點選此區塊後按上方的
Run
Step 12. 執行 Jupyter 中的 1.12
進行啟用 Azure Container Registry
的 Admin user
- 點選此區塊後按上方的
Run
Step 13. 執行 Jupyter 中的 1.13
進行取得 Azure Container Registry
的 name
與 password
- 點選此區塊後按上方的
Run
Case1 部署 Python Flask API Module
到 Azure IoT Edge
Step 1. 執行 Jupyter 中的 2.1
產生 deployment-1.json
- 點選此區塊後按上方的
Run
Step 2. 執行 Jupyter 中的 2.2
進行安裝在 x86 系統中能 Build ARM 的 Images 套件
- 點選此區塊後按上方的
Run
Step 3. 執行 Jupyter 中的 2.3
產生 Module01
的 Docker Image
- 點選此區塊後按上方的
Run
Step 4. 執行 Jupyter 中的 2.4
產生 acr_password.txt
- 點選此區塊後按上方的
Run
Step 5. 執行 Jupyter 中的 2.5
進行 Azure Container Registry Login
- 點選此區塊後按上方的
Run
Step 6. 執行 Jupyter 中的 2.6
進行將 Module01
的 Docker Image
上傳到 Azure Container Registry
- 點選此區塊後按上方的
Run
Step 7. 執行 Jupyter 中的 2.7
設定 Azure IoT Hub
中 Edge
的 module
以進行部署到 Azure IoT Edge
中
- 點選此區塊後按上方的
Run
Step 8. 在 Raspberry Pi
中查看部署狀況
-
請在
Raspberry Pi
的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )sudo iotedge list
Step 9. 查看 Raspberry Pi
的 IP
-
請在
Raspberry Pi
的終端機輸入下方指令hostname -I
Step 10. 開啟瀏覽器進行測試
-
網址輸入
- ㊟
Raspberry-Pi-IP
請輸入Step 9
所取得的IP
http://Raspberry-Pi-IP:8080
- ㊟
-
測試結果
Case2 Python Module
間透過 Message Route
溝通
Step 1. 執行 Jupyter 中的 3.1
建立 Module01
的 Docker Image
- 點選此區塊後按上方的
Run
Step 2. 執行 Jupyter 中的 3.2
進行將 Module01
的 Docker Image
上傳到 Azure Container Registry
- 點選此區塊後按上方的
Run
Step 3. 執行 Jupyter 中的 3.3
建立 Module02
的 Docker Image
- 點選此區塊後按上方的
Run
Step 4. 執行 Jupyter 中的 3.4
進行將 Module02
的 Docker Image
上傳到 Azure Container Registry
- 點選此區塊後按上方的
Run
Step 5. 執行 Jupyter 中的 3.5
產生 deployment-2.json
- 點選此區塊後按上方的
Run
Step 6. 執行 Jupyter 中的 3.6
進行設定 Azure IoT Hub
中 Edge
的 module
以進行部署到 Azure IoT Edge
中
- 點選此區塊後按上方的
Run
Step 7. 在 Raspberry Pi
中查看部署狀況
-
請在
Raspberry Pi
的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )sudo iotedge list
Step 8. 查看 Raspberry Pi
的 IP
-
請在
Raspberry Pi
的終端機輸入下方指令hostname -I
Step 9. 測試部署狀況
-
瀏覽器端
-
開啟瀏覽器輸入下方網址
- ㊟
Raspberry-Pi-IP
請輸入 Step 8 所取得的 IP - http://Raspberry-Pi-IP:8080/message/hello_world
- ㊟
-
瀏覽器顯示結果
Message - hello_world!
-
-
Raspberry Pi 端
-
請輸入下方指令
sudo iotedge logs module02
-
顯示結果
-
Case3 Azure IoT Edge
透過 Output Route
傳送訊息到 Azure IoT Hub
Step 1. 執行 Jupyter 中的 4.1
進行建立 Module03
的 Docker Image
- 點選此區塊後按上方的
Run
Step 2. 執行 Jupyter 中的 4.2
進行將 Module03
的 Docker Image
上傳到 Azure Container Registry
- 點選此區塊後按上方的
Run
Step 3. 執行 Jupyter 中的 4.3
產生 deployment-3.json
- 點選此區塊後按上方的
Run
Step 4. 執行 Jupyter 中的 4.4
進行設定 Azure IoT Hub
中 Edge
的 module
以進行部署到 Azure IoT Edge
中
- 點選此區塊後按上方的
Run
Step 5. 在 Raspberry Pi
中查看部署狀況
-
請在
Raspberry Pi
的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )sudo iotedge list
Step 6. 執行 Jupyter 中的 4.5
從 Azure IoT Hub
查看 Device to Cloud (D2C)
的 訊息
- 點選此區塊後按上方的
Run
Case4 Azure IoT Edge
透過 send_message
方式傳送訊息到 Azure IoT Hub
Step 1. 執行 Jupyter 中的 5.1
進行取得 Azure IoT Edge
的 Connection String
並存在 .env
- 點選此區塊後按上方的
Run
Step 2. 執行 Jupyter 中的 5.2
進行建立 Module04
的 Docker Image
- 點選此區塊後按上方的
Run
Step 3. 執行 Jupyter 中的 5.3
進行將 Module04
的 Docker Image
上傳到 Azure Container Registry
- 點選此區塊後按上方的
Run
Step 4. 執行 Jupyter 中的 5.4
產生 deployment-4.json
- 點選此區塊後按上方的
Run
Step 5. 執行 Jupyter 中的 5.5
進行設定 Azure IoT Hub
中 Edge
的 module
以進行部署到 Azure IoT Edge
中
- 點選此區塊後按上方的
Run
Step 6. 在 Raspberry Pi
中查看部署狀況
-
請在
Raspberry Pi
的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )sudo iotedge list
Step 7. 執行 Jupyter 中的 5.6
進行從 Azure IoT Hub
查看 Device to Cloud (D2C)
的 訊息
- 點選此區塊後按上方的
Run
Case5 Azure IoT Edge
接收 Azure IoT Hub
傳送的訊息
Step 1. 執行 Jupyter 中的 6.1
進行取得 Azure IoT Edge
的 Connection String
並存檔成 .env
- 點選此區塊後按上方的
Run
Step 2. 執行 Jupyter 中的 6.2
建立 Module05
的 Docker Image
- 點選此區塊後按上方的
Run
Step 3. 執行 Jupyter 中的 6.3
進行將 Module05
的 Docker Image
上傳到 Azure Container Registry
- 點選此區塊後按上方的
Run
Step 4. 執行 Jupyter 中的 6.4
產生 deployment-5.json
- 點選此區塊後按上方的
Run
Step 5. 執行 Jupyter 中的 6.5
進行設定 Azure IoT Hub
中 Edge
的 module
以進行部署到 Azure IoT Edge
中
- 點選此區塊後按上方的
Run
Step 6. 在 Raspberry Pi
中查看部署狀況
-
請在
Raspberry Pi
的終端機輸入下方指令 ( Module 部署到 Raspberry Pi 需幾分鐘時間 )sudo iotedge list
Step 7. 執行 Jupyter 中的 6.6
從 Azure IoT Hub
傳送訊息到 Device
- Cloud to Device (C2D)
- 點選此區塊後按上方的
Run
Step 8. 測試部署狀況
- Raspberry Pi 端
-
請輸入下方指令
sudo iotedge logs module05
-
顯示結果
-
清除資料與設定
Step 1. 執行 Jupyter 中的 7.1
進行移除 deployment-*.json
與 acr_password.txt
- 點選此區塊後按上方的
Run
Step 2. 執行 Jupyter 中的 7.2
進行移除 Azure IoT Hub
& Azure Container Registry
& Resource Group
- 點選此區塊後按上方的
Run
Reference
- https://docs.microsoft.com/zh-tw/python/api/azure-iot-device/?view=azure-python
- https://docs.microsoft.com/zh-tw/azure/iot-edge/module-composition