Azure Sphere 디바이스 디버그 출력 가져오기
Important
Azure Sphere(레거시) 설명서입니다. Azure Sphere(레거시)는 2027년 9월 27일에 사용 중지되며 사용자는 이 시간까지 Azure Sphere(통합)로 마이그레이션해야 합니다. TOC 위에 있는 버전 선택기를 사용하여 Azure Sphere(통합) 설명서를 볼 수 있습니다.
IoT 솔루션을 개발할 때 디바이스에서 출력을 디버그할 수 있는 액세스 권한이 있어야 하는 경우가 많습니다. Visual Studio/Code에 대한 디버그 연결을 통해 수행할 수 있지만(명령줄에서도 수행할 수 있음) Visual Studio/Code에 연결되지 않은 디바이스에 대한 디버그 출력을 확인해야 할 수도 있습니다. 이러한 디바이스는 장기 테스트를 실행하거나 프로덕션에 배포될 수도 있습니다. 디버깅 데이터에 액세스하기 위한 몇 가지 옵션이 있습니다.
- 개발 PC에 연결된 디바이스에서 디버그 출력 가져오기
- 개발 PC에 연결되지 않은 디바이스에 대한 디버그 출력 가져오기
- 외부 스토리지에 로깅
- Azure에 로깅
개발 PC에 연결된 디바이스에서 디버그 출력 가져오기
문제: Visual Studio/Visual Code를 사용하여 디버깅할 때 디버그 출력을 가져오는 방법
옵션:
상위 수준 애플리케이션
Azure Sphere 상위 수준 애플리케이션은 Log_Debug API를 사용하여 디버깅 중에 인쇄 스타일 서식이 지정된 디버그 출력을 연결된 PC에 보낼 수 있습니다. 이 출력은 Visual Studio 또는 Visual Studio Code 디버그 창을 사용하거나 명령줄에서 볼 수 있습니다.
애플리케이션에서 디버그 세부 정보 표시 플래그를 설정하고 CMake 컴파일 정의를 사용하여 애플리케이션이 실행될 때 표시되는 디버그 출력의 양을 제어하는 것이 좋습니다. CMakeLists.txt 파일에서 컴파일 시간 정의를 만들 수 있습니다.
add_compile_definitions(DEBUG_FLAG)
상위 수준 애플리케이션 코드에서는 예를 들어 다음을 사용하여
#ifdef
애플리케이션에서 표시하는 디버그 출력의 양을 늘리거나 줄일 수 있습니다.
#ifdef DEBUG_FLAG
Log_Debug("My Message\n");
#endif
실시간 지원 애플리케이션
Azure Sphere 실시간 지원 애플리케이션(M4 코어 중 하나에서 실행)은 전용 M4 전송 전용 UART에 디버그/로그 정보를 쓸 수 있습니다. 이렇게 하려면 FTDI Friend와 같은 USB/직렬 어댑터와 터미널 에뮬레이터가 필요합니다.
Azure Sphere 헬로 월드 샘플에서는 M4 디버그 UART에 인쇄하는 방법을 보여 줍니다.
CodeThink 및 MediaTek에서 사용할 수 있는 샘플 애플리케이션도 있습니다.
디버그 플래그 컴파일 시간 정의는 실시간 지원(M4) 애플리케이션에서도 사용할 수 있습니다.
코어 간 통신을 사용하여 실시간 지원 애플리케이션에서 상위 수준 애플리케이션으로 상태 보내기
상위 수준 및 실시간 지원 애플리케이션을 결합하는 시스템을 빌드하는 경우 상위 수준 애플리케이션을 사용하여 두 애플리케이션에 대한 시스템 상태를 기록할 수 있습니다. 이를 위해 코어 간 통신을 사용할 수 있습니다. Azure Sphere 코어 간 통신 샘플 은 상위 수준 및 실시간 지원 애플리케이션 간에 메시지를 전달하기 위한 간단한 인터페이스를 구현합니다.
이 Azure Sphere 학습 모듈 은 코어 간 메시징 모델과 결합된 Azure Sphere 및 Azure RTOS를 사용하여 코어 간에 사용자 지정 메시지를 전달하는 방법을 보여 줍니다.
개발 PC에 연결되지 않은 디바이스에 대한 디버그 출력 가져오기
문제: 디바이스가 개발 PC에 연결되지 않은 경우 디버그 출력을 기록하는 방법
옵션:
네트워크 또는 UART를 통해 디버깅 출력 보내기
디바이스가 개발 PC에 연결되면 디버그 로그 정보를 얻는 것은 매우 간단합니다. 그러나 디바이스가 PC에 연결되지 않은 경우 디버그/로그 정보를 수집할 수도 있습니다. 예를 들어 장기 테스트를 실행하는 디바이스 집합이 있을 수 있습니다.
디바이스가 네트워크에 연결된 경우 네트워크를 통해 정보를 수집하고 분석할 수 있는 애플리케이션에 디버그 출력을 보낼 수 있습니다. 이 Azure Sphere 갤러리 애플리케이션 은 UDP 소켓을 통해 해당 출력을 보내고 받기 위해 기본 Log_Debug 동작을 재정의하는 방법을 보여 줍니다.
기본 high-evel 애플리케이션 Log_Debug 동작을 재정의하는 데 사용되는 메커니즘을 사용하여 Azure Sphere UART 중 하나에 데이터를 출력하는 등 디버그 로그 정보를 다른 위치로 보낼 수도 있습니다. 이 UART 샘플을 참조로 사용하여 UDPDebugLog 갤러리 애플리케이션과 결합하여 메시지를 UART에 기록할 수 있습니다.
Azure IoT Hub/Azure IoT Central에 디버깅 출력 보내기
디버깅 출력은 문제가 발생할 때 진단하는 데 유용할 수 있지만 후처리를 위해 디바이스에서 원격 분석/로그 정보를 저장하는 것도 유용할 수 있습니다.
Azure IoT Hub 또는 Azure IoT Central의 인스턴스를 설정하면 비즈니스 논리의 일부로 사용할 수 있는 디바이스 원격 분석 데이터를 보낼 수 있는 엔드포인트를 제공하며, 원격 분석/비즈니스 데이터와 별도로 처리할 수 있는 디바이스 상태/로그 정보를 보낼 수도 있습니다.
Azure IoT Hub
스토리지/분석을 위해 Azure Database로 데이터를 보내도록 Azure IoT Hub 인스턴스를 구성할 수 있으며, EventHub 및 Azure Function을 통해 달성할 수 있는 메시지를 필터링할 수도 있습니다.
Azure IoT Hub의 경우 메시지를 처리할 수 있는 Azure Function에 데이터를 보낼 수 있습니다. Azure Functions에 대한 Azure IoT Hub 트리거 문서에서는 Azure Function을 Azure IoT Hub 인스턴스에 연결하는 방법을 설명합니다.
Azure IoT Central
Azure IoT Central 에는 다음을 비롯한 다양한 엔드포인트로 데이터를 지속적으로 내보내는 기능이 포함되어 있습니다.
- Azure Event Hubs
- Azure Service Bus 큐
- Azure Service Bus 항목
- Azure Blob Storage
- 웹후크
WebHook은 사용자가 만든 REST API 엔드포인트이며 Azure 함수일 수 있습니다.
데이터를 보내는 디바이스 ID를 기반으로 Azure Function에서 메시지를 필터링할 수 있습니다. Azure Function에서 다음 코드를 사용하여 디바이스 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은 원하는 상태(IoT Hub/중앙 애플리케이션에서 설정됨) 및 보고된 상태(디바이스의 상태)를 포함하는 Device Twins를 지원합니다. Azure IoT Hub/Central Device Twin을 사용하여 로그 데이터 세부 정보 표시(로깅 빈도 증가/감소 또는 로깅 데이터의 풍부도)에 대해 원하는 상태를 설정할 수 있습니다. Azure IoT 샘플은 디바이스 쌍 Desired State
변경 내용을 처리하는 방법을 보여 줍니다.
스토리지에 데이터 로깅
Azure Sphere는 상위 수준 애플리케이션에 대해 최대 64KB의 변경 가능한 스토리지를 지원하며, 설정, 애플리케이션 상태 또는 기타 데이터를 유지하는 데 사용할 수 있으며, 애플리케이션 개발자는 변경 가능한 스토리지로 데이터를 직렬화/역직렬화하는 작업을 담당합니다. Azure Sphere 갤러리에는 변경 가능한 스토리지에 키/값 쌍(사전)을 사용하여 변경 가능한 스토리지에 쓰기/읽기 상태를 사용하는 방법을 보여 주는 프로젝트가 포함되어 있습니다(애플리케이션 매니페스트 구성 방법에 따라 최대 64KB).
64KB 이상의 로그/상태 데이터를 특정 형태의 외부 스토리지에 쓸 수 있습니다. 이 기능은 간헐적인 연결이 있거나 64KB 이상의 데이터를 저장/검색해야 하는 디바이스에 유용할 수 있습니다.
한 가지 옵션은 SPI 플래시를 사용하여 데이터를 저장하는 외부 스토리지를 추가하는 것입니다. 이 프로젝트는 SPI 플래시를 사용하여 다운스트림 디바이스에 대한 무선 업데이트를 저장하고 Azure Sphere 애플리케이션에서 원격 분석/상태 데이터 로깅을 지원하도록 수정할 수 있습니다.