Obter a saída de depuração de dispositivos do Azure Sphere
Ao desenvolver uma Solução IoT, muitas vezes precisa de ter acesso à saída de depuração a partir de dispositivos. Embora isto possa ser conseguido através de uma ligação de depuração ao Visual Studio/Code (mas também pode ser obtida a partir da linha de comandos), também poderá ter de ver a saída de depuração para dispositivos que não estão ligados ao Visual Studio/Code. Estes dispositivos podem estar a executar testes de longo prazo ou, possivelmente, até mesmo implementados na produção. Existem várias opções para obter acesso à depuração de dados:
- Obter a saída de depuração de um dispositivo ligado a um PC de desenvolvimento
- Obter a saída de depuração para um dispositivo não ligado a um PC de desenvolvimento
- Registo no armazenamento externo
- Iniciar sessão no Azure
Obter a saída de depuração de um dispositivo ligado a um PC de desenvolvimento
Problema: Como obter a saída de depuração ao depurar com o Visual Studio/Visual Code?
Opções:
Aplicação de alto nível
Uma aplicação de alto nível do Azure Sphere pode utilizar a API de Log_Debug para enviar a saída de depuração com formatação de estilo printf para um PC anexado durante a depuração. Este resultado pode ser visualizado através da janela de depuração do Visual Studio ou do Visual Studio Code ou da linha de comandos.
Recomendamos que considere configurar sinalizadores de verbosidade de depuração na sua aplicação e utilizar definições de compilação CMake para controlar a quantidade de saída de depuração que é apresentada quando a aplicação é executada. No seu ficheiro de CMakeLists.txt, pode criar uma definição de tempo de compilação:
add_compile_definitions(DEBUG_FLAG)
No código de aplicação de alto nível, pode aumentar ou diminuir a quantidade de saída de depuração apresentada pela sua aplicação com
#ifdef
, por exemplo:
#ifdef DEBUG_FLAG
Log_Debug("My Message\n");
#endif
Aplicação com capacidade em tempo real
Uma aplicação compatível com o Azure Sphere em tempo real (em execução num dos núcleos M4) pode escrever informações de depuração/registo num UART só de transmissão M4 dedicado. Isto requer um adaptador USB/Série, como um FtDI Friend e um emulador terminal.
O exemplo de Hello World do Azure Sphere demonstra como imprimir para o UART de depuração M4.
Também existem aplicações de exemplo disponíveis na CodeThink e mediaTek:
As definições de tempo de compilação do sinalizador de depuração também podem ser utilizadas em aplicações com capacidade em tempo real (M4).
Utilizar comunicações entre núcleos para enviar o estado de uma aplicação com capacidade em tempo real para uma aplicação de alto nível
Se estiver a criar um sistema que combina uma aplicação de alto nível e com capacidade em tempo real, poderá querer utilizar a aplicação de alto nível para registar o estado do sistema para ambas as aplicações. As comunicações inter-núcleos podem ser utilizadas para tal – o exemplo de Comunicação Inter-core do Azure Sphere implementa uma interface simples para transmitir uma mensagem entre uma aplicação de alto nível e com capacidade em tempo real.
Este módulo de aprendizagem do Azure Sphere demonstra como utilizar o Azure Sphere e o Azure RTOS, combinado com um modelo de mensagens entre núcleos para transmitir mensagens personalizadas entre os núcleos.
Obter a saída de depuração para um dispositivo não ligado a um PC de desenvolvimento
Problema: Como registar a saída de depuração quando o dispositivo não está ligado a um PC de desenvolvimento?
Opções:
Enviar saída de depuração através da rede ou de um UART
Obter informações de registo de depuração quando um dispositivo está ligado a um PC de desenvolvimento é bastante simples. No entanto, também poderá querer recolher informações de depuração/registo quando um dispositivo não está ligado a um PC. Por exemplo, pode ter um conjunto de dispositivos a executar testes de longo prazo.
Se os seus dispositivos estiverem ligados a uma rede, poderá querer enviar a saída de depuração através da rede para uma aplicação que possa recolher e analisar as informações. Esta aplicação da Galeria do Azure Sphere demonstra como substituir o comportamento de Log_Debug predefinido para enviar e receber essa saída através de um socket UDP.
Tenha em atenção que o mecanismo utilizado para substituir a aplicação de alto nível predefinida Log_Debug comportamento também pode ser utilizado para enviar as informações de registo de depuração para outros locais, por exemplo, para exportar os dados numa das UARTs do Azure Sphere. Pode utilizar este exemplo UART como referência para combinar com a aplicação Galeria UDPDebugLog para registar as suas mensagens num 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 acontecem, também pode ser útil armazenar informações de telemetria/registo de um dispositivo para pós-processamento.
Configurar uma instância do Hub IoT do Azure ou do Azure IoT Central dá-lhe um ponto final para enviar dados telemétricos do dispositivo que podem ser utilizados como parte da lógica de negócio. Também pode enviar informações de estado/registo do dispositivo que podem ser tratadas separadamente dos dados de telemetria/negócio.
O exemplo de Registo no Azure demonstra como reencaminhar mensagens de registo como Hub IoT telemetria e armazená-las num cluster do Azure Data Explorer para consultas avançadas.
Hub IoT do Azure
A instância Hub IoT do Azure pode ser configurada para enviar dados para uma Base de Dados do Azure para armazenamento/análise. Também poderá querer filtrar as mensagens, o que pode ser conseguido através do EventHub e de uma Função do Azure.
Por Hub IoT do Azure pode enviar dados para uma Função do Azure que, em seguida, pode processar as mensagens. O Hub IoT do Azure acionador para Funções do Azure artigo explica como ligar uma Função do Azure a uma instância de Hub IoT do Azure.
Azure IoT Central
O Azure IoT Central inclui a capacidade de exportar continuamente os seus dados para vários pontos finais, incluindo:
- Hubs de Eventos do Azure
- Fila de Azure Service Bus
- tópico Azure Service Bus
- Armazenamento de Blobs do Azure
- Webhook
O WebHook é um Ponto Final da API REST que cria, pode ser uma Função do Azure.
Tenha em atenção que poderá querer filtrar mensagens na Função do Azure com base no ID do Dispositivo que está a enviar os dados. Pode obter o ID do Dispositivo com 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...
}
Hub IoT do Azure e o Azure IoT Central suportam Dispositivos Duplos, que inclui o estado pretendido (definido na aplicação Hub IoT/Central) e o estado comunicado (estado do dispositivo). Pode utilizar Hub IoT do Azure/Dispositivo Duplo Central para definir um estado pretendido para a verbosidade dos dados de registo (aumentar/diminuir a frequência de registo ou a riqueza dos dados de registo). O Exemplo de IoT do Azure demonstra como lidar com as alterações do Dispositivo Duplo Desired State
.
Registar dados no armazenamento
O Azure Sphere suporta até 64 KB de armazenamento mutável para uma aplicação de alto nível, isto pode ser utilizado para manter as definições, o estado da aplicação ou outros dados, os programadores de aplicações são responsáveis por serializar/anular a serialização de dados para armazenamento mutável – a Galeria do Azure Sphere inclui um projeto que mostra como utilizar um par chave/valor (dicionário) para escrever/ler o estado no armazenamento mutável (até 64 KB, dependendo de como o manifesto da aplicação está configurado).
Pode querer escrever mais de 64 KB de dados de Registo/Estado numa forma de armazenamento externo, isto pode ser útil para dispositivos com conectividade intermitente ou que precisam de armazenar/obter mais de 64 KB de dados.
Uma opção é adicionar armazenamento externo, talvez utilizando o FLASH SPI para armazenar os dados - este projeto utiliza o FLASH SPI para armazenar uma atualização via ar para um dispositivo a jusante e pode ser modificado para suportar o registo de dados de telemetria/estado de uma aplicação do Azure Sphere.