Azure Sphere デバイスのデバッグ出力の取得
重要
これは Azure Sphere (レガシ) のドキュメントです。 Azure Sphere (レガシ) は 2027 年 9 月 27 日に 再提供されておりユーザーは現時点で Azure Sphere (統合) に移行する必要があります。 TOC の上にある Version セレクターを使用して、Azure Sphere (統合) のドキュメントを表示します。
IoT ソリューションを開発するときは、多くの場合、デバイスからの出力をデバッグするためのアクセス権が必要です。 これは Visual Studio/Code へのデバッグ接続を通じて実現できますが (コマンド ラインから実現することもできます)、Visual Studio/Code に接続されていないデバイスのデバッグ出力を表示する必要がある場合もあります。 このようなデバイスは、長期的なテストを実行しているか、場合によっては運用環境に展開されている可能性があります。 デバッグ データにアクセスするには、いくつかのオプションがあります。
- 開発用 PC に接続されているデバイスからデバッグ出力を取得する
- 開発用 PC に接続されていないデバイスのデバッグ出力の取得
- 外部ストレージへのログ記録
- Azure へのログ記録
開発用 PC に接続されているデバイスからデバッグ出力を取得する
問題: Visual Studio/Visual Code を使用してデバッグするときにデバッグ出力を取得する方法
オプション:
高度なアプリケーション
Azure Sphere の高度なアプリケーションでは、 Log_Debug API を使用して、デバッグ中に printf スタイルの書式設定を使用してデバッグ出力をアタッチされた PC に送信できます。 この出力は、Visual Studio または Visual Studio Code デバッグ ウィンドウを使用して表示するか、コマンド ラインから。
アプリケーションでデバッグ詳細度フラグを設定し、CMake コンパイル定義を使用して、アプリケーションの実行時に表示されるデバッグ出力の量を制御することを検討してください。 CMakeLists.txt ファイルでは、コンパイル時の定義を作成できます。
add_compile_definitions(DEBUG_FLAG)
高度なアプリケーション コードでは、次のように、
#ifdef
を使用して、アプリケーションによって表示されるデバッグ出力の量を増減できます。
#ifdef DEBUG_FLAG
Log_Debug("My Message\n");
#endif
リアルタイム対応アプリケーション
(M4 コアのいずれかで実行されている) Azure Sphere リアルタイム対応アプリケーションは、デバッグ/ログ情報を dedicated M4 送信専用 UARTに書き込むことができます。 これには、 FTDI Friend、 ターミナル エミュレーターなどの USB/シリアル アダプターが必要です。
Azure Sphere Hello World サンプル は、M4 デバッグ UART に出力する方法を示しています。
CodeThink と MediaTek から使用できるサンプル アプリケーションもあります。
デバッグ フラグコンパイル時の定義は、リアルタイム対応 (M4) アプリケーションでも使用できます。
コア間通信を使用してリアルタイム対応アプリケーションから高度なアプリケーションに状態を送信する
高度なリアルタイム対応アプリケーションを組み合わせたシステムを構築する場合は、上位レベルのアプリケーションを使用して、両方のアプリケーションのシステム状態をログに記録することができます。 これにはコア間通信を使用できます。 Azure Sphere Inter-core Communication サンプル は、高レベルとリアルタイム対応のアプリケーション間でメッセージを渡すための単純なインターフェイスを実装しています。
この Azure Sphere 学習モジュール では、Azure Sphere と Azure RTOS を使用し、コア間メッセージング モデルと組み合わせて、コア間でカスタム メッセージを渡す方法を示します。
開発用 PC に接続されていないデバイスのデバッグ出力の取得
問題: デバイスが開発用 PC に接続されていない場合にデバッグ出力をログに記録する方法
オプション:
ネットワークまたは UART 経由でデバッグ出力を送信する
デバイスが開発用 PC に接続されているときにデバッグ ログ情報を取得するのは非常に簡単です。 ただし、デバイスが PC に接続されていない場合は、デバッグ/ログ情報を収集することもできます。 たとえば、一連のデバイスで長期的なテストが実行されている場合があります。
デバイスがネットワークに接続されている場合は、情報を収集して分析できるアプリケーションに、ネットワーク経由でデバッグ出力を送信できます。 この Azure Sphere Gallery アプリケーション は、UDP ソケット経由でその出力を送受信する既定のLog_Debug動作をオーバーライドする方法を示しています。
既定の高レベルアプリケーションのLog_Debug動作をオーバーライドするために使用されるメカニズムを使用して、デバッグ ログ情報を他の場所に送信することもできます。たとえば、Azure Sphere UART のいずれかにデータを出力する場合などです。 この UART サンプル UDPDebugLog ギャラリー アプリケーションと組み合わせてメッセージを UART に記録するための参照として使用できます。
デバッグ出力を Azure IoT Hub/Azure IoT Central に送信する
出力のデバッグは問題が発生したときに診断するのに役立ちますが、後処理のためにデバイスからのテレメトリ/ログ情報を格納する場合にも役立ちます。
Azure IoT Hub または Azure IoT Central のインスタンスを設定すると、ビジネス ロジックの一部として使用できるデバイス テレメトリ データを送信するエンドポイントが提供されます。また、テレメトリ/ビジネス データとは別に扱うことができるデバイスの状態/ログ情報を送信することもできます。
Azure IoT Hub
Azure IoT Hub インスタンスは、ストレージ/分析のために Azure Database にデータを送信するように構成できます。また、EventHub と Azure 関数を使用して実現できるメッセージをフィルター処理することもできます。
Azure IoT Hub の場合は、メッセージを処理できる Azure 関数にデータを送信できます。 Azure Functions の Azure IoT Hub トリガー 記事では、Azure 関数を Azure IoT Hub インスタンスにリンクする方法について説明します。
Azure IoT Central
Azure IoT Central には、次のようなさまざまなエンドポイントにデータを継続的にエクスポートする機能が含まれています。
- Azure Event Hubs
- Azure Service Bus キュー
- Azure Service Bus トピック
- Azure Blob Storage
- Webhook
WebHook は、作成する REST API エンドポイントです。これは Azure 関数である可能性があります。
データを送信しているデバイス ID に基づいて Azure 関数内のメッセージをフィルター処理することもできます。Azure 関数の次のコードを使用してデバイス ID を取得できます。
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 Hub と Azure IoT Central では、 Device Twins がサポートされます。これには、必要な状態 (IoT Hub/Central アプリケーションで設定)、および報告された状態 (デバイスからの状態) が含まれます。 Azure IoT Hub/Central Device Twin を使用して、ログ データの詳細度 (ログの頻度の増減、またはログ データの豊富さ) に必要な状態を設定できます。 Azure IoT サンプルでは、Device Twin Desired State
の変更を処理する方法を示します。
ストレージへのデータのログ記録
Azure Sphere では、高度なアプリケーションに対して最大 64 KB の 不変ストレージ をサポートしています。 これは、設定、アプリケーションの状態、またはその他のデータを保持するために使用できます。アプリケーション開発者は、データを変更可能なストレージにシリアル化/逆シリアル化する役割を担います。Azure Sphere ギャラリーには、キーと値のペア (ディクショナリ) を使用して変更可能なストレージに状態を書き込む方法を示す project が含まれています (アプリケーション マニフェストの構成方法に応じて最大 64 KB)。
64 KB を超えるログ/状態データを何らかの形式の外部ストレージに書き込むことができます。これは、断続的な接続を持つデバイスや、64 KB を超えるデータを格納/取得する必要があるデバイスに役立ちます。
1 つのオプションは、外部ストレージを追加することです。たとえば、SPI フラッシュを使用してデータを格納します。このプロジェクトは SPI フラッシュを使用してダウンストリーム デバイスの Over-the-air 更新プログラムを格納し、Azure Sphere アプリケーションからのテレメトリ/状態データのログ記録をサポートするように変更できます。