다음을 통해 공유


Azure Sphere 디바이스 디버그 출력 가져오기

IoT 솔루션을 개발할 때 디바이스에서 출력을 디버그할 수 있는 액세스 권한이 있어야 하는 경우가 많습니다. Visual Studio/Code에 대한 디버그 연결을 통해 수행할 수 있지만 명령줄에서도 수행할 수 있지만 Visual Studio/Code에 연결되지 않은 디바이스에 대한 디버그 출력을 확인해야 할 수도 있습니다. 이러한 디바이스는 장기 테스트를 실행하거나 프로덕션에 배포될 수도 있습니다. 디버깅 데이터에 액세스하기 위한 몇 가지 옵션이 있습니다.

  • 개발 PC에 연결된 디바이스에서 디버그 출력 가져오기
  • 개발 PC에 연결되지 않은 디바이스에 대한 디버그 출력 가져오기
  • 외부 스토리지에 로깅
  • Azure에 로깅

개발 PC에 연결된 디바이스에서 디버그 출력 가져오기

문제: Visual Studio/Visual Code를 사용하여 디버깅할 때 디버그 출력을 가져오는 방법

옵션:

  • 상위 수준 애플리케이션

    Azure Sphere 상위 수준 애플리케이션은 Log_Debug API를 사용하여 디버깅 중에 연결된 PC에 printf 스타일 서식이 지정된 디버그 출력을 보낼 수 있습니다. 이 출력은 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 Gallery 애플리케이션 은 UDP 소켓을 통해 해당 출력을 보내고 받기 위해 기본 Log_Debug 동작을 재정의하는 방법을 보여 줍니다.

    기본 high-evel 애플리케이션 Log_Debug 동작을 재정의하는 데 사용되는 메커니즘을 사용하여 Azure Sphere UART 중 하나에 데이터를 출력하는 등 디버그 로그 정보를 다른 위치로 보낼 수도 있습니다. 이 UART 샘플을 참조로 사용하여 UDPDebugLog 갤러리 애플리케이션과 결합하여 메시지를 UART에 기록할 수 있습니다.

  • Azure IoT Hub/Azure IoT Central에 디버깅 출력 보내기

    디버깅 출력은 문제가 발생할 때 진단하는 데 유용할 수 있지만 사후 처리를 위해 디바이스에서 원격 분석/로그 정보를 저장하는 것도 유용할 수 있습니다.

    Azure IoT Hub 또는 Azure IoT Centralinstance 설정하면 비즈니스 논리의 일부로 사용될 수 있는 디바이스 원격 분석 데이터를 보낼 수 있는 엔드포인트를 제공하며, 원격 분석/비즈니스 데이터와 별도로 처리할 수 있는 디바이스 상태/로그 정보를 보낼 수도 있습니다.

    Azure로 로깅 샘플은 로그 메시지를 IoT Hub 원격 분석으로 전달하고 고급 쿼리를 위해 Azure Data Explorer 클러스터 내에 저장하는 방법을 보여 줍니다.

    • Azure IoT Hub

      스토리지/분석을 위해 Azure Database로 데이터를 보내도록 Azure IoT Hub instance 구성할 수 있으며 EventHub 및 Azure Function을 통해 수행할 수 있는 메시지를 필터링할 수도 있습니다.

      Azure IoT Hub 경우 Azure Function에 데이터를 보내 메시지를 처리할 수 있습니다. Azure Functions 대한 Azure IoT Hub 트리거 문서에서는 Azure Function을 Azure IoT Hub instance 연결하는 방법을 설명합니다.

    • 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 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/중앙 디바이스 쌍을 사용하여 로그 데이터 세부 정보 표시(로깅 빈도 증가/감소 또는 로깅 데이터의 풍부도)에 대해 원하는 상태를 설정할 수 있습니다. Azure IoT 샘플은 디바이스 쌍 Desired State 변경 내용을 처리하는 방법을 보여 줍니다.

스토리지에 데이터 로깅

Azure Sphere는 상위 수준 애플리케이션에 대해 최대 64KB의 변경 가능한 스토리지 를 지원하며, 설정, 애플리케이션 상태 또는 기타 데이터를 유지하는 데 사용할 수 있으며, 애플리케이션 개발자는 변경 가능한 스토리지로 데이터를 직렬화/역직렬화하는 작업을 담당합니다. Azure Sphere 갤러리에는 키/값 쌍(사전)을 사용하여 변경 가능한 스토리지(최대 64KB)에 대한 쓰기/읽기 상태를 사용하는 방법을 보여 주는 프로젝트가 포함되어 있습니다.(애플리케이션 매니페스트 구성 방법에 따라 최대 64KB).

64KB 이상의 로그/상태 데이터를 특정 형태의 외부 스토리지에 쓸 수 있습니다. 이는 일시적인 연결이 있거나 64KB 이상의 데이터를 저장/검색해야 하는 디바이스에 유용할 수 있습니다.

한 가지 옵션은 SPI 플래시를 사용하여 데이터를 저장하는 외부 스토리지를 추가하는 것입니다. 이 프로젝트는 SPI 플래시를 사용하여 다운스트림 디바이스에 대한 무선 업데이트를 저장하고 Azure Sphere 애플리케이션에서 원격 분석/상태 데이터 로깅을 지원하도록 수정할 수 있습니다.