Foutopsporingsuitvoer voor Azure Sphere-apparaten verkrijgen
Bij het ontwikkelen van een IoT-oplossing moet u vaak toegang hebben tot foutopsporingsuitvoer van apparaten. Hoewel dit kan worden bereikt via een foutopsporingsverbinding met Visual Studio/Code (maar kan ook worden bereikt vanaf de opdrachtregel), moet u mogelijk ook de foutopsporingsuitvoer bekijken voor apparaten die niet zijn verbonden met Visual Studio/Code. Dergelijke apparaten kunnen langdurige tests uitvoeren of mogelijk zelfs worden geïmplementeerd in productie. Er zijn verschillende opties om toegang te krijgen tot foutopsporingsgegevens:
- Uitvoer van foutopsporing verkrijgen van een apparaat dat is verbonden met een ontwikkel-pc
- Foutopsporingsuitvoer verkrijgen voor een apparaat dat niet is verbonden met een ontwikkel-pc
- Logboekregistratie naar externe opslag
- Logboekregistratie naar Azure
Uitvoer van foutopsporing verkrijgen van een apparaat dat is verbonden met een ontwikkel-pc
Probleem: Uitvoer van foutopsporing verkrijgen bij foutopsporing met behulp van Visual Studio/Visual Code?
Opties:
Toepassing op hoog niveau
Een toepassing op hoog niveau van Azure Sphere kan de Log_Debug-API gebruiken om foutopsporingsuitvoer met opmaak in printf-stijl te verzenden naar een gekoppelde pc tijdens foutopsporing. Deze uitvoer kan worden weergegeven met behulp van het foutopsporingsvenster van Visual Studio of Visual Studio Code of vanaf de opdrachtregel.
U kunt overwegen om uitgebreidheidsvlaggen voor foutopsporing in uw toepassing in te stellen en CMake-compileerdefinities te gebruiken om te bepalen hoeveel foutopsporingsuitvoer wordt weergegeven wanneer uw toepassing wordt uitgevoerd. In uw CMakeLists.txt-bestand kunt u een tijddefinitie voor compileren maken:
add_compile_definitions(DEBUG_FLAG)
In uw toepassingscode op hoog niveau kunt u vervolgens de hoeveelheid foutopsporingsuitvoer die door uw toepassing wordt weergegeven, verhogen of verlagen met behulp van
#ifdef
, bijvoorbeeld:
#ifdef DEBUG_FLAG
Log_Debug("My Message\n");
#endif
Toepassing die in realtime kan worden uitgevoerd
Een Azure Sphere-toepassing die in realtime kan worden uitgevoerd (uitgevoerd op een van de M4-kernen) kan foutopsporings-/logboekgegevens schrijven naar een toegewezen M4-UART voor verzenden. Hiervoor is een USB-/seriële adapter, zoals een FTDI-vriend, en een terminalemulator vereist.
Het Azure Sphere Hallo wereld-voorbeeld laat zien hoe u afdrukt naar de UART voor foutopsporing van M4.
Er zijn ook voorbeeldtoepassingen beschikbaar via CodeThink en MediaTek:
De foutopsporing vlag compileren tijddefinities kunnen ook worden gebruikt in realtime compatibele (M4) toepassingen.
Communicatie tussen kernen gebruiken om de status van een toepassing die in realtime kan worden verzonden naar een toepassing op hoog niveau
Als u een systeem bouwt dat een toepassing op hoog niveau en realtime combineert, kunt u de toepassing op hoog niveau gebruiken om de systeemstatus voor beide toepassingen te registreren. Hiervoor kan communicatie tussen kernen worden gebruikt. In het voorbeeld van Azure Sphere Inter-core Communication wordt een eenvoudige interface geïmplementeerd voor het doorgeven van een bericht tussen een toepassing op hoog niveau en realtime.
Deze Azure Sphere-leermodule laat zien hoe u Azure Sphere en Azure RTOS gebruikt, in combinatie met een berichtenmodel tussen kernen om aangepaste berichten tussen de kernen door te geven.
Foutopsporingsuitvoer verkrijgen voor een apparaat dat niet is verbonden met een ontwikkel-pc
Probleem: Foutopsporingsuitvoer registreren wanneer uw apparaat niet is verbonden met een ontwikkel-pc?
Opties:
Uitvoer van foutopsporing verzenden via het netwerk of een UART
Het verkrijgen van foutopsporingslogboekgegevens wanneer een apparaat is verbonden met een ontwikkel-pc is vrij eenvoudig. Mogelijk wilt u echter ook foutopsporings-/logboekinformatie verzamelen wanneer een apparaat niet is verbonden met een pc. U hebt bijvoorbeeld een set apparaten waarop langdurige tests worden uitgevoerd.
Als uw apparaten zijn verbonden met een netwerk, kunt u de foutopsporingsuitvoer via het netwerk verzenden naar een toepassing die de informatie kan verzamelen en analyseren. Deze Azure Sphere Gallery-toepassing laat zien hoe u het standaardgedrag Log_Debug voor het verzenden en ontvangen van die uitvoer via een UDP-socket overschrijft.
Houd er rekening mee dat het mechanisme dat wordt gebruikt om de standaardtoepassing met hoge evel-Log_Debug te overschrijven, ook kan worden gebruikt om de foutopsporingslogboekinformatie naar andere plaatsen te verzenden, bijvoorbeeld om de gegevens uit te voeren op een van de Azure Sphere-UART's. U kunt dit UART-voorbeeld gebruiken als referentie om te combineren met de toepassing UDPDebugLog Gallery om uw berichten in een UART te registreren.
Uitvoer van foutopsporing verzenden naar Azure IoT Hub/Azure IoT Central
Hoewel uitvoer voor foutopsporing handig kan zijn voor het diagnosticeren van problemen wanneer deze optreden, kan het ook handig zijn om telemetrie-/logboekinformatie van een apparaat op te slaan voor naverwerking.
Als u een exemplaar van Azure IoT Hub of Azure IoT Central instelt, krijgt u een eindpunt voor het verzenden van telemetriegegevens van apparaten die kunnen worden gebruikt als onderdeel van uw bedrijfslogica. U kunt ook gegevens over de status/logboek van het apparaat verzenden die afzonderlijk van de telemetrie-/zakelijke gegevens kunnen worden behandeld.
Het voorbeeld Logboekregistratie naar Azure laat zien hoe u logboekberichten doorstuurt als IoT Hub telemetrie en deze opslaat in een Azure Data Explorer-cluster voor geavanceerde query's.
Azure IoT Hub
Uw Azure IoT Hub-exemplaar kan worden geconfigureerd om gegevens te verzenden naar een Azure Database voor opslag/analyse. Mogelijk wilt u ook de berichten filteren. Dit kan worden bereikt via EventHub en een Azure-functie.
Voor Azure IoT Hub kunt u gegevens verzenden naar een Azure-functie die de berichten vervolgens kan verwerken. In het artikel Azure IoT Hub trigger voor Azure Functions wordt uitgelegd hoe u een Azure-functie koppelt aan een Azure IoT Hub exemplaar.
Azure IoT Central
Azure IoT Central biedt de mogelijkheid om uw gegevens voortdurend te exporteren naar verschillende eindpunten, waaronder:
- Azure Event Hubs
- Azure Service Bus wachtrij
- Azure Service Bus onderwerp
- Azure Blob Storage
- Webhook
De WebHook is een REST API-eindpunt dat u maakt. Dit kan een Azure-functie zijn.
Houd er rekening mee dat u mogelijk berichten in uw Azure-functie wilt filteren op basis van de apparaat-id waarmee de gegevens worden verzonden. U kunt de apparaat-id verkrijgen met behulp van de volgende code in de Azure-functie:
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 en Azure IoT Central ondersteunen Device Twins, waaronder de gewenste status (ingesteld in de IoT Hub/Central-toepassing) en de gerapporteerde status (status van het apparaat). U kunt Azure IoT Hub/Central Device Twin gebruiken om een gewenste status in te stellen voor uitgebreidheid van logboekgegevens (toename/afname van de logboekfrequentie of de rijkdom van logboekgegevens). Het Azure IoT-voorbeeld laat zien hoe u wijzigingen in apparaatdubbels Desired State
kunt verwerken.
Logboekregistratie van gegevens naar opslag
Azure Sphere ondersteunt maximaal 64 KB aan veranderlijke opslag voor een toepassing op hoog niveau. Dit kan worden gebruikt om instellingen, toepassingsstatus of andere gegevens te behouden. Toepassingsontwikkelaars zijn verantwoordelijk voor het serialiseren/deserialiseren van gegevens naar veranderlijke opslag. De Azure Sphere-galerie bevat een project dat laat zien hoe u een sleutel/waardepaar (woordenlijst) gebruikt om de status te schrijven/lezen naar onveranderbare opslag (maximaal 64 KB, afhankelijk van hoe het toepassingsmanifest is geconfigureerd).
Mogelijk wilt u meer dan 64 kB aan logboek-/statusgegevens schrijven naar een vorm van externe opslag. Dit kan handig zijn voor apparaten met onregelmatige connectiviteit of die meer dan 64 KB aan gegevens moeten opslaan/ophalen.
Een optie is om externe opslag toe te voegen, mogelijk met behulp van SPI-flash om de gegevens op te slaan. Dit project maakt gebruik van SPI-flash om een over-the-air update voor een downstreamapparaat op te slaan en kan worden gewijzigd om telemetrie-/statusgegevens van een Azure Sphere-toepassing te ondersteunen.