Share via


教學課程:使用 Eclipse ThreadX 將 MXCHIP AZ3166 devkit 連線至 IoT 中樞

瀏覽程式碼

在本教學課程中,您會使用 Eclipse ThreadX 將 MXCHIP AZ3166 IoT DevKit 連線至 Azure IoT。

您要完成下列工作:

  • 安裝一組內嵌開發工具,以在 C 中設計 MXChip DevKit
  • 建置映像並將它快閃到 MXCHIP DevKit
  • 使用 Azure CLI 建立和管理 MXCHIP DevKit 安全地連線到的 Azure IoT 中樞
  • 使用 Azure IoT Explorer 向 IoT 中樞註冊裝置、檢視裝置屬性、檢視裝置遙測,以及在裝置上呼叫直接命令

必要條件

  • 執行 Windows 10 或 Windows 11 的電腦

  • 啟用中的 Azure 訂用帳戶。 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶

  • 用於複製存放庫的 Git

  • Azure CLI。 在本教學課程中,您有兩個選項可用來執行 Azure CLI 命令:

    • 使用 Azure Cloud Shell,這是在瀏覽器中執行 CLI 命令的互動式殼層。 建議您使用此選項,因為您不需要安裝任何專案。 如果您是第一次使用 Cloud Shell,請登入 Azure 入口網站。 請遵循 Cloud Shell 快速入門中的步驟來啟動 Cloud Shell選取 Bash 環境
    • 您可以選擇性地在本機電腦上執行 Azure CLI。 如果已安裝 Azure CLI,請執行 az upgrade 以將 CLI 和擴充功能升級至目前的版本。 若要安裝 Azure CLI,請參閱 安裝 Azure CLI
  • 硬體

準備開發環境

若要設定開發環境,請先複製 GitHub 存放庫,其中包含教學課程所需的所有資產。 然後,您會安裝一組程序設計工具。

複製存放庫

複製下列存放庫,以下載檔的所有範例裝置程式代碼、設定腳本和離線版本。 如果您先前在另一個教學課程中複製此存放庫,就不需要再執行此存放庫。

若要複製存放庫,請執行下列命令:

git clone --recursive https://github.com/eclipse-threadx/getting-started.git

安裝工具

複製的存放庫包含安裝文本,可安裝及設定所需的工具。 如果您在另一個內嵌裝置教學課程中安裝這些工具,則不需要再次執行。

注意

安裝文稿會安裝下列工具:

若要安裝工具:

  1. 從 檔案總管,流覽至存放庫中的下列路徑,然後執行名為 get-toolchain.bat 的設定腳本:

    getting-started\tools\get-toolchain.bat

  2. 安裝之後,開啟新的控制台視窗,以辨識安裝腳本所做的組態變更。 使用此主控台來完成教學課程中的其餘程序設計工作。 您可以使用 Windows CMD、PowerShell 或 Git Bash for Windows。

  3. 執行下列程式代碼以確認已安裝 CMake 3.14 版或更新版本。

    cmake --version
    

建立雲端元件

建立 IoT 中樞

您可以使用 Azure CLI 來建立 IoT 中樞,以處理裝置的事件和傳訊。

若要建立IoT中樞:

  1. 啟動 CLI 應用程式。 若要在此快速入門的其餘部分執行 CLI 命令,請複製命令語法、將其貼到 CLI 應用程式、編輯變數值,然後按 Enter 鍵。

    • 如果您使用 Cloud Shell,請以滑鼠右鍵按兩下 Cloud Shell 的連結,然後選取選項以在新索引卷標中開啟。
    • 如果您在本機使用 Azure CLI,請啟動 CLI 控制台應用程式並登入 Azure CLI。
  2. 執行 az extension add 以安裝或升級 azure-iot 擴充功能至目前的版本。

    az extension add --upgrade --name azure-iot
    
  3. 執行 az group create 命令以建立資源群組。 下列命令會在 centralus 區域中建立名為 MyResourceGroup的資源群組。

    注意

    您可以選擇性地設定替代 location的 。 若要查看可用的位置,請執行 az account list-locations

    az group create --name MyResourceGroup --location centralus
    
  4. 執行 az iot hub create 命令以建立IoT中樞。 建立IoT中樞可能需要幾分鐘的時間。

    YourIotHubName。 將程式代碼中的這個佔位元取代為您IoT中樞選擇的名稱。 IoT 中樞名稱在 Azure 中必須全域是唯一的。 本快速入門的其餘部分會使用此佔位符來代表您唯一的IoT中樞名稱。

    參數 --sku F1 會在免費層中建立IoT中樞。 免費層中樞具有有限的功能集,並用於概念證明應用程式。 如需 IoT 中樞 層、功能和定價的詳細資訊,請參閱 Azure IoT 中樞 定價

    az iot hub create --resource-group MyResourceGroup --name {YourIoTHubName} --sku F1 --partition-count 2
    
  5. 建立IoT中樞之後,請在控制台中檢視 JSON 輸出,並複製 hostName 值以在後續步驟中使用。 值 hostName 看起來像下列範例:

    {Your IoT hub name}.azure-devices.net

設定IoT總管

在本快速入門的其餘部分,您會使用IoT Explorer向IoT中樞註冊裝置、檢視裝置屬性和遙測,以及將命令傳送至您的裝置。 在本節中,您會將 IoT Explorer 設定為連線到您所建立的 IoT 中樞,以及從公用模型存放庫讀取隨插即用模型。

若要將連線新增至IoT中樞:

  1. 安裝 Azure IoT Explorer。 此工具是一種跨平臺公用程式,可用來監視和管理 Azure IoT 資源。

  2. 在您的 CLI 應用程式中,執行 az iot hub connection-string show 命令,以取得 IoT 中樞的 連接字串。

    az iot hub connection-string  show --hub-name {YourIoTHubName}
    
  3. 複製不含周圍引號字元的 連接字串。

  4. 在 Azure IoT 總管中,選取 左側功能表上的 [IoT 中樞 ]。

  5. 選取 [+ Add connection] \(+ 新增連線\)。

  6. 將 連接字串 貼到 [連線 ion 字串] 方塊中。

  7. 選取 [儲存]。

    在 IoT Explorer 中新增連線的螢幕快照。

如果連線成功,IoT Explorer 會切換至 [ 裝置 ] 檢視。

若要新增公用模型存放庫:

  1. 在 [IoT 總管] 中,選取 [首頁 ] 以返回首頁檢視。

  2. 在左側功能表上,選取 [IoT 隨插即用 設定],然後從下拉功能表中選取 [+新增],然後選取 [公用存放庫]。

  3. 在的公用模型存放庫 https://devicemodels.azure.com會出現專案。

    在 IoT Explorer 中新增公用模型存放庫的螢幕快照。

  4. 選取 [儲存]。

註冊裝置

在本節中,您會建立新的裝置實例,並將其註冊為您建立的IoT中樞。 您會使用新註冊裝置的連線資訊,在稍後的章節中安全地連線您的實體裝置。

若要註冊裝置:

  1. 從IoT總管的主檢視中,選取 [IoT 中樞]。

  2. 您先前新增的連接應該會出現。 選取 連線屬性下方的 [檢視此中樞 中的裝置]。

  3. 選擇[+ 新增] 並輸入裝置的裝置識別碼;例如 mydevice。 讓所有其他屬性保持相同。

  4. 選取 建立

    Azure IoT Explorer 裝置身分識別的螢幕快照。

  5. 使用 [複製] 按鈕來複製 [裝置標識符] 和 [主鍵] 字段。

在繼續下一節之前,請將從先前步驟擷取的每個值儲存到安全的位置。 您會在下一節使用這些值來設定您的裝置。

  • hostName
  • deviceId
  • primaryKey

準備裝置

若要將 MXCHIP DevKit 連線至 Azure,您可以修改 Wi-Fi 和 Azure IoT 設定的組態檔、重建映像,然後將映射刷新至裝置。

新增設定

  1. 在文字編輯器開啟下列檔案:

    getting-started\MXChip\AZ3166\app\azure_config.h

  2. 將下列程式代碼行批註到檔案頂端附近,如下所示:

    // #define ENABLE_DPS
    
  3. 將Wi-Fi常數設定為來自本機環境的下列值。

    固定名稱
    WIFI_SSID {您的 Wi-Fi SSID}
    WIFI_PASSWORD {您的 Wi-Fi 密碼}
    WIFI_MODE {檔案中的其中一個列舉 Wi-Fi 模式值}
  4. 將 Azure IoT 裝置資訊常數設定為您在建立 Azure 資源之後儲存的值。

    固定名稱
    IOT_HUB_HOSTNAME {您的主機名值}
    IOT_HUB_DEVICE_ID {您的裝置標識符值}
    IOT_DEVICE_SAS_KEY {您的主鍵值}
  5. 儲存並關閉檔案。

建置映像

  1. 在您的主控台或 檔案總管 中,執行腳本rebuild.bat下列路徑來建置映像:

    getting-started\MXChip\AZ3166\tools\rebuild.bat

  2. 建置完成之後,請確認二進位檔已在下列路徑中建立:

    getting-started\MXChip\AZ3166\build\app\mxchip_azure_iot.bin

閃爍影像

  1. 在 MXCHIP DevKit 上,找出 [ 重設 ] 按鈕和 Micro USB 埠。 您可以在下列步驟中使用這些元件。 兩者都會在下圖中反白顯示:

    在 MXChip devkit 面板上找出重要元件

  2. 連線 MICRO USB 纜線到 MXCHIP DevKit 上的 Micro USB 連接埠,然後將它連接到您的電腦。

  3. 在 檔案總管 中,尋找您在上一節中建立的二進位檔。

  4. 複製二進位檔 mxchip_azure_iot.bin

  5. 在 檔案總管 中,尋找連線到您電腦的 MXCHIP DevKit 裝置。 裝置會以磁碟驅動器標籤 AZ3166 在您的系統上顯示為磁碟驅動器。

  6. 將二進位檔貼到 MXCHIP Devkit 的根資料夾中。 閃爍會在幾秒鐘內自動啟動並完成。

    注意

    在閃爍過程中,MXCHIP DevKit 上的綠色 LED 切換。

確認裝置連線詳細數據

您可以使用 Termite 應用程式來監視通訊,並確認您的裝置已正確設定。

  1. 啟動 Termite

    提示

    如果您無法將 Termite 連線到您的 devkit,請安裝 ST-LINK 驅動程式 ,然後再試一次。 如需其他步驟,請參閱 疑難解答

  2. 選取設定

  3. 在 [ 序列埠設定 ] 對話框中,檢查下列設定,並視需要更新:

    • 包速率:115,200
    • :MXCHIP DevKit 所連線的埠。 如果下拉式清單中有多個埠選項,您可以找到要使用的正確埠。 開啟 Windows 裝置管理員,並檢視 [埠] 以識別要使用的埠。

    Termite 應用程式中序列埠設定的螢幕快照

  4. 選取 [確定]。

  5. 按下裝置上的 [重 ] 按鈕。 按鈕會在裝置上加上標籤,並位於 Micro USB 連接器附近。

  6. Termite 應用程式中,檢查下列檢查點值,以確認裝置已初始化並連線至 Azure IoT。

     Starting Azure thread
    
    
     Initializing WiFi
         MAC address: ******************
     SUCCESS: WiFi initialized
    
     Connecting WiFi
         Connecting to SSID 'iot'
         Attempt 1...
     SUCCESS: WiFi connected
    
     Initializing DHCP
         IP address: 192.168.0.49
         Mask: 255.255.255.0
         Gateway: 192.168.0.1
     SUCCESS: DHCP initialized
    
     Initializing DNS client
         DNS address: 192.168.0.1
     SUCCESS: DNS client initialized
    
     Initializing SNTP time sync
         SNTP server 0.pool.ntp.org
         SNTP time update: Jan 4, 2023 22:57:32.658 UTC
     SUCCESS: SNTP initialized
    
     Initializing Azure IoT Hub client
         Hub hostname: ***.azure-devices.net
         Device id: mydevice
         Model id: dtmi:eclipsethreadx:devkit:gsgmxchip;2
     SUCCESS: Connected to IoT Hub
    
     Receive properties: {"desired":{"$version":1},"reported":{"deviceInformation":{"__t":"c","manufacturer":"MXCHIP","model":"AZ3166","swVersion":"1.0.0","osName":"Eclipse ThreadX","processorArchitecture":"Arm Cortex M4","processorManufacturer":"STMicroelectronics","totalStorage":1024,"totalMemory":128},"ledState":false,"telemetryInterval":{"ac":200,"av":1,"value":10},"$version":4}}
     Sending property: $iothub/twin/PATCH/properties/reported/?$rid=3{"deviceInformation":{"__t":"c","manufacturer":"MXCHIP","model":"AZ3166","swVersion":"1.0.0","osName":"Eclipse ThreadX","processorArchitecture":"Arm Cortex M4","processorManufacturer":"STMicroelectronics","totalStorage":1024,"totalMemory":128}}
     Sending property: $iothub/twin/PATCH/properties/reported/?$rid=5{"ledState":false}
     Sending property: $iothub/twin/PATCH/properties/reported/?$rid=7{"telemetryInterval":{"ac":200,"av":1,"value":10}}
    
     Starting Main loop
     Telemetry message sent: {"humidity":31.01,"temperature":25.62,"pressure":927.3}.
     Telemetry message sent: {"magnetometerX":177,"magnetometerY":-36,"magnetometerZ":-346.5}.
     Telemetry message sent: {"accelerometerX":-22.5,"accelerometerY":0.54,"accelerometerZ":1049.01}.
     Telemetry message sent: {"gyroscopeX":0,"gyroscopeY":0,"gyroscopeZ":0}.
    

讓 Termite 保持開啟,以在下列步驟中監視裝置輸出。

檢視裝置屬性

您可以使用 Azure IoT 總管來檢視和管理裝置的屬性。 在本節和下列各節中,您會使用 IoT Explorer 中浮出水面的 隨插即用 功能,來管理 MXCHIP DevKit 並與其互動。 這些功能依賴針對公用模型存放庫中 MXCHIP DevKit 發行的裝置模型。 您已將 IoT Explorer 設定為在本教學課程稍早搜尋此存放庫的裝置模型。 您可以從IoT Explorer中裝置窗格的左側功能表中選取動作,而不需使用隨插即用來執行許多動作。 不過,使用隨插即用通常會提供增強的體驗。 IoT Explorer 可以讀取隨插即用裝置所指定的裝置型號,並顯示該裝置特有的資訊。

若要在IoT總管中存取裝置 IoT 隨插即用元件:

  1. 從IoT總管的主檢視中,選取 [IoT 中樞],然後選取 [ 檢視此中樞中的裝置]。

  2. 選取您的裝置。

  3. 選取 IoT 隨插即用元件

  4. 選取 [預設元件]。 IoT 總管會顯示在裝置上實作的 IoT 隨插即用元件。

    IoT Explorer 中 MXCHIP DevKit 預設元件的螢幕快照

  5. 在 [ 介面] 索引標籤上,檢視裝置型號 [描述] 中的 JSON 內容。 JSON 包含裝置模型中每個 IoT 隨插即用元件的組態詳細數據。

    IoT Explorer 中的每個索引標籤都會對應至裝置模型中的其中一個 IoT 隨插即用元件。

    定位字元 類型 姓名 描述
    介面 介面 MXCHIP Getting Started Guide MXCHIP DevKit 的範例模型
    屬性 (只讀) 屬性 ledState LED 的目前狀態
    屬性 (可寫入) 屬性 telemetryInterval 裝置傳送遙測的間隔
    命令 Command setLedState 開啟或關閉LED

若要使用 Azure IoT Explorer 檢視裝置屬性:

  1. 選取 [ 屬性][可寫入] 索引標籤。它會顯示遙測傳送的間隔。

  2. telemetryInterval將 變更為 5,然後選取 [更新所需的值]。 您的裝置現在會使用此間隔來傳送遙測。

    在IoT總管中設定 MXCHIP DevKit 遙測間隔的螢幕快照

  3. IoT Explorer 會以通知回應。 您也可以在 Termite 中觀察更新。

  4. 將遙測間隔設定回 10。

若要使用 Azure CLI 檢視裝置屬性:

  1. 執行 az iot hub device-twin show 命令。

    az iot hub device-twin show --device-id mydevice --hub-name {YourIoTHubName}
    
  2. 在主控台輸出中檢查裝置的屬性。

檢視遙測

使用 Azure IoT Explorer,您可以檢視從裝置到雲端的遙測流程。 您可以選擇性地使用 Azure CLI 來執行相同的工作。

