Obtención de la salida de depuración del dispositivo Azure Sphere
Al desarrollar una solución de IoT, a menudo necesita 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), también es posible que tenga que ver la salida de depuración para los dispositivos que no están conectados a Visual Studio/Code. Estos dispositivos pueden estar ejecutando pruebas a largo plazo o incluso implementarse en producción. Hay varias opciones para obtener acceso a los datos de depuración:
- Obtener la salida de depuración de un dispositivo conectado a un equipo de desarrollo
- Obtención de la salida de depuración para un dispositivo no conectado a un equipo de desarrollo
- Registro en almacenamiento externo
- Registro en Azure
Obtener la salida de depuración de un dispositivo conectado a un equipo de desarrollo
Problema: ¿Cómo obtener resultados de depuración al depurar con 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 resultados de depuración con formato de estilo printf a un equipo adjunto durante la depuración. Esta salida se puede ver con Visual Studio o Visual Studio Code ventana de depuración, o desde la línea de comandos.
Es posible que desee considerar la configuración de marcas de detalle de depuración en la aplicación y el uso de CMake definiciones de compilación 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 que muestra la aplicación usando
#ifdef
, por ejemplo:
#ifdef DEBUG_FLAG
Log_Debug("My Message\n");
#endif
Aplicación en tiempo real
Una aplicación compatible con Azure Sphere en tiempo real (que se ejecuta en uno de los núcleos M4) puede escribir información de depuración/registro en un UART de solo transmisión M4 dedicado. Esto requiere un adaptador USB/serie, como un amigo FTDI, y un emulador de terminal.
La muestra de Azure Sphere Hola mundo muestra cómo imprimir en el UART de depuración M4.
También hay aplicaciones de ejemplo disponibles de CodeThink y MediaTek:
Las definiciones de tiempo de compilación de marca de depuración también se pueden usar en aplicaciones compatibles con tiempo real (M4).
Uso de comunicaciones entre núcleos para enviar el estado desde una aplicación compatible con tiempo real a una aplicación de alto nivel
Si está creando un sistema que combina una aplicación capaz de alto nivel y en tiempo real, es posible que desee utilizar la aplicación de alto nivel para registrar el estado del sistema para ambas aplicaciones. Para ello se pueden usar comunicaciones entre núcleos: la muestra de comunicación inter-núcleo de Azure Sphere implementa una interfaz sencilla para pasar un mensaje entre una aplicación de alto nivel y capaz en tiempo real.
Este módulo de aprendizaje de Azure Sphere demuestra cómo usar Azure Sphere y Azure RTOS, combinado 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 para 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 pc 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 desee recopilar información de depuración/registro cuando un dispositivo no está conectado a un equipo. Por ejemplo, es posible que tenga un conjunto de dispositivos que ejecuten 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 Azure Sphere Gallery demuestra 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 utilizado para invalidar el comportamiento predeterminado de Log_Debug de la aplicación de evel alto también se puede utilizar para enviar la información del registro de depuración a otros lugares, por ejemplo, para enviar los datos en uno de los Azure Sphere UART. Puede usar este ejemplo de UART como una referencia para combinarla con la aplicación galería UDPDebugLog para registrar los mensajes en un UART.
Enviar 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/registro desde un dispositivo para el posterior procesamiento.
Configurar una instancia de Azure IoT Hub o Azure IoT Central le proporciona un punto de conexión para enviar datos de telemetría del dispositivo que se pueden usar como parte de la lógica de negocio, también puede enviar información de estado o registro del dispositivo que se puede tratar por separado de los datos de telemetría o empresa.
En el ejemplo Registro a Azure se muestra cómo reenviar mensajes de registro como telemetría IoT Hub y almacenarlos en un clúster de Azure Data Explorer para consultas avanzadas.
Azure IoT Hub
Es posible que su Azure IoT Hub instancia se haya configurado para enviar datos a una base de datos de Azure para su almacenamiento o análisis, pero también puede filtrar los mensajes, que se pueden lograr a través de EventHub y una función de Azure.
Por Azure IoT Hub puede enviar datos a una función de Azure que puede procesar los mensajes. El desencadenador de Azure IoT Hub para Azure Functions artículo 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
- Azure Service Bus tema
- Azure Blob Storage
- Webhook
El WebHook es un punto de conexión de LA API de REST que se crea, puede ser una función de Azure.
Tenga en cuenta que es posible que desee filtrar los mensajes de su función de Azure en función del Id. de dispositivo que envía los datos, puede obtener el Id. de dispositivo mediante el siguiente código 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 el estado deseado para el nivel de detalle de los datos de registro (aumentar o disminuir la frecuencia de registro o la riqueza de los datos de registro). La muestra de Azure IoT muestra cómo controlar los cambios en dispositivos gemelos Desired State
.
Registro de datos al almacenamiento
Azure Sphere admite hasta 64 KB de almacenamiento mutable para una aplicación de alto nivel, esto 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/deserializar datos para almacenamiento mutable - La Galería de esferas de Azure incluye un proyecto que muestra cómo usar un par clave/valor (diccionario) para escribir/leer el estado en el almacenamiento mutable (hasta 64 KB dependiendo de cómo esté configurado el manifiesto de la aplicación).
Es posible que quiera escribir más de 64 KB de datos de registro/estado en algún tipo de almacenamiento externo, esto puede ser útil para dispositivos que tienen conectividad intermitente o necesita almacenar o recuperar más de 64 KB de datos.
Una opción es agregar almacenamiento externo, tal vez usando flash SPI para almacenar los datos: este proyecto usa flash SPI para almacenar una actualización sobre el aire para un dispositivo de bajada y podría modificarse para admitir datos de telemetría de registro/estado desde una aplicación de Azure Sphere.