Ottenere l'output di debug del dispositivo Azure Sphere
Importante
Questa è la documentazione di Azure Sphere (legacy). Azure Sphere (legacy) viene ritirato il 27 settembre 2027 e gli utenti devono eseguire la migrazione ad Azure Sphere (integrato) entro questo periodo. Usare il selettore di versione posizionato sopra il sommario per visualizzare la documentazione di Azure Sphere (integrata).
Quando si sviluppa una soluzione IoT, spesso è necessario avere accesso all'output di debug dai dispositivi. Anche se questa operazione può essere ottenuta tramite una connessione di debug a Visual Studio/Code (ma può essere ottenuta anche dalla riga di comando), potrebbe essere necessario visualizzare anche l'output di debug per i dispositivi non connessi a Visual Studio/Code. Tali dispositivi possono eseguire test a lungo termine o eventualmente distribuiti nell'ambiente di produzione. Sono disponibili diverse opzioni per ottenere l'accesso ai dati di debug:
- Ottenere l'output di debug da un dispositivo connesso a un PC di sviluppo
- Ottenere l'output di debug per un dispositivo non connesso a un PC di sviluppo
- Registrazione nell'archiviazione esterna
- Registrazione in Azure
Ottenere l'output di debug da un dispositivo connesso a un PC di sviluppo
Problema: Come ottenere l'output di debug durante il debug con Visual Studio/Visual Code?
Opzioni:
Applicazione di alto livello
Un'applicazione di alto livello di Azure Sphere può usare l'API Log_Debug per inviare l'output di debug con la formattazione dello stile printf a un PC collegato durante il debug. Questo output può essere visualizzato usando la finestra di debug di Visual Studio o Visual Studio Code o dalla riga di comando.
È consigliabile configurare flag di dettaglio di debug nell'applicazione e usare le definizioni di compilazione di CMake per controllare la quantità di output di debug visualizzata durante l'esecuzione dell'applicazione. Nel file CMakeLists.txt è possibile creare una definizione in fase di compilazione:
add_compile_definitions(DEBUG_FLAG)
Nel codice dell'applicazione di alto livello è quindi possibile aumentare o ridurre la quantità di output di debug visualizzata dall'applicazione usando
#ifdef
, ad esempio:
#ifdef DEBUG_FLAG
Log_Debug("My Message\n");
#endif
Applicazione con funzionalità in tempo reale
Un'applicazione con funzionalità in tempo reale di Azure Sphere (in esecuzione in uno dei core M4) può scrivere informazioni di debug/log in un UART di trasmissione M4 dedicato. Ciò richiede un adattatore USB/seriale, ad esempio un amico FTDI e un emulatore di terminale.
L'esempio Hello World di Azure Sphere illustra come stampare nell'UART di debug M4.
Sono disponibili anche applicazioni di esempio da CodeThink e MediaTek:
Le definizioni in fase di compilazione del flag di debug possono essere usate anche nelle applicazioni con supporto in tempo reale (M4).
Uso delle comunicazioni tra core per inviare lo stato da un'applicazione con funzionalità in tempo reale a un'applicazione di alto livello
Se si sta creando un sistema che combina un'applicazione di alto livello e con funzionalità in tempo reale, è possibile usare l'applicazione di alto livello per registrare lo stato del sistema per entrambe le applicazioni. È possibile usare le comunicazioni inter-core. L'esempio di comunicazione tra core di Azure Sphere implementa un'interfaccia semplice per passare un messaggio tra un'applicazione con funzionalità di alto livello e in tempo reale.
Questo modulo di apprendimento di Azure Sphere illustra come usare Azure Sphere e Azure RTOS, combinati con un modello di messaggistica tra core per passare messaggi personalizzati tra i core.
Ottenere l'output di debug per un dispositivo non connesso a un PC di sviluppo
Problema: come registrare l'output di debug quando il dispositivo non è connesso a un PC di sviluppo?
Opzioni:
Inviare l'output di debug tramite la rete o un UART
Ottenere informazioni di log di debug quando un dispositivo è connesso a un PC di sviluppo è piuttosto semplice. Tuttavia, potresti anche voler raccogliere informazioni di debug/log quando un dispositivo non è connesso a un PC. Ad esempio, potrebbe essere disponibile un set di dispositivi che eseguono test a lungo termine.
Se i dispositivi sono connessi a una rete, è possibile inviare l'output di debug in rete a un'applicazione in grado di raccogliere e analizzare le informazioni. Questa applicazione della raccolta di Azure Sphere illustra come eseguire l'override del comportamento di Log_Debug predefinito per inviare e ricevere tale output su un socket UDP.
Si noti che il meccanismo usato per eseguire l'override del comportamento predefinito dell'applicazione high-evel Log_Debug può essere usato anche per inviare le informazioni del log di debug ad altre posizioni, ad esempio per restituire i dati in uno degli UART di Azure Sphere. È possibile usare questo esempio UART come riferimento per combinare l'applicazione UDPDebugLog Gallery per registrare i messaggi in un UART.
Inviare l'output di debug a hub IoT di Azure/Azure IoT Central
Anche se l'output di debug può essere utile per diagnosticare i problemi man mano che si verificano, può anche essere utile archiviare i dati di telemetria/log da un dispositivo per la post-elaborazione.
La configurazione di un'istanza di hub IoT di Azure o Azure IoT Central offre un endpoint per inviare dati di telemetria del dispositivo che possono essere usati come parte della logica di business, è anche possibile inviare informazioni sullo stato/log del dispositivo che possono essere trattate separatamente dai dati di telemetria/business.
Hub IoT di Azure
L'istanza di hub IoT di Azure può essere configurata per inviare dati a un database di Azure per l'archiviazione o l'analisi, è anche possibile filtrare i messaggi, che possono essere ottenuti tramite EventHub e una funzione di Azure.
Per hub IoT di Azure è possibile inviare dati a una funzione di Azure che può quindi elaborare i messaggi. L'articolo hub IoT di Azure trigger per Funzioni di Azure illustra come collegare una funzione di Azure a un'istanza di hub IoT di Azure.
Azure IoT Central
Azure IoT Central include la possibilità di esportare continuamente i dati in diversi endpoint, tra cui:
- Hub eventi di Azure
- Coda del bus di servizio di Azure
- Argomento del bus di servizio di Azure
- Archiviazione BLOB di Azure
- Webhook
Il webhook è un endpoint DELL'API REST creato, potrebbe trattarsi di una funzione di Azure.
Si noti che è possibile filtrare i messaggi nella funzione di Azure in base all'ID dispositivo che invia i dati, è possibile ottenere l'ID dispositivo usando il codice seguente nella funzione di 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...
}
supporto di hub IoT di Azure e Azure IoT CentralDispositivi gemelli, che include lo stato desiderato (impostato nell'applicazione hub IoT/centrale) e lo stato segnalato (stato dal dispositivo). È possibile usare hub IoT di Azure/Central Device Twin per impostare uno stato desiderato per il dettaglio dei dati di log (aumento/riduzione della frequenza di registrazione o ricchezza dei dati di registrazione). L'esempio di Azure IoT illustra come gestire le modifiche dei dispositivi gemelliDesired State
.
Registrazione dei dati nell'archiviazione
Azure Sphere supporta fino a 64 KB di spazio di archiviazione modificabile per un'applicazione di alto livello, che può essere usato per rendere persistenti le impostazioni, lo stato dell'applicazione o altri dati, gli sviluppatori di applicazioni sono responsabili della serializzazione/deserializzazione dei dati nell'archiviazione modificabile. La raccolta di Azure Sphere include un progetto che illustra come usare una coppia chiave/valore (dizionario) per scrivere/leggere lo stato per l'archiviazione modificabile (fino a 64 KB a seconda della configurazione del manifesto dell'applicazione).
È possibile scrivere più di 64 KB di dati di log/stato in una forma di archiviazione esterna, può essere utile per i dispositivi con connettività intermittente o che devono archiviare/recuperare più di 64 KB di dati.
Un'opzione consiste nell'aggiungere spazio di archiviazione esterno, ad esempio usando spi flash per archiviare i dati. Questo progetto usa flash SPI per archiviare un aggiornamento over-the-air per un dispositivo downstream e potrebbe essere modificato per supportare la registrazione dei dati di telemetria/stato da un'applicazione Azure Sphere.