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.
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:
| Parameter | Beispiel | Beschreibung |
|---|---|---|
| Group | battery | Logische Telemetry-Gruppe |
| Name | voltage | Name des Telemetry-Werts |
| Value | 4.12 | Numerischer Laufzeitwert |
| Unit | V | Optionale 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: