取得 Azure 球體裝置偵錯輸出

開發 IoT 解決方案時,您通常需要能夠從裝置偵錯輸出。 雖然這可以透過 Visual Studio/Code (的偵錯連線 來達成,但也可以從命令列) 達到 此目的,您可能也需要檢視未連線到 Visual Studio/Code 之裝置的偵錯輸出。 這類裝置可能正在執行長期測試,或甚至部署到生產。 有幾個選項可用來存取偵錯資料:

  • 從連接到開發電腦的裝置取得偵錯輸出
  • 取得未連線至開發電腦之裝置的偵錯輸出
  • 記錄到外部儲存空間
  • 記錄至 Azure

從連接到開發電腦的裝置取得偵錯輸出

問題: 如何在使用 Visual Studio/Visual Code 偵錯時取得偵錯輸出?

選項:

  • 高階應用程式

    Azure 球體高層級應用程式可以使用 Log_Debug API,在偵錯期間將印表機樣式格式設定的偵錯輸出傳送至附加的電腦。 您可以使用Visual StudioVisual Studio Code偵錯視窗或命令列檢視此輸出。

    建議您考慮在應用程式中設定偵錯詳細資訊標幟,以及使用 CMake 編譯定義來控制應用程式執行時會顯示多少偵錯輸出。 在 CMakeLists.txt 檔案中,您可以建立編譯時間定義:

    add_compile_definitions(DEBUG_FLAG)

    在您的高階應用程式代碼中,您可以增加或減少應用程式顯示 #ifdef 的偵錯輸出量,例如:

    #ifdef DEBUG_FLAG
        Log_Debug("My Message\n");
    #endif
  • 支援即時功能的應用程式

    Azure 球體的即時應用程式 (在其中一個 M4 核心上執行,) 可以將偵錯/記錄資訊寫入 專用的 M4 僅傳輸 UART。 這需要 USB/Serial 配接器,例如 FTDI Friend終端模擬器

    Azure 球體Hello World範例示範如何列印到 M4 偵錯 UART。

    也有可從 CodeThink 和 MediaTek 取得的範例應用程式:

    偵錯旗標編譯時間定義也可以在支援即時的 (M4) 應用程式中使用。

  • 使用核心間通訊,從支援即時的應用程式將狀態傳送到高階應用程式

    如果您建置的系統結合了高階且支援即時的應用程式,您可能會想要使用高階應用程式來記錄這兩個應用程式的系統狀態。 核心間通訊可用於此功能: Azure 球體間核心通訊範例 會實作簡單的介面,以便在支援高層級和即時的應用程式之間傳遞訊息。

    Azure 球體學習模組 示範如何使用 Azure 球體和 Azure RTOS,結合核心間訊息模型,在核心之間傳遞自訂訊息。

取得未連線至開發電腦之裝置的偵錯輸出

問題: 如何在裝置未連線至開發電腦時記錄偵錯輸出?

選項:

  • 透過網路或 UART 傳送偵錯輸出

    在裝置連線到開發電腦時取得偵錯記錄資訊相當簡單。 不過,當裝置未連線到電腦時,您可能也會想要收集偵錯/記錄資訊。 例如,您可能有一組裝置正在執行長期測試。

    如果您的裝置已連線到網路,您可能會想要透過網路傳送偵錯輸出給可收集和分析資訊的應用程式。 此 Azure 球體圖庫應用程式 示範如何覆寫預設Log_Debug行為,以透過 UDP 套件傳送和接收輸出。

    請注意,用來覆寫預設高畫質應用程式Log_Debug行為的機制也可以用來將偵錯記錄資訊傳送到其他位置,例如,在其中一個 Azure 球體 UART 上輸出資料。 您可以使用此 UART 範例 做為參照,與 UDPDebugLog Gallery 應用程式合併,將您的郵件記錄到 UART。

  • 傳送偵錯輸出至 Azure IoT 中樞/Azure IoT Central

    雖然偵錯輸出對於診斷發生的問題很有用,但從裝置儲存遙測/記錄資訊以進行後續處理也很有用。

    設定Azure IoT 中樞Azure IoT 中樞實例可讓您端點傳送裝置遙測資料,該資料可做為您商業邏輯的一部分,您也可以傳送裝置狀態/記錄資訊,以便與遙測/商務資料分開處理。

    [記錄至 Azure] 範例示範如何將記錄郵件轉寄為IoT 中樞遙測,並將它們儲存在Azure Data Explorer叢集中以進行進階查詢。

    • Azure IoT 中樞

      您的Azure IoT 中樞實例可以設定為傳送資料至 Azure 資料庫以進行儲存/分析,您可能也想要篩選訊息,以便透過 EventHub 和 Azure 函數達成。

      針對Azure IoT 中樞,您可以將資料傳送至 Azure 函數,以便處理郵件。 Azure Functions文章Azure IoT 中樞觸發程式說明如何將 Azure 函數連結至Azure IoT 中樞實例。

    • Azure IoT Central

      Azure IoT 中心 包含持續將資料匯出至各種端點的功能,包括:

      • Azure 事件中樞
      • Azure 服務匯流排佇列
      • Azure 服務匯流排主題
      • Azure Blob 儲存體
      • Webhook

      WebHook 是您建立的 REST API 端點,它可能是 Azure 函數。

    請注意,您可能會想要根據傳送資料的裝置識別碼篩選 Azure 函數中的郵件,您可以在 Azure 函數中使用下列程式碼取得裝置識別碼:

    public static async Task Run(EventData message, ILogger log)
    {
        var deviceId=message.SystemProperties["iothub-connection-device-id"];

        // Code to filter the messages goes here...
    }

Azure IoT 中樞和 Azure IoT 中心支援裝置通訊,包括IoT 中樞/中心應用程式) 中所設定的州 (,以及裝置) 回報的州 (狀態。 您可以使用 Azure IoT 中樞/Central Device Twin 來設定記錄資料詳細資訊 (增加/減少記錄頻率或記錄資料) 豐富度的所需狀態。 Azure IoT 範例示範如何處理裝置雙子星 Desired State 變更。

記錄資料至儲存空間

Azure 球體支援高達 64KB 的 可靜音儲存空間 供高層級應用程式使用, 這可以用來持續進行設定、應用程式狀態或其他資料,應用程式開發人員負責將資料序列化/取消同步處理至可靜音儲存空間 - Azure 球體圖庫包含 的專案 會說明如何使用金鑰/值配對 (字典,) 根據應用程式資訊清單的設定 () 方式,撰寫/讀取到最多 64KB 的可靜音儲存空間狀態。

您可能會想要將超過 64KB 的記錄/狀態資料寫入到某種形式的外部儲存空間,這對有間歇性連線的裝置,或需要儲存/擷取超過 64KB 的資料很有用。

其中一個選項是新增外部儲存空間,或許是使用 SPI 快閃來儲存資料- 此專案 會使用 SPI flash 來儲存下層裝置的無線更新,而且可能會進行修改以支援 Azure 球體應用程式的記錄遙測/狀態資料。