Obtendo a saída de depuração do dispositivo do Azure Sphere
Importante
Esta é a documentação do Azure Sphere (herdado). O Azure Sphere (herdado) será desativado em 27 de setembro de 2027 e os usuários devem migrar para o Azure Sphere (integrado) até esse momento. Use o seletor de versão localizado acima do sumário para exibir a documentação do Azure Sphere (Integrado).
Ao desenvolver uma solução de IoT, você geralmente precisa ter acesso à saída de depuração dos dispositivos. Embora isso possa ser obtido por meio de uma conexão de depuração com o Visual Studio/Code (mas também pode ser obtido na linha de comando), talvez você também precise exibir a saída de depuração para dispositivos que não estão conectados ao Visual Studio/Code. Esses dispositivos podem estar executando testes de longo prazo ou possivelmente até implantados na produção. Há várias opções para obter acesso aos dados de depuração:
- Obtendo a saída de depuração de um dispositivo conectado a um computador de desenvolvimento
- Obtendo a saída de depuração para um dispositivo não conectado a um computador de desenvolvimento
- Registro em log no armazenamento externo
- Registrando no Azure
Obtendo a saída de depuração de um dispositivo conectado a um computador de desenvolvimento
Problema: Como obter a saída de depuração ao depurar usando o Visual Studio/Visual Code?
Opções:
Aplicação de alto nível
Um aplicativo de alto nível do Azure Sphere pode usar a API do Log_Debug para enviar a saída de depuração com formatação de estilo printf para um computador anexado durante a depuração. Essa saída pode ser exibida usando a janela de depuração do Visual Studio ou do Visual Studio Code ou na linha de comando.
Talvez você queira considerar a configuração de sinalizadores de detalhamento de depuração em seu aplicativo e o uso de definições de compilação do CMake para controlar a quantidade de saída de depuração exibida quando o aplicativo é executado. No arquivo CMakeLists.txt, você pode criar uma definição de tempo de compilação:
add_compile_definitions(DEBUG_FLAG)
No código do aplicativo de alto nível, você pode aumentar ou diminuir a quantidade de saída de depuração exibida pelo aplicativo usando
#ifdef
, por exemplo:
#ifdef DEBUG_FLAG
Log_Debug("My Message\n");
#endif
Aplicativo com capacidade em tempo real
Um aplicativo com capacidade em tempo real do Azure Sphere (em execução em um dos núcleos M4) pode gravar informações de depuração/log em um UART M4 somente transmissão dedicado. Isso requer um adaptador USB/Serial, como um FTDI Friend, e um emulador de terminal.
O exemplo Hello World do Azure Sphere demonstra como imprimir no UART de depuração M4.
Também há exemplos de aplicativos disponíveis no CodeThink e na MediaTek:
As definições de tempo de compilação do sinalizador de depuração também podem ser usadas em aplicativos com capacidade para tempo real (M4).
Usando comunicações entre núcleos para enviar estado de um aplicativo com capacidade em tempo real para um aplicativo de alto nível
Se você estiver criando um sistema que combina um aplicativo de alto nível e com capacidade de tempo real, talvez queira usar o aplicativo de alto nível para registrar o estado do sistema para ambos os aplicativos. As comunicações entre núcleos podem ser usadas para isso — o exemplo de comunicação entre núcleos do Azure Sphere implementa uma interface simples para passar uma mensagem entre um aplicativo de alto nível e com capacidade em tempo real.
Este módulo de aprendizagem do Azure Sphere demonstra como usar o Azure Sphere e o Azure RTOS, combinados com um modelo de mensagens entre núcleos para passar mensagens personalizadas entre os núcleos.
Obtendo a saída de depuração para um dispositivo não conectado a um computador de desenvolvimento
Problema: Como registrar a saída de depuração quando seu dispositivo não está conectado a um PC de desenvolvimento?
Opções:
Enviar saída de depuração pela rede ou um UART
Obter informações de log de depuração quando um dispositivo está conectado a um computador de desenvolvimento é bastante simples. No entanto, você também pode coletar informações de depuração/log quando um dispositivo não estiver conectado a um computador. Por exemplo, você pode ter um conjunto de dispositivos executando testes de longo prazo.
Se seus dispositivos estiverem conectados a uma rede, talvez você queira enviar a saída de depuração pela rede para um aplicativo que possa coletar e analisar as informações. Este aplicativo da Galeria do Azure Sphere demonstra como substituir o comportamento padrão do Log_Debug para enviar e receber essa saída por meio de um soquete UDP.
Observe que o mecanismo usado para substituir o comportamento padrão do Log_Debug do aplicativo de alto nível também pode ser usado para enviar as informações de log de depuração para outros locais, por exemplo, para gerar os dados em um dos UARTs do Azure Sphere. Você pode usar esse exemplo de UART como uma referência para combinar com o aplicativo UDPDebugLog Gallery para registrar suas mensagens em um UART.
Enviar saída de depuração para o Hub IoT do Azure/Azure IoT Central
Embora a saída de depuração possa ser útil para diagnosticar problemas à medida que eles acontecem, também pode ser útil armazenar informações de telemetria/log de um dispositivo para pós-processamento.
A configuração de uma instância do Hub IoT do Azure ou do Azure IoT Central fornece um ponto de extremidade para enviar dados de telemetria do dispositivo que podem ser usados como parte de sua lógica de negócios, você também pode enviar informações de estado/log do dispositivo que podem ser tratadas separadamente dos dados de telemetria/negócios.
Hub IoT do Azure
Sua instância do Hub IoT do Azure pode ser configurada para enviar dados para um Banco de Dados do Azure para armazenamento/análise, talvez você também queira filtrar as mensagens, o que pode ser obtido por meio do EventHub e de uma Função do Azure.
Para o Hub IoT do Azure, você pode enviar dados para uma Função do Azure, que pode processar as mensagens. O artigo Gatilho do Hub IoT do Azure para o Azure Functions explica como vincular um Azure Function a uma instância do Hub IoT do Azure.
Azure IoT Central
O Azure IoT Central inclui a capacidade de exportar continuamente seus dados para vários pontos de extremidade, incluindo:
- Hubs de eventos do Azure
- Fila do Barramento de Serviço do Azure
- Tópico do Barramento de Serviço do Azure
- Armazenamento do Blobs do Azure
- Webhook
O WebHook é um ponto de extremidade da API REST que você cria, pode ser uma função do Azure.
Observe que talvez você queira filtrar mensagens em sua Função do Azure com base na ID do Dispositivo que está enviando os dados, você pode obter a ID do Dispositivo usando o seguinte código na Função do 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...
}
O Hub IoT do Azure e o Azure IoT Central dão suporte a Dispositivos Gêmeos, que incluem o estado desejado (definido no aplicativo Hub IoT/Central) e o estado relatado (estado do dispositivo). Você pode usar o Hub IoT do Azure/Dispositivo Central Gêmeo para definir um estado desejado para o detalhamento dos dados de log (aumentar/diminuir a frequência de log ou a riqueza dos dados de log). O exemplo de IoT do Azure demonstra como lidar com as alterações do Dispositivo Gêmeo Desired State
.
Registrando dados no armazenamento
O Azure Sphere dá suporte a até 64 KB de armazenamento mutável para um aplicativo de alto nível, isso pode ser usado para manter configurações, estado do aplicativo ou outros dados, os desenvolvedores de aplicativos são responsáveis por serializar/desserializar dados para armazenamento mutável – A Galeria do Azure Sphere inclui um projeto que mostra como usar um par Chave/Valor (dicionário) para gravar/ler o estado no armazenamento mutável (até 64 KB, dependendo de como o manifesto do aplicativo está configurado).
Talvez você queira gravar mais de 64 KB de dados de Log/Estado em alguma forma de armazenamento externo, isso pode ser útil para dispositivos que têm conectividade intermitente ou precisam armazenar/recuperar mais de 64 KB de dados.
Uma opção é adicionar armazenamento externo, talvez usando o flash SPI para armazenar os dados – esse projeto usa o flash SPI para armazenar uma atualização over-the-air para um dispositivo downstream e pode ser modificado para dar suporte ao registro em log de dados de telemetria/estado de um aplicativo do Azure Sphere.