若要在 Azure IoT Explorer 中檢視遙測:

  1. 從 IoT 總管中裝置的 [IoT 隨插即用 元件 [預設元件] 窗格中,選取 [遙測] 索引卷標。確認 [使用內建事件中樞] 設定為 []。

  2. 選取 [開始]。

  3. 當裝置將訊息傳送至雲端時,檢視遙測。

    IoT Explorer 中裝置遙測的螢幕快照

    注意

    您也可以使用 Termite 應用程式來監視來自裝置的遙測。

  4. 選取 [ 顯示模型化事件 ] 複選框,以裝置型號所指定的數據格式檢視事件。

    IoT Explorer 中模型化遙測事件的螢幕快照

  5. 選取 [ 停止 ] 以結束接收事件。

若要使用 Azure CLI 檢視裝置遙測:

  1. 執行 az iot hub monitor-events 命令。 使用您先前在 Azure IoT 中為您的裝置和 IoT 中樞建立的名稱。

     az iot hub monitor-events --device-id mydevice --hub-name {YourIoTHubName}
    
  2. 在控制台中檢視 JSON 輸出。

     {
         "event": {
             "origin": "mydevice",
             "module": "",
             "interface": "dtmi:eclipsethreadx:devkit:gsgmxchip;1",
             "component": "",
             "payload": "{\"humidity\":41.21,\"temperature\":31.37,\"pressure\":1005.18}"
         }
     }
    
  3. 選取 CTRL+C 以結束監視。

在裝置上呼叫直接方法

您也可以使用 Azure IoT Explorer 呼叫已在裝置上實作的直接方法。 直接方法具有名稱,而且可以選擇性地擁有 JSON 承載、可設定的連線和方法逾時。 在本節中,您會呼叫開啟或關閉 LED 的方法。 您可以選擇性地使用 Azure CLI 來執行相同的工作。

若要在 Azure IoT Explorer 中呼叫方法:

  1. 從 IoT 總管中裝置的 [IoT 隨插即用元件 [預設元件] 窗格中,選取 [命令] 索引標籤。

  2. 針對 setLedState 命令,將狀態設定為 true

  3. 選取 [ 傳送] 命令。 您應該會在IoT總管中看到通知,而裝置上的黃色使用者LED燈應該開啟。

    在 IoT Explorer 中呼叫 setLedState 方法的螢幕快照

  4. 將狀態設定為 false,然後選取 [傳送] 命令。 黃色的使用者 LED 應該關閉。

  5. 您可以選擇性地檢視 Termite 中的輸出,以監視方法的狀態。

若要使用 Azure CLI 呼叫方法:

  1. 執行 az iot hub invoke-device-method 命令,並指定方法名稱和承載。 針對此方法,將設定 method-payloadtrue 開啟LED,並將它設定為 false 關閉。

    az iot hub invoke-device-method --device-id mydevice --method-name setLedState --method-payload true --hub-name {YourIoTHubName}
    

    CLI 主控台會顯示裝置上方法呼叫的狀態,其中 204 表示成功。

    {
      "payload": {},
      "status": 200
    }
    
  2. 請檢查您的裝置以確認 LED 狀態。

  3. 檢視 Termite 終端機以確認輸出訊息:

     Receive direct method: setLedState
         Payload: true
     LED is turned ON
     Device twin property sent: {"ledState":true}
    

疑難排解和偵錯

如果您在建置裝置程式代碼、閃爍裝置或連線時遇到問題,請參閱 疑難解答

如需對應用程式進行偵錯,請參閱 使用Visual StudioCode進行偵錯。

清除資源

如果您不再需要在本快速入門中建立的 Azure 資源,您可以使用 Azure CLI 來刪除資源群組及其所有資源。

重要

刪除資源群組是無法回復的動作。 資源群組及其中包含的所有資源都會永久刪除。 請確定您不會不小心刪除錯誤的資源群組或資源。

若要依名稱移除資源群組:

  1. 執行 az group delete 命令。 此命令會移除資源群組、IoT 中樞,以及您建立的裝置註冊。

    az group delete --name MyResourceGroup
    
  2. 執行 az group list 命令以確認資源群組已刪除。

    az group list
    

下一步

在本教學課程中,您已建置包含 Eclipse ThreadX 範例程式代碼的自定義映像,然後將映像刷新至 MXCHIP DevKit 裝置。 您也使用 Azure CLI 和/或 IoT 總管來建立 Azure 資源、安全地將 MXCHIP DevKit 連線至 Azure、檢視遙測,以及傳送訊息。

在下一個步驟中,探索下列文章,以深入瞭解內嵌開發選項。

Eclipse ThreadX 為 OEM 提供元件來保護通訊,並使用基礎 MCU/MPU 硬體保護機制建立程式碼和數據隔離。 不過,每個 OEM 最終都會負責確保其裝置符合不斷演進的安全性需求。