Explorativer Versuch zur KI-gestützten Optimierung von Embedded Code hinsichtlich des Energieverbrauchs

Ziel dieses explorativen Versuchs war die Betrachtung des Potentials, den Energieverbrauch eines Embedded Systems durch ChatGPT o1 optimieren zu lassen. Der Anwendungsfall ist ein selbstgebauter Pegelsensor, mit dem sich Wasserstände in kleinen Bächen einfach und kostengünstig messen lassen. Ziel ist es, Klimafolgen wie veränderte Niederschlagsmuster oder Hochwassergefahr frühzeitig zu erkennen und lokal zu dokumentieren. Der Ansatz verbindet Umweltbeobachtung mit praktischer IoT-Technologie und eignet sich für Bildung, Forschung oder kommunale Umweltprojekte.

Technische Basis des energieautarken Pegelmesssystems bildet ein ESP32-Mikrocontroller. Das System misst Wasserstände mithilfe eines Ultraschallsensors (HC-SR04) und überträgt die Daten per LoRaWAN an eine Basisstation und schließlich ins Internet. Ziel ist ein möglichst stromsparender Dauerbetrieb mit Batterieversorgung, um den Pegelstand langfristig beobachten zu können.

Ausgangslage

Ohne Optimierung beträgt die mittlere Stromaufnahme für den Betrieb des Sensor ca. 47mA. Das System zeigt einen vergleichsweise hohen Energieverbrauch, insbesondere im Leerlaufbetrieb. Die Mikrocontroller-Firmware weist einige Ineffizienzen auf, da verschiedene Sensoren und Komponenten kontinuierlich betrieben werden – selbst wenn sie gerade nicht benötigt werden. Zudem werden selten Energiesparmodi des Mikrocontrollers genutzt. Auch die Abtastrate und Aktivitätszyklen der Sensoren sind nicht an den tatsächlichen Bedarf angepasst, was zu unnötiger Aktivität und Energieverlust führt.

Programm ohne Optimierung

Programm-Blocks des Pegelsensors ohne Optimierung
Ausgangspunkt Rumpfprogramm des Pegelsensors ohne Optimierung

Optimierung mit ChatGPT

Durch die Optimierung konnte die mittlere Stromaufnahme für den Betrieb des Sensor auf ca. 13mA reduziert werden. Das größte, von der KI identifizierte Potential war die Nutzung des DeepSleep Modus im Leerlauf. Zudem wurden selten Energiesparmodi des Mikrocontrollers genutzt, die Abtastraten waren zu hoch und noch einige weitere Punkte konnten zur Reduktion beitragen. Der Gesamte Chat-Verlauf findet sich unten.

Programm mit Optimierung durch ChatGPT

Mithilfe ChatGPT optimiertes Programm. Erweitert um Deepsleep und Lightsleep in der Warmup-Phase.
Finales Ergebnis ChatGPT

Verlauf des Chats

1. Prompt

Prompt

Ich habe ein C-Programm für den Arduino ESP32 mit der MCCI LMIC LoRaWAN Bibliothek im ABP Modus. Im Anhang findet Du die Aufzeichnung eines Kommunikationszyklus. Bitte analysiere den Code und mache Vorschläge zur Energieeinsparung. Hier ist der Code: <Quellcodedatei.abp>

