Compartir vía


Obtención de la salida de depuración de dispositivos de Azure Sphere

Importante

Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).

Al desarrollar una solución de IoT, a menudo debe tener acceso a la salida de depuración desde dispositivos. Aunque esto se puede lograr a través de una conexión de depuración a Visual Studio/Code (pero también se puede lograr desde la línea de comandos), es posible que también tenga que ver la salida de depuración de los dispositivos que no están conectados a Visual Studio/Code. Estos dispositivos pueden ejecutar pruebas a largo plazo o, posiblemente, incluso implementarse en producción. Hay varias opciones para obtener acceso a los datos de depuración:

  • Obtención de la salida de depuración de un dispositivo conectado a un equipo de desarrollo
  • Obtención de la salida de depuración de un dispositivo no conectado a un equipo de desarrollo
  • Registro en almacenamiento externo
  • Registro en Azure

Obtención de la salida de depuración de un dispositivo conectado a un equipo de desarrollo

Problema: ¿Cómo obtener la salida de depuración al depurar mediante Visual Studio/Visual Code?

Opciones:

  • Aplicación de alto nivel

    Una aplicación de alto nivel de Azure Sphere puede usar la API de Log_Debug para enviar la salida de depuración con formato de estilo printf a un equipo conectado durante la depuración. Esta salida se puede ver mediante Visual Studio o la ventana de depuración de Visual Studio Code, o desde la línea de comandos.

    Es posible que quiera considerar la posibilidad de configurar marcas de detalle de depuración en la aplicación y usar definiciones de compilación de CMake para controlar la cantidad de salida de depuración que se muestra cuando se ejecuta la aplicación. En el archivo CMakeLists.txt puede crear una definición de tiempo de compilación:

    add_compile_definitions(DEBUG_FLAG)

    En el código de aplicación de alto nivel, puede aumentar o disminuir la cantidad de salida de depuración mostrada por la aplicación mediante #ifdef, por ejemplo:

    #ifdef DEBUG_FLAG
        Log_Debug("My Message\n");
    #endif
  • Aplicación con respuesta en tiempo real

    Una aplicación con respuesta en tiempo real de Azure Sphere (que se ejecuta en uno de los núcleos M4) puede escribir información de depuración o registro en un UART de transmisión de M4 dedicado. Esto requiere un adaptador USB/serie, como un amigo FTDI, y un emulador de terminal.

    El ejemplo de Hola mundo de Azure Sphere muestra cómo imprimir en el UART de depuración de M4.

    También hay aplicaciones de ejemplo disponibles en CodeThink y MediaTek:

    Las definiciones de tiempo de compilación de marcas de depuración también se pueden usar en aplicaciones con respuesta en tiempo real (M4).

  • Uso de comunicaciones entre núcleos para enviar el estado desde una aplicación con respuesta en tiempo real a una aplicación de alto nivel

    Si va a compilar un sistema que combina una aplicación de alto nivel y con respuesta en tiempo real, es posible que quiera usar la aplicación de alto nivel para registrar el estado del sistema para ambas aplicaciones. Las comunicaciones entre núcleos se pueden usar para esto: el ejemplo de comunicación entre núcleos de Azure Sphere implementa una interfaz sencilla para pasar un mensaje entre una aplicación con respuesta en tiempo real y de alto nivel.

    En este módulo de aprendizaje de Azure Sphere se muestra cómo usar Azure Sphere y Azure RTOS, combinados con un modelo de mensajería entre núcleos para pasar mensajes personalizados entre los núcleos.

Obtención de la salida de depuración de un dispositivo no conectado a un equipo de desarrollo

Problema: ¿Cómo registrar la salida de depuración cuando el dispositivo no está conectado a un equipo de desarrollo?

Opciones:

  • Enviar salida de depuración a través de la red o un UART

    Obtener información de registro de depuración cuando un dispositivo está conectado a un equipo de desarrollo es bastante sencillo. Sin embargo, es posible que también quiera recopilar información de depuración o registro cuando un dispositivo no está conectado a un equipo. Por ejemplo, puede tener un conjunto de dispositivos que ejecutan pruebas a largo plazo.

    Si los dispositivos están conectados a una red, es posible que desee enviar la salida de depuración a través de la red a una aplicación que pueda recopilar y analizar la información. Esta aplicación de la Galería de Azure Sphere muestra cómo invalidar el comportamiento predeterminado de Log_Debug para enviar y recibir esa salida a través de un socket UDP.

    Tenga en cuenta que el mecanismo usado para invalidar la aplicación de alto nivel predeterminado Log_Debug comportamiento también se puede usar para enviar la información del registro de depuración a otros lugares, por ejemplo, para generar los datos en uno de los UART de Azure Sphere. Puede usar este ejemplo de UART como referencia para combinarlo con la aplicación UDPDebugLog Gallery para registrar los mensajes en un UART.

  • Envío de la salida de depuración a Azure IoT Hub/Azure IoT Central

    Aunque la salida de depuración puede ser útil para diagnosticar problemas a medida que se producen, también puede ser útil almacenar la información de telemetría o registro de un dispositivo para su posterior procesamiento.

    La configuración de una instancia de Azure IoT Hub o Azure IoT Central proporciona un punto de conexión para enviar datos de telemetría de dispositivos que se pueden usar como parte de la lógica de negocios, también puede enviar información de registro o estado del dispositivo que se puede tratar por separado de los datos de telemetría o negocio.

    • Azure IoT Hub

      La instancia de Azure IoT Hub podría configurarse para enviar datos a una instancia de Azure Database for Storage/Analysis, es posible que también desee filtrar los mensajes, que se pueden lograr a través de EventHub y una función de Azure.

      Para Azure IoT Hub, puede enviar datos a una función de Azure que, a continuación, puede procesar los mensajes. En el artículo Desencadenador de Azure IoT Hub para Azure Functions se explica cómo vincular una función de Azure a una instancia de Azure IoT Hub.

    • Azure IoT Central

      Azure IoT Central incluye la capacidad de exportar continuamente los datos a varios puntos de conexión, entre los que se incluyen:

      • Azure Event Hubs
      • Cola de Azure Service Bus
      • Tema de Azure Service Bus
      • Azure Blob Storage
      • Webhook

      El webHook es un punto de conexión de API REST que se crea, podría ser una función de Azure.

    Tenga en cuenta que es posible que desee filtrar los mensajes de la función de Azure en función del identificador de dispositivo que envía los datos, puede obtener el identificador de dispositivo mediante el código siguiente en la función de 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 Hub y Azure IoT Central admiten dispositivos gemelos, que incluye el estado deseado (establecido en la aplicación IoT Hub/Central) y el estado notificado (estado del dispositivo). Puede usar Azure IoT Hub/Central Device Twin para establecer un estado deseado para los detalles de los datos de registro (aumentar o disminuir la frecuencia de registro o la riqueza de los datos de registro). En el ejemplo de Azure IoT se muestra cómo controlar los cambios del dispositivo gemelo Desired State .

Registro de datos en el almacenamiento

Azure Sphere admite hasta 64 KB de almacenamiento mutable para una aplicación de alto nivel, que se puede usar para conservar la configuración, el estado de la aplicación u otros datos, los desarrolladores de aplicaciones son responsables de serializar o deserializar datos para almacenar en mutable: la Galería de Azure Sphere incluye un proyecto que muestra cómo usar un par clave-valor (diccionario) para escribir o leer el estado en almacenamiento mutable (hasta 64 KB en función de cómo se configure el manifiesto de aplicación).

Es posible que quiera escribir más de 64 KB de datos de registro o estado en algún tipo de almacenamiento externo, esto puede ser útil para los dispositivos que tienen conectividad intermitente o necesitan almacenar o recuperar más de 64 KB de datos.

Una opción consiste en agregar almacenamiento externo, quizás mediante la memoria flash SPI para almacenar los datos: este proyecto usa SPI flash para almacenar una actualización inalámbrica para un dispositivo de bajada y se podría modificar para admitir el registro de datos de telemetría y estado desde una aplicación de Azure Sphere.