###### tags: `Azure` `Cloud` `Microsoft` `雲端平台` `Python` `IoT` # IoT Hub 簡單介紹 ## 簡介 IoT Hub是託管於雲端中的受控服務(managed service),其做為IoT終端裝置與管理裝置之間雙向通訊的橋樑。 ![](https://i.imgur.com/Vpts3Mz.png) IoT Hub能在IoT裝置與雲端控制後端間建立可靠且安全的通訊,IoT Hub提供多種傳輸方式,例如裝置到雲端遙測、從裝置上傳檔案,以及透過「request-reply」方法從雲端控制您的裝置。 IoT Hub支援監視可追蹤裝置的建立、裝置失敗,以及裝置連線等事件,以協助維護IoT解決方案的健全狀況。 --- ## 測試說明 ### IoT Hub簡單架構及說明 IoT Hub簡單架構圖: ![](https://i.imgur.com/u8nxKDK.png) 說明: + IoT Hub本身是一種Queue的概念 + 左方設備訊號可以透過IoT Hub傳輸至右方IoT Hub設定的端點。 + 控制設備可以透過IoT Hub控制IoT設備(紅線部分)或直接透過Azure網頁介面從雲端發送控制。 + 本次測試分為兩階段,如下圖所示: 1. 使用的架構為"設備->IoT Hub->Built-in Endpoint"並監聽"Built-in Endpoint"確認IoT Hub有收到訊號。 2. 從地端控制設備發送控制訊號給IoT設備。 ![](https://i.imgur.com/RJByAsK.png) ### 測試環境 + 雲端 + 雲端平台:Microsoft Azure + 地端 + 虛擬環境:VirtualBox + 作業系統:Windows 10 + 程式語言:Python 3.6.5 :: Anaconda, Inc. + 通訊協定:MQTT (Port 8883 (TCP)) + 傳輸格式:JSON + 資料 + 採用模擬資料 + 模擬資料包含以下兩種內容: 1. 溫度(temperature) 2. 濕度(humidity) --- ## 測試 ### 雲端IoT Hub部署 **1. 進入[Azure入口網站](https://portal.azure.com/)點選建立資源:** ![](https://i.imgur.com/B8gQNNV.png) **2. 選擇物聯網,再選擇IoT中樞。或者直接在上方搜尋打"IoT Hub":** ![](https://i.imgur.com/n9HVkY9.png) **3. 本次測試訂用帳戶使用免費版,所以不做更動。** **4. Azure服務管理群組為資源群組,由於尚未創立過資源群組,因此點選新建,名稱為"myTestResource",並確定:** ![](https://i.imgur.com/le40x58.png) **5. 請選擇符合自己需求的區域,本測試選擇"東亞",IoT中樞名稱為"myTestIoTHub-1",並點選"下一步":** ![](https://i.imgur.com/r8bPaX6.png) **6. 這部分請依個案需求調整,會即時顯示成本,在測試過程中請記得選擇"F1:免費層",並點選"檢閱+建立":** ![](https://i.imgur.com/NHZziPj.png) **7. 確認沒問題,按下"建立":** ![](https://i.imgur.com/KBmh41a.png) **8. 等待部署:** ![](https://i.imgur.com/CzKD2Hz.png) **9. 部署完成:** ![](https://i.imgur.com/RR9bLVN.png) ### 地端模擬環境 **1. 請確定[適用於 Visual Studio 2015、2017 和 2019 的 Microsoft Visual C++ 可轉散發套件](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)已針對您的架構 (x86 或 x64) 安裝。** **2. 請在本機終端機視窗(cmd)中確定[Python](https://www.python.org/downloads/)已順利安裝及版本(目前Windows系統僅支援[Python 3.6.x](https://www.python.org/downloads/release/python-368/))** + 您可以使用下列命令之一,以確認開發電腦上目前的 Python 版本: `python --version` `python3 --version` **3. 下載[Azure官方範例Python專案](https://github.com/Azure-Samples/azure-iot-samples-python/archive/master.zip)** **4. 在本機終端機視窗中,安裝模擬裝置應用程式所需的程式庫(傳送模擬遙測訊號):** `pip install azure-iothub-device-client` **5. 在本機終端機視窗中,安裝模擬裝置應用程式所需的程式庫(呼叫直接方法):** `pip install azure-iothub-service-client future` ### 註冊裝置 IoT裝置必須先向IoT Hub註冊,才能進行連線。 **1. 點選"myTestIoTHub-1",選擇IoT裝置,新增:** ![](https://i.imgur.com/XJvOm3C.png) **2. 輸入裝置名稱"MyTestPythonDevice",金鑰自動產生,儲存:** ![](https://i.imgur.com/92ATmkl.png) **3. 選擇創建好的裝置:** ![](https://i.imgur.com/KhCEJZy.png) **4. 複製裝置連接字串(地端裝置連IoT Hub認證用):** ![](https://i.imgur.com/PbXdnkF.png) ### 實際測試 #### ==傳輸測試== **1. 進入"azure-iot-samples-python-master\iot-hub\Quickstarts\simulated-device-2" Azure範例程式資料夾,開啟範例程式:** ![](https://i.imgur.com/uWAeCoK.png) **2. 將複製的裝置連接字串填入:** ``` # The device connection string to authenticate the device with your IoT hub. # Using the Azure CLI: # az iot hub device-identity show-connection-string --hub-name {YourIoTHubName} --device-id MyNodeDevice --output table CONNECTION_STRING = "填入IoT Hub裝置連接字串" ``` **3. 執行程式碼:** ``` python SimulatedDevice.py ``` **4. 到Azure入口網站,點選CLI,跳出下面視窗,建立儲存體:** ![](https://i.imgur.com/BMW8dac.png) **5. 將適用於 Azure CLI 的 Microsoft Azure IoT 擴充功能新增至您的 Cloud Shell 執行個體(IoT 擴充功能可將 IoT 中樞、IoT Edge 和 IoT 裝置佈建服務的特定命令新增至 Azure CLI):** ``` az extension add --name azure-cli-iot-ext ``` ![](https://i.imgur.com/1y3hGyw.png) **6. 監聽IoT Hub是否有收到訊號** ``` az iot hub monitor-events --hub-name YourIoTHubName --device-id MyPythonDevice ``` **7. 結果:** 地端: ![](https://i.imgur.com/2POzOzt.png) 雲端: ![](https://i.imgur.com/UhEmIJs.png) #### ==控制測試== **1. 進入Azure入口網站,到 IoT Hub複製要連接裝置的名稱:** ![](https://i.imgur.com/NcSO2OO.png) **2. 進入IoT Hub,點選共用存取原則,點選"service",複製連接字串:** ![](https://i.imgur.com/SZzDi36.png) **3. 進入"azure-iot-samples-python-master\iot-hub\Quickstarts\back-end-application" Azure範例程式資料夾,開啟範例程式::** ![](https://i.imgur.com/PSVs4oX.png) **4. 填入IoT Hub服務連接字串跟裝置名稱:** ``` # The service connection string to authenticate with your IoT hub. # Using the Azure CLI: # az iot hub show-connection-string --hub-name {your iot hub name} CONNECTION_STRING = "填入IoT Hub 服務連接字串" DEVICE_ID = "填入裝置識別碼(裝置名稱)" ``` **5. 在`SimulatedDevice.py`執行期間,執行`BackEndApplication.py`:** `python BackEndApplication.py` **6. 結果** 控制裝置: ![](https://i.imgur.com/iUPUrll.png) IoT裝置: ![](https://i.imgur.com/XoyqTZR.png) --- ## 補充資料 ### 傳輸問題 1. IoT Hub訊息一則大小限制為256KB,超過限制需用檔案上傳功能(例如:圖片)。 ![](https://i.imgur.com/t5EFAnY.png) 2. ==由於測試是監聽內建端點(Built-in Endpoint),如果有使用訊息路由,該訊息會因為被導入其他端點而監聽不到。== ### `SimulatedDevice.py`程式碼 1. 這個客製化屬性是未來在IoT Hub做訊息路由時,可以用查詢的方式將資料存到不同端點。 ``` # Add a custom application property to the message. # An IoT hub can filter on these properties without access to the message body. prop_map = message.properties() if temperature > 30: prop_map.add("temperatureAlert", "true") else: prop_map.add("temperatureAlert", "false") ``` ### `BackEndApplication.py`程式碼 1. 發送直接方法函式,回傳訊息發送狀態 `response = iothub_device_method.invoke(DEVICE_ID, METHOD_NAME, METHOD_PAYLOAD, TIMEOUT)` ### Azure 雲端操作 對個別裝置,裝置詳細資料中有直接方法(Direct method)及裝置對應項(Device twin): ![](https://i.imgur.com/3Kow3Pk.png) 1. 雲端直接方法(Direct method),可以直接從雲端控制裝置,將要傳送的訊息填入裝載。 ![](https://i.imgur.com/n0CH4WU.png) 2. 裝置對應項(Device twin)用於設備版本更新及版本控管,也可以設定Tag協助裝置分類(例如:地區)。 架構圖: ![](https://i.imgur.com/hzAJ6QP.png) 3. IoT 裝置設定(IoT device configuration)在裝置非常多時,將裝置對應項(Device twin)利用Query指令進行大量設備控管。 流程圖: ![](https://i.imgur.com/ixmaUwv.png) 位置: ![](https://i.imgur.com/1XUhLQl.png) --- ## 參考文章 [何謂 Azure IoT 中心?](https://docs.microsoft.com/zh-tw/azure/iot-hub/about-iot-hub) [【物聯網線 05】不可不知的裝置連網秘訣(1):裝置管理面面觀](https://www.youtube.com/watch?v=qc65NxZp2aQ) [Azure IoT: 上傳訊息到雲端 (有字幕)](https://www.youtube.com/watch?v=SSUBvl-385U) [Azure IoT: 使用路由儲存訊息 (有字幕)](https://www.youtube.com/watch?v=FAprw9_8EHI) [Azure IoT: 雙向通訊 - 接收來自雲端的訊息 (有字幕)](https://www.youtube.com/watch?v=fttp2SDVwYg) [Azure IoT: 處理上傳檔案的機制 (有字幕)](https://www.youtube.com/watch?v=6dXkybgDJRo) [快速入門:將遙測從裝置傳送至 IoT 中樞,並使用後端應用程式讀取遙測 (Python)](https://docs.microsoft.com/zh-tw/azure/iot-hub/quickstart-send-telemetry-python) [快速入門:控制連線到 IoT 中樞的裝置 (Python)](https://docs.microsoft.com/zh-tw/azure/iot-hub/quickstart-control-device-python)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up