Antwort
  1. Deep Sleep statt delay()

    Statt am Ende von loop() (bzw. in Do_Sleep_gen()) einfach delay(...) aufzurufen, solltest du den ESP32 richtig in den Deep-Sleep-Modus schicken. In Deep Sleep kann der ESP32 oft unter 1 mA (teilweise sogar im µA-Bereich) verbrauchen.

    Beispiel-Code-Skizze
    void Do_Sleep_gen() {
    // Bestimmen, wie lange geschlafen werden soll
    // (hier z.B. auf Basis deiner Bedingung Level_mm vs. Level_HighCycle_mm) uint32_t sleepTimeMs = (Level_mm <= Level_HighCycle_mm)
        ? (CycleTime_s * 500)
        : (CycleTime_s * 1000);
    // LMIC-Zustand sichern, sofern du beim nächsten Start // nicht erneut joinen möchtest (ABP benötigt zwar kein Join, // aber ggf. möchtest du die internen LMIC-States behalten)
    #ifdef IOTW_LORA_DEEPSLEEP
        #if defined(ESP32)
            SaveLMICToRTC_ESP32();
        #endif
    #endif
    // Serienausgabe abschließen
    Serial.flush();
    Serial.end();
    // Zeit für Deep Sleep konfigurieren
    esp_sleep_enable_timer_wakeup((uint64_t)sleepTimeMs * 1000ULL);
    // In den Deep-Sleep-Modus wechseln
    esp_deep_sleep_start();
    }

    Wichtig: Damit das Ganze funktioniert, musst du sicherstellen, dass du

    1. IOTW_USE_DEEPSLEEP definiert hast, damit dein Code nicht nur die RTCVariablen hält, sondern auch den LMIC-Zustand entsprechend sichert.
    2. Bei Bedarf im setup() den LMIC-Zustand wieder aus RTC lädst (das machstdu in LoRaWAN_Start_ABP(true) mit LoadLMICFromRTC_ESP32() schon zum Teil).
  2. Sensor-Power-Pin & Aufwärmzeit anpassen

    Momentan schaltest du den Ultraschall-Sensor (Maxbotix) über Pin US_POWER_PIN (GPIO 4) ein und wartest 10 Sekunden (#define US_WARMUP_MS 10000). Das ist sehr lang. Prüfe, ob diese 10 Sekunden wirklich nötig sind. Manche Ultraschall-Sensoren liefern schon nach 200– 1000 ms stabile Messwerte.

    Tipp: Teste, ob du die Aufwärmzeit stark reduzieren kannst (z.B. 1–2 Sekunden), ohne dass die Messung zu stark schwankt. Jede Sekunde weniger Aufwärmzeit bedeutet eine Sekunde weniger hoher Strom.

  3. Stromspar-Einstellungen für LMIC
    1. SF und Sendeleistung anpassen
      1. Du nutzt bereits LMIC_setDrTxpow(DR_SF7,14); – also SF7 mit 14 dB.
      2. Falls du ein gutes Gateway in Reichweite hast, kannst du die Sendeleistung verringern (z.B. 10 dB statt 14 dB). Dadurch sinkt der Spitzenstrom beim Senden.
      3. Bei ABP entfallen Join-Vorgänge (und damit zusätzliche Sendezyklen), was für dich schon vorteilhaft ist.
    2. Debug-Ausgaben (LMIC_DEBUG_LEVEL) deaktivieren

      Falls du die MCCI-LMIC-Bibliothek mit aktiven Debug-Meldungen kompiliert hast (also LMIC_DEBUG_LEVEL > 0), verringere das auf 0, um serielle Ausgaben (und damit etwas CPULast) einzusparen:

      #define LMIC_DEBUG_LEVEL 0
      #include <lmic.h> ...

  4. WiFi und Bluetooth deaktivieren

    Du machst bereits WiFi.mode(WIFI_OFF). Achte auch darauf, dass Bluetooth nicht unbemerkt aktiv ist. Bei ESP32 kannst du das explizit abschalten:

    btStop();

    oder in der menuconfig (falls du die ESP-IDF oder PlatformIO nutzt) das BluetoothSubsystem deaktivieren.

  5. CPU-Frequenz verringern (optional)
    Falls du keinen hohen Datendurchsatz oder viele Berechnungen brauchst, kannst du den ESP32 auf 80 MHz (oder 160 MHz) takten statt 240 MHz. Das reduziert die CPU-Leckströme während aktiver Phasen. Allerdings ist der größte Effekt immer noch der Deep Sleep.
  6. Board-spezifische Hardware-Fallen prüfen
    Gerade beim ESP32-DevKit oder NodeMCU-ähnlichen Boards gibt es oft:
    1. LDO-Spannungsregler mit hohem Ruhestrom (z.B. AMS1117).
    2. USB-Seriell-Konverter (CH340, CP2102, etc.), der ständig einige mA verbraucht.

Für echte Low-Power-Anwendungen lohnen sich Boards, die extra für Batteriebetrieb ausgelegt sind (z.B. TTGO T-Beam, Heltec Wireless Stick, oder custom Boards mit sehr geringem Standby-Verbrauch)

Fazit

  • Unbedingt Deep Sleep benutzen statt delay(). Das ist der mit Abstand größte Hebel.
  • Aufwärmzeit und Sensor-Power sparsam handhaben (Ultraschall-Sensor wirklich nur so kurz wie nötig einschalten).
  • LMIC stromsparender einstellen (Sendeleistung, Debug-Meldungen aus).
  • WiFi/Bluetooth hart ausschalten, CPU-Frequenz optional senken.
  • Falls verfügbar, auf ein stromsparendes Board ohne Stromfresser-Regler wechseln.

Dann wirst du sehen, dass dein Messzyklus nur kurz höhere Ströme zieht und danach für den Großteil der Zeit auf (fast) 0 mA absinkt. Das siehst du dann im Power Profiler als kurze „Peaks“ und einen kaum messbaren Sleep-Strom.

2. Prompt

Prompt

Ich habe den deepsleep und die Sicherung im RTC eingebaut, sowie die CPU-Frequenz auf 80 MHz reduziert. Der Ultraschallsensor benötigt tatsächlich 10 s Aufwärmzeit. An der LMIC Lib kann ich nichts ändern. Analysiere den Energieverbrauch. Wo gibt es noch kurzfristige Einsparmöglichkeiten?

Antwort

Aus den Messungen und dem Code ist zu erkennen, dass du durch Deep Sleep und die reduzierte CPU-Frequenz bereits den größten Schritt in Richtung Stromersparnis gemacht hast. Der verbleibende „Stromfresser“ ist nun vor allem die relativ lange Aktivphase (10 s Aufwärmzeit des Ultraschallsensors, Senden via LoRaWAN, usw.). Im Diagramm sieht man daher immer noch diese ~10 Sekunden mit höherem Stromverbrauch, bevor der ESP32 wieder in den Deep Sleep geht.

Hier ein paar kurzfristige Optimierungen, die du noch umsetzen kannst, auch wenn du an der LMIC-Library selbst nichts ändern möchtest:

  1. Mess-/Sende-Frequenz reduzieren
    Wenn nicht jede Messung alle x Sekunden benötigt wird, kannst du die Abtast-/Sendeintervalle verlängern.
    Beispiel: Statt alle 30 Sekunden messen+senden, nur alle 5 Minuten oder alle 15 Minuten. Jede verhinderte Aktivphase spart enorm viel Energie.

  2. Aufwärmzeit des Sensors überlappend nutzen
    Dein Ultraschallsensor braucht offenbar wirklich 10 Sekunden, bis er stabile Werte liefert. Statt 10 Sekunden stur zu warten und danach das LoRaWAN-Senden zu starten, könntest du:

    1. Sende-Vorgang in diese Aufwärmzeit verlegen oder andere Initialisierungsschritte (z.B. LMIC os_runloop einmal hochfahren lassen).

    2. So läuft die Sensor-Aufwärmphase „parallel“ zum Abarbeiten von LMIC-internen Tasks, und du sparst dadurch Netto-Aktivzeit.

  3. Bluetooth sicher deaktivieren
    Selbst wenn du WiFi.mode(WIFI_OFF) aufrufst, solltest du sicherstellen, dass Bluetooth auch wirklich aus ist.
    Auf ESP32 geht das z.B. mit btStop(); oder über Kconfig (bei Arduino-ESP32: Menüpunkt in der Board-Auswahl).
    Auch kleine Bluetooth-Hintergrundprozesse ziehen Strom, solange sie aktiv sind.

  4. Debugging reduzieren oder abklemmen

    1. Schalte serielle Debug-Ausgaben ab, sobald das System stabil läuft (z.B. Serial.end() vor dem Deep Sleep).

    2. Wenn noch eine Debug-LED oder andere Peripherie (z.B. Onboard-Power-LED) an ist, kann das ebenfalls mA-Bereich verbrauchen.

  5. Hardware-bedingte Leckströme minimieren
    Gerade bei Entwicklungsboards (NodeMCU, DevKitC usw.) hast du meist
    • Einen 3,3 V LDO-Spannungsregler mit recht hohem Eigenverbrauch,
    • Einen USB-Seriell-Chip (CP2102, CH340 etc.),
    • Evtl. eine Power-LED.

    All das erhöht den Ruhestrom. Für den Batteriebetrieb sind daher folgende kurzfristige Optionen denkbar:

    1. Falls möglich, Regler um- oder überbrücken und mit externem, effizienteren DC/DC-Wandler versorgen.

    2. Den USB-Seriell-Chip auf dem Board „totlegen“ (oder ein anderes Low-Power-Board wählen).

    3. Überflüssige LEDs auslöten (nicht immer praktikabel, aber spart ein paar mA).

  6. Alternative Sensoren oder Sensor-Aufteilung
    Wenn der 10 s Warm-up des Ultraschallsensors zu viel Energie frisst, könntest du längerfristig überlegen:

    1. Einen Ultraschallsensor mit kürzerer Einschaltzeit zu verwenden.

    2. Oder die Messfrequenz noch stärker zu senken (z.B. nur bei wirklich notwendigen Messungen).

    3. Manche Anwender wechseln auf kapazitive Füllstandssensoren oder Drucksensoren für Flüssigkeiten, je nach Anwendungsfall.

Fazit

  • Intervall vergrößern: Jede Aktivphase kostet Zeit und Strom, also seltener messen/senden.
  • Parallelisierung: Versuche die 10 s Aufwärmzeit für andere Tasks (z.B. LoRaSenden) zu nutzen.
  • Bluetooth/WiFi konsequent aus.
  • Debugging und LEDs abschalten, Hardware-Leckströme minimieren (ggf. anderes Board oder Regler tauschen).
  • Alternative Sensoren prüfen, falls die 10 s Warm-up tatsächlich dauerhaft nötig sind.

Mit diesen Maßnahmen solltest du die Kurve zwischen den Messzyklen noch weiter nach unten drücken und so den Durchschnittsstrom reduzieren.

3. Prompt

Prompt

Wenn die Aufwärmphase nun der größte Verbraucher ist. Wo setze ich an? Beim Sensor (Maxbotix) oder bei der CPU ESP32. Beide laufen während der Aufwärmphase ja gleichzeitig.

Antwort

In deinem Fall ist die 10 s Aufwärmzeit des Ultraschallsensors der dominante Zeitblock, während dessen sowohl Sensor als auch ESP32 aktiv sind und somit Strom ziehen. Du kannst zwar versuchen, den ESP32 während dieser Zeit etwas herunterzutakten oder in einen leichten Sleep-Modus zu versetzen, aber am Ende sparst du damit nur bedingt Strom – denn der Sensor selbst läuft weiter und zieht je nach Modell nicht gerade wenig.

Die Hauptfrage lautet: „Kommen wirklich 10 Sekunden Aufwärmzeit zustande?“ Manche Maxbotix-Sensoren geben stabile Werte schon deutlich früher ab, wenn man genau prüft. Sollte das definitiv nötig sein, hast du folgende Optionen:

  1. Sensor-Seite optimieren
    1. Sensor mit kürzerer Aufwärmphase wählen
      Falls es eine Maxbotix-Variante oder ein alternativer Ultraschallsensor gibt, der nach 1–2 s stabile Werte liefert, senkst du damit drastisch den Zeitanteil, in dem beide (Sensor & ESP32) „wach“ sind.
    2. Messintervall verlängern
      Ist das Mess- bzw. Sendeintervall wirklich so kurz, dass du alle 30 Sekunden (oder ähnlich oft) misst? Jede Einzelmessung kostet dich eben jene 10 Sekunden hohe Stromlast. Bei größerem Intervall (z.B. 5 min, 15 min oder je nach Bedarf) reduzieren sich die Gesamtdurchschnitte erheblich.

  2. CPU-Seite optimieren
    1. CPU in Light-Sleep während Sensor-Aufwärmung
      Du könntest den ESP32 in einen Light-Sleep (oder Modem-Sleep) versetzen, während der Sensor seine 10 Sekunden braucht. Dann wacht die CPU erst kurz vor Ablauf dieser Zeit auf, liest den Sensor schnell aus, sendet und geht wieder in Deep-Sleep.
      Du gewinnst dadurch ein paar mA, weil die CPU im Light-Sleep weniger verbraucht als im aktiven Betrieb.
      Ein Teilstrom bleibt aber bestehen, weil der Sensor ja trotzdem eingeschaltet ist (die höchste Last geht vermutlich auf das Konto des Sensors).

    2. Parallelisierung
      Falls du während der 10 s noch andere Aufgaben hast (z.B. die LMIC-Sendevorbereitung), kannst du sie in diese Warm-up-Zeit legen, damit kein Leerlauf entsteht. Das vermeidet zusätzliche Aktivphasen.

    3. Weitere Hardware-Fresser ausschalten

      1. Bluetooth via btStop().

      2. Debug-Ausgaben oder serielle Schnittstelle nach dem Start beenden, wenn nicht benötigt.

      3. Auf dem Entwicklungsboard: ggf. LED/Regler minimieren, falls möglich.

Fazit

  • Am meisten bringt es, den Sensor selbst zu optimieren (kürzer aufwärmen, seltener messen, alternatives Sensormodell wählen).
  • Beim ESP32 kannst du während der Sensor-Aufwärmphase noch in einen LightSleep wechseln oder zumindest den Takt reduzieren. Deep-Sleep geht leider nicht, wenn du unmittelbar danach messen willst – du wärst ja sonst „weg“.
  • Der größte Hebel ist meistens, die Anzahl der Messungen zu verringern oder einen Sensor mit kürzerer Aufwärmzeit zu verwenden.

Wenn du wirklich alle 30 Sekunden messen musst und der Sensor 10 Sekunden braucht, ist das Verhältnis natürlich ungünstig – dann lieber seltener messen (z.B. alle paar Minuten) oder alternativ nach einem anderen Messprinzip (z.B. Drucksensor, kapazitiver Sensor) suchen, um diese lange Aktivphase zu umgehen.

4. Prompt

Prompt

Welche minimale Taktfrequenz soll ich nutzen?

Antwort

Auf den klassischen ESP32-Chips (etwa der Serie ESP32-WROOM) liegt die unterste offiziell unterstützte Taktfrequenz bei 80 MHz. Das ist auch der Wert, auf den viele Projekte im Energiesparmodus heruntergehen.

  • 80 MHz gilt als Standard-Minimalwert, der alle üblichen Peripherien (I²C, ADC, UART usw.) noch stabil bedient.
  • Mit spezieller Konfiguration (und entsprechend angepassten Peripherietakten) könnte man theoretisch noch weiter herunter, das ist jedoch nicht offiziell von Espressif unterstützt und kann schnell zu Timing-Problemen führen.
  • Für den Arduino-/IDF-Standardbetrieb ist deshalb 80 MHz praktisch die niedrigstezuverlässige Taktfrequenz, bei der man noch alle Funktionen nutzen kann.

Wenn du also Strom sparen möchtest und das Wi-Fi/LoRaWAN-Senden nicht in Echtzeit hohe Rechenleistung braucht, ist 80 MHz erfahrungsgemäß das beste „untere“ Limit.

5. Prompt

Prompt

Ich habe den Lightsleep eingebaut. Was kann ich noch tun?

Antwort

Du hast bereits mehrere wichtige Schritte umgesetzt, um den Stromverbrauch zu senken (Deep Sleep, CPU-Frequenz reduziert, Light-Sleep während der Sensor-Aufwärmphase usw.). Wenn trotzdem noch eine längere Aktivphase mit nennenswertem Stromverbrauch bleibt, kommen nur noch ein paar Feinjustierungen oder eher hardwareorientierte Maßnahmen in Frage:

  1. Intervall seltener wählen
    Der stärkste Hebel, wenn der Sensor 10 s Aufwärmzeit braucht:
    Seltenere Messungen. Jede Messung verursacht diese 10 s Aktivphase, egal ob du LightSleep oder sonstige Tricks nutzt.
    Beispiel: Statt alle 60 Sekunden zu messen, nur alle 5 Minuten. Dann hast du nur 1/5 des bisherigen Energieverbrauchs.
  2. Sensor-Parallelisierung (wenn möglich)
    Wenn du innerhalb dieser 10 s ohnehin warten musst, versuche:
    1. Den LMIC-Sendevorgang (ABP, also kein Join) ganz oder teilweise in diese 10 s einzubauen.

    2. Die CPU ist dann nicht völlig inaktiv, sondern macht in dieser Zeit den LoRa-Upload – so sparst du eine zusätzliche Aktivphase.

    3. Ebenfalls kannst du initiale Tasks (Serial-Befehle, RTC-Status etc.) in diese Warm-up-Zeit legen.

  3. Hardware-Leckströme minimieren
    Gerade wenn das Messintervall relativ groß ist, dominieren alle kleinen Dauerströme. Typische Optimierungen:
    1. Board-spezifische Bauteile abschalten oder entfernen
      USB-Seriell-Chip (CP2102, CH340) zieht ein paar mA. Falls du keinen USB-Zugang mehr brauchst, kann man bei manchen Boards die 5 V-Leitung oder den Chip selbst „entkoppeln“.
      LDO-Regler mit niedrigem Ruhestrom (I<sub>q</sub>) benutzen. Manche StandardBoards haben leider einen LDO mit hohem Eigenverbrauch.
      Onboard-Power-LED oder andere Status-LEDs abklemmen/auslöten – die kleinen LEDs können 1–2 mA brauchen.
    2. Bluetooth definitiv ausschalten
      Auf dem ESP32 kann man mit btStop(); oder passender BoardDefinition/Bibliothek das Bluetooth-Subsystem abschalten.

    3. Debug-Pins / Debug-LED abschalten**
      Falls du noch Debug-Ausgaben hast (LMIC_DEBUG_LEVEL oder Serial-DebugMeldungen), das kostet nicht riesig viel, aber immerhin ein bisschen.

  4. Alternative Sensoren oder kürzere Warm-up
    Falls dein Ultraschallsensor wirklich zwingend 10 s braucht, könntest du langfristig überlegen:
    1. Maxbotix-Alternative mit kürzerem Start – manche Modelle brauchen weniger Aufwärmzeit oder messen quasi „on-the-fly“.
    2. Je nach Anwendungsfall einen Drucksensor oder kapazitiven Füllstandssensor, die oft sofort messen können (kein Aufwärmen) und niedrigen Strom haben.
    3. Heuristik: Wenn dein Medium (z.B. Füllhöhe) sich langsam ändert, könnte selteneres Messen völlig ausreichen.

Fazit

Wenn du Light-Sleep während der Warm-up-Phase eingebaut hast und die CPU-Taktung reduziert ist, sind die nächsten großen Hebel:

  1. Seltenere Messungen (Intervall hochsetzen).
  2. Parallelisierung der LoRa-Sendephase mit der Warm-up-Zeit, damit du keine zusätzliche Wartephase hast.
  3. Hardware-Optimierungen (Board-Leckströme, LED, USB-Serial-Chip, effizienter Regler).
  4. Eventuell anderen Sensor mit kürzerer Aufwärmzeit nutzen.

Das sind letztlich die Hauptpunkte, um den Stromverbrauch weiter zu senken.

6. Prompt

Prompt

ok. Alle Punkte abgearbeitet. Hier mein finaler Code: <Quellcode.abp>

Antwort

Glückwunsch, dein finaler Code setzt bereits die wichtigsten Energiesparmaßnahmen um:

  1. Light Sleep während der Sensor-Aufwärmzeit (US_WARMUP_MS),
  2. Deep Sleep für den Ruhemodus,
  3. Abschalten von WiFi,
  4. Reduzierte CPU-Frequenz (80 MHz),
  5. LMIC-Zustand im RTC sichern (kein erneutes Join, ABP spart weitere Energie).

Damit bist du schon sehr weit unten im Stromverbrauch. Wenn du noch Fein-Tuning betreiben willst, findest du hier ein paar letzte Ansätze:

  1. Bluetooth explizit ausschalten
    Wenn du ein Modul hast, bei dem Bluetooth aktiv ist, könnte noch etwas Strom fließen:
    #ifdef ESP32
        btStop(); // Bluetooth ausschalten
    #endif
    Je nach Board-Konfiguration kann das ein paar mA sparen.
  2. Serielle Ausgaben und USB-Chip minimieren
    Wenn du nach dem Debuggen keine serielle Ausgabe mehr brauchst, Serial frühzeitigbeenden, damit die UART-Peripherie abgeschaltet ist.
    Auf einem Entwicklungsboard (z.B. NodeMCU, WROOM-DevKit) zieht der USB-SerialKonverter (CH340, CP2102 etc.) dauerhaft Strom. Das kannst du nur verhindern, indem du das Board modifizierst oder den 5 V-Zweig vom USB-Chip trennst. Für echten Batteriebetrieb empfehlen sich Boards mit sehr niedrigem Ruhestrom.
  3. Sensor-Technik oder Mess-Intervall anpassen
    10 s Aufwärmzeit ist groß. Wenn das wirklich erforderlich ist und du häufiger messen musst (z.B. alle 30 Sekunden), bleibt der Durchschnittsstrom hoch. Am besten: Intervall verlängern oder Sensor wechseln.
    Manche Ultraschallsensoren, kapazitive Füllstandssensoren oder Drucksensoren benötigen weniger (oder gar keine) Warm-up-Zeit.
  4. Sendeleistung oder Datenrate anpassen
    In der LMIC-Initialisierung nutzt du LMIC_setDrTxpow(DR_SF7,14);. Je nach Abstand zum Gateway lässt sich die Sendeleistung vielleicht auf 10 dBm oder 8 dBm reduzieren.
    Oder du wählst einen kleineren SF (wenn Reichweite und Netzabdeckung das erlauben).

Fazit

Dein Code ist jetzt auf einem sehr guten Energiespar-Level. Die nächsten Einsparungen erfordern eher Hardware-Anpassungen (anderer Sensor, Board ohne USB-Bridge) oder das Verringern der Mess-/Sende-Häufigkeit. Gerade die 10 s Warm-up-Takt und das Entwicklungsboard (ggf. mit USB-Chip & LED) sind die größten Stellschrauben für weitere Optimierungen.

Kontakt

Prof. Dr. Klaus-Uwe Gollmer
Prof. Dr. Klaus-Uwe Gollmer, Prof. Dr.
Professor FB Umweltplanung/Umwelttechnik - FR Informatik

Kontakt

+49 6782 171223

Standort

Birkenfeld | Gebäude 9917 | Raum 30

Sprechzeiten

nach Vereinbarung per E-mail oder telefonisch
back-to-top nach oben