Lektionens syfte
I den här lektionen ska eleverna fokusera på att optimera sitt IoT-system för långsiktig stabilitet och prestanda. Efter att ha integrerat och testat systemet är det viktigt att förfina projektet genom att hantera potentiella problem som prestandaflaskhalsar, sensornoggrannhet och nätverksstabilitet. Eleverna kommer att finjustera olika aspekter av sitt system, inklusive sensoravläsningar, uppdateringshastigheter, strömförbrukning och felhantering, så att systemet fungerar smidigt och effektivt under längre perioder.
Efter denna lektion kommer eleverna att ha ett stabilt och optimerat IoT-system redo för driftsättning.
Introduktion
Nu när ni har testat ert IoT-system och bekräftat dess grundläggande funktionalitet, är det dags att optimera det för bättre prestanda och stabilitet. Optimering säkerställer att systemet kan köras under längre perioder utan att krascha eller bli instabilt. Det omfattar hantering av sensornoggrannhet, effektiv databehandling, optimering av uppdateringshastigheter och säkerställande av att WiFi-anslutningen förblir stabil över tid. I den här lektionen går vi igenom flera centrala optimeringar som kommer att hjälpa er att förbättra tillförlitligheten och prestandan i ert IoT-projekt.
Lista över nödvändiga komponenter:
![]() |
AHT10 Hög precision temperatur- och luftfuktighetssensor |
![]() |
TTGO T-Display ESP32 16MB med WiFi, Bluetooth och 1.1" färg LCD-skärm |
![]() |
Dupont-kablar 40 st |
Steg 1: Optimering av sensoravläsningar
Ert IoT-system samlar in temperatur- och luftfuktighetsdata från AHT10-sensorn. För att säkerställa att avläsningarna är noggranna och inte fluktuerar i onödan, kan ni överväga följande strategier:
-
Finjustering av sensorintervall
-
Undvik överflödig sensorförfrågan: Konstant förfrågan kan orsaka datafluktuationer eller felaktiga avläsningar. Justera intervallet mellan förfrågningar efter era användningsbehov. Om ni till exempel övervakar rumstemperatur, är en avläsning varannan sekund oftast tillräckligt. I koden kan ni justera delay-parametern:
delay(2000); // Vänta 2 sekunder mellan sensoravläsningarna
-
-
Filtrering av sensordata
-
Använd glidande medelvärde (smoothing): Sensoravläsningar kan vara utsatta för små fluktuationer på grund av miljöfaktorer. För att öka stabiliteten kan ni implementera ett enkelt glidande medelvärde som minskar brus i data:
float smoothedTemperature = (previousTemperature + newT) / 2.0; float smoothedHumidity = (previousHumidity + newH) / 2.0;
Detta ger mer stabila värden genom att medelvärdesbilda den nuvarande avläsningen med den föregående.
-
Steg 2: Styrning av uppdateringsfrekvens för TFT-displayen
TFT-displayen uppdateras i realtid för att visa sensordata. Snabba uppdateringshastigheter kan dock orsaka flimmer, sänka systemets hastighet eller öka strömförbrukningen.
-
Minska onödiga uppdateringar
-
Uppdatera endast vid signifikant ändring: Istället för att uppdatera displayen i varje loop, kan ni endast uppdatera när sensordata ändras markant. Detta minskar systembelastningen och flimmer:
if (abs(nearestT - previousT) > 0.1 || abs(nearestH - previousH) > 0.1) { tft.fillScreen(TFT_BLACK); // Rensa 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); }
-
-
Styrning av skärmens ljusstyrka
-
Optimera strömförbrukningen: Om ert system körs på batteri kan det vara lönsamt att sänka bakgrundsbelysningen när systemet är i viloläge eller vid låg belysning. Många displayer kan styra bakgrundsbelysningen via kod:
analogWrite(TFT_BACKLIGHT_PIN, brightnessLevel); // Justera ljusstyrkan
-
Steg 3: Optimering av WiFi och webbserverstabilitet
WiFi-anslutning är avgörande för att visa sensordata på en webbsida, men instabila anslutningar kan få systemet att misslyckas.
-
Auto-återanslutning för WiFi
-
Återanslut automatiskt: Systemet bör automatiskt försöka återupprätta anslutningen om den bryts:
if (WiFi.status() != WL_CONNECTED) { WiFi.begin(ssid, password); Serial.println("Återupprättar WiFi-anslutning..."); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Försöker igen..."); } Serial.println("WiFi anslutet"); }
-
-
Hantering av klientförfrågningar
-
Undvik överbelastning: ESP32:s webbserver har begränsade resurser. Begränsa antalet samtidiga klienter eller implementera en enkel belastningshantering:
if (WiFi.softAPgetStationNum() > MAX_CLIENTS) { Serial.println("För många klienter anslutna!"); server.close(); }
-
Steg 4: Felhantering och stabilitetsåtgärder
-
Hantering av sensorfel
-
Mjuk omstart: Om sensorn tillfälligt felar, bör systemet inte krascha, utan försöka igen:
if (!aht.begin()) { Serial.println("Sensorfel. Försöker igen..."); delay(1000); } else { Serial.println("Sensor återställd!"); }
-
-
Watchdog-timer
-
Automatisk återställning: Använd ESP32:s inbyggda watchdog (WDT) för automatisk omstart vid systemhängning:
esp_task_wdt_init(5, true); // Timeout på 5 sekunder esp_task_wdt_add(NULL); // Lägg till aktuell tråd // I loop(): esp_task_wdt_reset(); // Nollställ watchdog
-
Steg 5: Slutsats om optimering
Genom att använda dessa tekniker uppnår ni ett system som:
-
Kör effektivt med optimerade sensorintervall och dataglättning.
-
Uppdaterar displayen endast vid relevanta ändringar, utan flimmer.
-
Hanterar WiFi-anslutningar robust med automatisk återanslutning.
-
Undviker överbelastning av webbservern.
-
Har inbyggd felhantering och automatisk omstart vid kritiska fel.
Avslutning
Optimering av ert IoT-system för stabilitet är avgörande för användning i verkliga applikationer. Denna lektion har visat er hur ni finjusterar sensoravläsningar, styr displayuppdateringar, hanterar WiFi-anslutningar och implementerar robust felhantering. Med ett stabilt och optimerat system är ni nu redo att tryggt driftsätta ert IoT-projekt i hemnätverk, miljöövervakning eller mer avancerade applikationer.


