Image of eBits Academy airquality illustration

Optimera systemet för stabilitet – Serien om en luftkvalitetsstation, avsnitt 19

  • May 13, 2025
  • |
  • Teofil Corad

Lektionens syfte
I den här lektionen fokuserar eleverna på att optimera sitt IoT-system för långvarig stabilitet och prestanda. Efter integrering och testning är det viktigt att förfina projektet genom att hantera möjliga problem som flaskhalsar i prestandan, sensornoggrannhet och nätverksstabilitet. Eleverna finjusterar olika delar av systemet, bland annat sensoravläsningar, uppdateringshastigheter, strömförbrukning och felhantering, så att det körs smidigt och effektivt under längre perioder.
I slutet av lektionen har eleverna ett stabilt och optimerat IoT-system som är redo att tas i bruk.

Introduktion
Nu när ni har testat IoT-systemet och bekräftat grundfunktionerna är det dags att optimera det för bättre prestanda och stabilitet. Optimering säkerställer att systemet kan köras längre utan att krascha eller bli instabilt. Det omfattar hantering av sensornoggrannhet, effektiv databehandling, optimering av uppdateringshastigheter och säkerställande av en stabil WiFi-anslutning över tid. I den här lektionen går vi igenom flera centrala optimeringar som hjälper er att förbättra IoT-projektets tillförlitlighet och prestanda.


Lista över nödvändiga komponenter:

 


Steg 1: Optimera sensoravläsningar

Ert IoT-system samlar in temperatur- och luftfuktighetsdata från AHT10-sensorn. För att säkerställa att avläsningarna är korrekta och inte varierar i onödan kan ni överväga följande strategier:

  1. Finjustera sensorintervall

    • Undvik onödigt täta sensorförfrågningar: Ständiga förfrågningar kan orsaka variationer i data eller felaktiga avläsningar. Anpassa intervallet mellan förfrågningarna till er tillämpning. Om ni exempelvis övervakar rumstemperaturen räcker det vanligtvis med en avläsning varannan sekund. I koden kan ni justera delay-parametern:

    delay(2000); // Vent 2 sekunder mellem sensoraflæsninger
  2. Filtrera sensordata

    • Använd glidande medelvärde (utjämning): Sensoravläsningar kan variera något på grund av miljöfaktorer. För att öka stabiliteten kan ni implementera ett enkelt glidande medelvärde som minskar bruset i data:

    float smoothedTemperature = (previousTemperature + newT) / 2.0;
    float smoothedHumidity    = (previousHumidity + newH) / 2.0;

    Det ger stabilare värden genom att beräkna medelvärdet av den aktuella avläsningen och den föregående.


Steg 2: Hantera TFT-skärmens uppdateringshastighet

TFT-skärmen uppdateras i realtid för att visa sensordata. Snabba uppdateringshastigheter kan dock orsaka flimmer, göra systemet långsammare eller öka strömförbrukningen.

  1. Minska onödiga uppdateringar

    • Uppdatera bara vid betydande förändringar: I stället för att uppdatera skärmen i varje loop kan ni uppdatera bara när sensordata förändras avsevärt. Det minskar systembelastningen och flimret:

    if (abs(nearestT - previousT) > 0.1 || abs(nearestH - previousH) > 0.1) {
      tft.fillScreen(TFT_BLACK);  // Ryd skærmen
      tft.drawString(String(nearestT, 1), 10, 40, 7);
      tft.drawString("C",             100, 100, 3);
      tft.drawString(String(nearestH, 1), 10, 130, 7);
      tft.drawString("% rH",          100, 100, 3);
    }
  2. Hantera skärmens ljusstyrka

    • Optimera strömförbrukningen: Om systemet drivs med batteri kan det löna sig att sänka bakgrundsbelysningen när systemet är inaktivt eller om omgivningen är mörk. Många skärmar kan styra bakgrundsbelysningen via kod:

    analogWrite(TFT_BACKLIGHT_PIN, brightnessLevel); // Justér lysstyrke

Steg 3: Optimera WiFi och webbserverns stabilitet

WiFi-anslutning är avgörande för att visa sensordata på en webbsida, men instabila anslutningar kan få systemet att sluta fungera.

  1. Automatisk återanslutning till WiFi

    • Återanslut automatiskt: Systemet bör automatiskt försöka återansluta om anslutningen bryts:

    if (WiFi.status() != WL_CONNECTED) {
      WiFi.begin(ssid, password);
      Serial.println("Genopretter WiFi-forbindelse...");
      while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Forsøger igen...");
      }
      Serial.println("WiFi forbundet");
    }
  2. Hantera klientförfrågningar

    • Undvik överbelastning: ESP32:s webbserver har begränsade resurser. Begränsa antalet samtidiga klienter eller implementera enkel belastningshantering:

    if (WiFi.softAPgetStationNum() > MAX_CLIENTS) {
      Serial.println("For mange klienter tilsluttet!");
      server.close();
    }

Steg 4: Felhantering och stabilitetsåtgärder

  1. Hantera sensorfel

    • Mjuk omstart: Om sensorn tillfälligt slutar fungera bör systemet inte krascha utan försöka igen:

    if (!aht.begin()) {
      Serial.println("Sensorfejl. Forsøger igen...");
      delay(1000);
    } else {
      Serial.println("Sensor genoprettet!");
    }
  2. Watchdog-timer

    • Automatisk återställning: Använd ESP32:s inbyggda watchdog (WDT) för automatisk omstart om systemet hänger sig:

    esp_task_wdt_init(5, true);   // Timeout på 5 sekunder
    esp_task_wdt_add(NULL);       // Tilføj nuværende tråd
    
    // I loop():
    esp_task_wdt_reset();         // Nulstil watchdog

Steg 5: Slutsats om optimering

Genom att använda dessa tekniker får ni ett system som:

  • Körs effektivt med optimerade sensorintervall och datautjämning.

  • Uppdaterar skärmen bara vid relevanta förändringar, utan flimmer.

  • Hanterar WiFi-anslutningar robust med automatisk återanslutning.

  • Undviker överbelastning av webbservern.

  • Har inbyggd felhantering och automatisk omstart vid kritiska fel.

Avslutning
Att optimera IoT-systemet för stabilitet är avgörande för användning i verkliga tillämpningar. Den här lektionen har visat hur ni finjusterar sensoravläsningar, styr skärmuppdateringar, hanterar WiFi-anslutningen och implementerar robust felhantering. Med ett stabilt och optimerat system är ni nu redo att tryggt ta IoT-projektet i bruk i hemnätverk, miljöövervakning eller mer avancerade tillämpningar.

Om mätningarna: Stationen i den här serien mäter temperatur och relativ luftfuktighet med AHT10. Det är mätningar av inomhusklimatet, inte direkta mätningar av CO2, VOC eller partiklar. Seriens benämning ”luftkvalitetsövervakning” ska förstås med denna begränsning.

Lämna en kommentar

Observera att kommentarer måste godkännas innan de publiceras.