Bereitstellen einer allgemeinen Anwendung für Azure Sphere

Abgeschlossen

In dieser Lerneinheit erfahren Sie, wie Sie eine allgemeine Anwendung für Azure Sphere bereitstellen und Telemetriedaten an IoT Hub streamen.

Lösungsarchitektur

Im folgenden wird erläutert, wie die Azure Sphere Telemetrie in IoT Hub streamt.

Azure Sphere Streaming telemetry to IoT Hub.

  1. Die allgemeine Anwendung auf Cortex-A7 liest die Umgebungssensoren alle sechs Sekunden, serialisiert die Daten als JSON-Code und sendet die Telemetriedatennachricht an IoT Hub.
  2. Azure IoT-Explorer abonniert die Telemetrienachrichten, die vom Gerät an IoT Hub gesendet werden, und zeigt dem Benutzer die Daten an.

Grundlegendes zur Azure Sphere-Anwendung

Da im Zusammenhang mit diesen Labs häufig Ereignistimer verwendet werden, gibt es ein generalisiertes Modell, um die Arbeit mit Timern zu vereinfachen. Die ereignisgesteuerte Programmierung vereinfacht das Anwendungsdesign.

Es gibt zwei Timertypen:

  • Periodische Timer
  • Einmalige Timer

Ereignistimer generieren Ereignisse, die an Handlerfunktionen gebunden sind, die gewünschte Aktionen implementieren.

The illustration shows the event timers concept.

Die Anwendung deklariert einen periodischen measureSensorTimer-Ereignistimer. Sobald er initialisiert ist, ruft der Timer alle 6 Sekunden die Handlerfunktion MeasureSensorHandler auf.

static LP_TIMER measureSensorTimer = {
    .period = { 6, 0 },
    .name = "measureSensorTimer",
    .handler = MeasureSensorHandler };

Die Funktion MeasureSensorHandler wird aufgerufen, wenn der Timer measureSensorTimer ausgelöst wird.

Die MeasureSensorHandler-Funktion liest den Umgebungssensor, formatiert die Daten in eine JSON-Zeichenfolge, zeigt die JSON-Daten auf der Registerkarte Ausgabe an und sendet anschließend die Telemetrie an Azure IoT Hub.

/// <summary>
/// Read sensor and send to Azure IoT
/// </summary>
static void MeasureSensorHandler(EventLoopTimer* eventLoopTimer)
{
    static int msgId = 0;
    static LP_ENVIRONMENT environment;

    if (ConsumeEventLoopTimerEvent(eventLoopTimer) != 0)
    {
        lp_terminate(ExitCode_ConsumeEventLoopTimeEvent);
    }
    else {
        if (lp_readTelemetry(&environment) &&
            snprintf(msgBuffer, JSON_MESSAGE_BYTES, msgTemplate,
                environment.temperature, environment.humidity, environment.pressure, msgId++) > 0)
        {
            Log_Debug("%s\n", msgBuffer);
            lp_azureMsgSendWithProperties(msgBuffer, telemetryMessageProperties, NELEMS(telemetryMessageProperties));
        }
    }
}

Einführung in IoT Plug & Play

IoT Plug & Play ermöglicht es Lösungsentwicklern, intelligente Geräte ohne manuelle Konfiguration in ihre Lösungen zu integrieren. Im Kern von IoT Plug & Play gibt es ein Gerätemodell, das von einem Gerät verwendet wird, um eine IoT Plug & Play-fähige Anwendung über seine Funktionen zu informieren. Weitere Informationen finden Sie unter Was ist IoT Plug & Play?.

Das IoT Plug & Play-Modell für dieses Lernmodul finden Sie im IoTPlugAndPlay-Verzeichnis. Dieses Modell wurde in das öffentliche Repository für IoT Plug & Play-Modelle hochgeladen.

Das in diesem Lernmodul verwendete IoT Plug & Play-Modell ist in main.c deklariert.

#define IOT_PLUG_AND_PLAY_MODEL_ID "dtmi:com:example:azuresphere:labmonitor;1"

Azure IoT Explorer und IoT Central sind IoT Plug & Play-fähige Anwendungen. IoT Plug & Play ist eine offene Spezifikation. Sie können auch mit Plug & Play kompatible Anwendungen entwickeln. Weitere Informationen finden Sie im Artikel Einführung in IoT Plug & Play.

Wenn Ihr Gerät zum ersten Mal eine Verbindung mit IoT Hub herstellt, wird die IoT Plug & Play-Modell-ID an IoT Hub übermittelt. Azure IoT-Explorer ruft dann das IoT Plug & Play-Modell aus dem öffentlichen Repository für IoT Plug & Play-Modelle ab. Die Telemetrie wird mithilfe des Modells angezeigt.