Zum Hauptinhalt springen

Telemetry-Beispiel

Dieses Beispiel zeigt, wie ein Module Live-Telemetry-Werte für die ArmorLink App bereitstellen kann.

Telemetry eignet sich für Laufzeitdaten wie:

  • Batteriespannung
  • Batteriestand
  • Temperatur
  • Sensorwerte
  • Systemstatus

Telemetry wird nur übertragen, wenn sie von der ArmorLink App angefordert wird.

Für den konzeptionellen Überblick siehe Telemetry.

Was dieses Beispiel macht

Dieses Module:

  • Erstellt ein normales ArmorLink Module
  • Sendet Batteriespannungs-Telemetry
  • Sendet Batteriestands-Telemetry
  • Nutzt Telemetry nur bei Bedarf
  • Vermeidet unnötigen ESP-NOW-Verkehr
Module
|
v
Gateway
|
v
ArmorLink App

Vollständiges Beispiel

#include <ArmorLink.h>

ArmorLinkModule module(
"Battery Module",
ArmorLinkModuleType::Generic
);

const int BATTERY_PIN = 34;

float readBatteryVoltage()
{
int raw = analogRead(BATTERY_PIN);

// Example conversion only.
// Adjust this formula for your voltage divider and ADC setup.
float adcVoltage = (raw / 4095.0f) * 3.3f;
float batteryVoltage = adcVoltage * 2.0f;

return batteryVoltage;
}

float calculateBatteryPercent(float voltage)
{
// Simple example mapping for a single Li-Ion cell.
// Adjust this for your battery chemistry and voltage range.
const float minVoltage = 3.3f;
const float maxVoltage = 4.2f;

float percent = (voltage - minVoltage) / (maxVoltage - minVoltage) * 100.0f;

if (percent < 0.0f) {
percent = 0.0f;
}

if (percent > 100.0f) {
percent = 100.0f;
}

return percent;
}

void setup()
{
Serial.begin(115200);
delay(500);

pinMode(BATTERY_PIN, INPUT);

ArmorLinkOptions options;
options.enableGateway = false;
options.enableEspNow = true;
options.enableBle = false;
options.enableSerialLogging = true;

ArmorLink.begin(module, options);

ArmorLink.info("Telemetry module started");
}

void loop()
{
ArmorLink.loop();

sendBatteryTelemetry();

delay(500);
}

void sendBatteryTelemetry()
{
float voltage = readBatteryVoltage();
float percent = calculateBatteryPercent(voltage);

ArmorLink.telemetryGroup("battery", "main")
.value("voltage", voltage)
.value("percent", percent)
.unit("V")
.send();
}

Telemetry auf Abruf

Telemetry wird nicht dauerhaft übertragen.

Auch wenn dieses Beispiel sendBatteryTelemetry() regelmäßig aufruft, überträgt ArmorLink Telemetry nur dann, wenn sie von der ArmorLink App aktiviert wurde.

void loop()
{
ArmorLink.loop();

sendBatteryTelemetry();

delay(500);
}

Wenn Telemetry in der App deaktiviert ist, sendet das Module keinen kontinuierlichen Telemetry-Datenverkehr.

tipp

Du kannst Telemetry-Funktionen regelmäßig aus deiner Firmware aufrufen.

ArmorLink entscheidet intern, ob die Daten tatsächlich übertragen werden müssen.

Einen einzelnen Telemetry-Wert senden

Verwende sendTelemetry(...), um einen einzelnen Wert zu übertragen.

ArmorLink.sendTelemetry(
"battery",
"voltage",
voltage,
"V"
);

Parameter:

ParameterBeispielBeschreibung
GroupbatteryLogische Telemetry-Gruppe
NamevoltageName des Telemetry-Werts
Value4.12Numerischer Laufzeitwert
UnitVOptionale Anzeigeeinheit

Mehrere Werte senden

Verwende telemetryGroup(...), wenn mehrere zusammengehörige Werte gemeinsam übertragen werden sollen.

ArmorLink.telemetryGroup("battery", "main")
.value("voltage", voltage)
.value("percent", percent)
.unit("V")
.send();

Dadurch wird ein Telemetry-Objekt mit beiden Werten übertragen.

Gateway-Verhalten

Wenn dieses Module ein normales Module ist, wird die Telemetry an das Gateway gesendet und anschließend an die ArmorLink App weitergeleitet.

Battery Module
|
v
Gateway
|
v
ArmorLink App

Wenn das Module selbst das Gateway ist, werden die Daten direkt per BLE an die App übertragen.

Beispiel: Temperatur-Telemetry

float readTemperature()
{
return 24.5f;
}

void sendTemperatureTelemetry()
{
float temperature = readTemperature();

ArmorLink.sendTelemetry(
"environment",
"temperature",
temperature,
"C"
);
}

Beispiel: Laufzeitstatus

void sendStatusTelemetry()
{
ArmorLink.telemetryGroup("system", "status")
.value("uptimeSeconds", millis() / 1000.0f)
.value("freeHeap", ESP.getFreeHeap())
.send();
}

Telemetry vs. Logging

Telemetry sollte für strukturierte Laufzeitwerte verwendet werden.

Beispiele:

  • Batteriespannung
  • Temperatur
  • Sensorwerte
  • Systemstatus

Logging sollte für Diagnoseinformationen verwendet werden.

Beispiele:

ArmorLink.debug("Button pressed");
ArmorLink.warn("Battery voltage low");

Weitere Informationen findest du unter Remote Logging.

Nächste Schritte

Weiter mit: