Gas Sensor & ESP32
0 kommentarer

Välkommen till vårt sista blogginlägg i den här serien , där vi dyker in i den spännande världen av luftkvalitetsmätning med gassensorn MQ135 och ESP32 . Luftföroreningar är ett växande problem i vårt moderna samhälle och det är viktigt att övervaka luftkvaliteten för att skydda vår hälsa och miljö.


Idag ökar vi komplexiteten i projektet lite, men det är inget vi inte klarar av! I den här bloggen kommer vi att utforska hur gassensorn MQ135 och ESP32 , en kraftfull IoT-plattform, kan användas för att mäta olika föroreningar i luften som CO2, ammoniak, alkohol och andra skadliga gaser. Vi guidar dig genom hela processen med att ansluta MQ135-sensorn till ESP32 och ställa in koden för att analysera luftkvalitetsdata i realtid.


Vårt mål med den här bloggen är att ge dig en grundlig förståelse för hur du kan bygga ditt eget luftkvalitetsmätsystem med hjälp av MQ135-sensorn och ESP32 och skicka dessa data till en lokal hemmasode .

Så låt oss dyka ner i detaljerna och utforska potentialen hos gassensorn MQ135 och ESP32-plattformen för att skapa ett robust och pålitligt mätsystem för luftkvalitet.

Nödvändiga komponenter för projektet:

MQ-135 gassensor
ESP32
Bakbord
1k Ohm motstånd
lysdioder
Summer
eller
Luftkvalitetsmätsystem Kit

  1. MQ135-gassensorn : Denna sensor är designad för att mäta olika typer av luftföroreningar som CO2, ammoniak och alkohol. Det ger oss luftkvalitetsdata i form av PPM (parts per million).

  2. ESP32 : ESP32 är en kraftfull mikrokontrollerplattform idealisk för IoT-applikationer. Den har inbyggd WiFi-funktion, vilket innebär att den kan ansluta till Internet och kommunicera med andra enheter eller molntjänster. ESP32 fungerar som hjärnan i vårt projekt och kontrollerar hela processen med att mäta luftkvaliteten och rapportera data.

ESP32:s WiFi-kapacitet är avgörande i detta projekt av flera skäl:

  • Det gör att ESP32 kan ansluta till vårt lokala WiFi-nätverk , vilket ger oss tillgång till Internet och möjligheten att skicka data till externa enheter eller molntjänster.
  • Genom att skapa en webbserver på ESP32 kan vi skapa ett användargränssnitt där användare kan se och övervaka luftkvalitetsdata i realtid via en webbläsare.
  • WiFi-funktionaliteten möjliggör också en WebSocket-anslutning, vilket gör att vi kan skicka luftkvalitetsuppdateringar i realtid till klientenheter utan att behöva göra upprepade HTTP-förfrågningar.

I koden har vi initierat WiFi-anslutningen n genom att ange namnet på vårt WiFi-nätverk (SSID) och lösenordet . ESP32 ansluter till WiFi-nätverket och tilldelas en IP-adress som vi skriver ut i seriemonitorn . Vi kopierar denna IP-adress och klistrar in den i vårt sökfält i vår webbläsare . * STIGA PÅ *
Detta är webbplatsen som vi skickar data till.

Sedan skapar vi en webbserver och en WebSocket-anslutning . Webbservern tillhandahåller en enkel HTML-sida som visar luftkvaliteten och dess status. WebSocket-anslutningen används för att skicka luftkvalitetsuppdateringar till klientenheter via ett JSON-paket . Det kanske låter lite förvirrande nu, men snart är det inte så läskigt.

I loop-funktionen mäter vi luftkvaliteten med hjälp av MQ135-sensorn och skickar data till WebSocket-klienter . Vi kontrollerar även luftkvalitetsgränserna och styr en grön lysdiod , en röd lysdiod och en summer beroende på luftkvaliteten. ESP32 fortsätter att upprepa denna process i slingan med en lämplig fördröjning.

Förutom gassensorn MQ135 och ESP32 använder vi även följande komponenter i vårt projekt:

  1. Breadboard : En breadboard är en bekväm plattform för att tillfälligt skapa prototyper av elektroniska kretsar. Det gör att vi kan ansluta våra komponenter och ledningar på ett strukturerat och flexibelt sätt utan att behöva löda ihop dem.

  2. 1k ohm motstånd : Motståndet används som en del av kretsen för att skydda vår summer från att överbelastas och för att upprätthålla en tillräcklig ström genom kretsen.

  3. Summer : En summer är en elektromekanisk anordning som kan generera ljud eller toner. I vårt projekt använder vi summern för att avge ljudsignaler beroende på luftkvaliteten. När luftkvaliteten är bra kommer summern att vara tyst, men när luftkvaliteten överstiger en viss tröskel kommer summern att generera ett larmljud.

  4. Grön lysdiod : Den gröna lysdioden lyser när luftkvaliteten är bra och det inte finns några förhöjda föroreningar. Det ger en visuell indikation för användaren att luften är säker och av hög kvalitet.

  5. Röd lysdiod : Den röda lysdioden lyser när luftkvaliteten överskrider ett visst tröskelvärde och det finns ökade föroreningar. Detta signalerar till användaren att luftkvaliteten är dålig eller farlig och kräver åtgärder.

Med alla dessa komponenter tillsammans kan vi åstadkomma en heltäckande lösning för övervakning av luftföroreningar som kombinerar sensoravläsningar, dataöverföring via Wi-Fi, ljud- och bildåterkoppling till användarna och ett användarvänligt gränssnitt.

Innan vi börjar titta på koden för detta projekt är det viktigt att notera att gassensorn MQ135 inte är kalibrerad. Projektet är utformat för att demonstrera sensorns funktionalitet och ge en grundläggande förståelse för övervakning av luftföroreningar. Om du vill få mer exakta PPM-värden (Parts Per Million) kräver det en kalibrering av sensorn med hjälp av specifika procedurer och metoder.

För att förenkla processen och säkerställa en smidig implementering av sensorn använder vi MQ135-biblioteket som utvecklats av GeorgK. Du kan ladda ner och installera detta bibliotek genom att klicka HÄR . Här är en steg-för-steg-guide för att installera MQ135-biblioteket i Arduino IDE:

  1. Ladda ner biblioteket

  2. Öppna Arduino IDE.

  3. Gå till Sketch > Inkludera bibliotek > Lägg till .ZIP-bibliotek...

  4. Välj den nedladdade filen.

  5. Klicka på knappen "Öppna".

  6. Vänta på ett meddelande i Arduino IDE:s statusfält som bekräftar att biblioteket har installerats.

När MQ135-biblioteket är installerat kan vi få våra PPM-värden med hjälp av följande två rader:

MQ135 gasSensor = MQ135(A0); float air_quality = gasSensor.getPPM();

Det är dock viktigt att betona att kalibrering av MQ135-sensorn är avgörande för att få exakta och tillförlitliga luftkvalitetsmätningar. För att kalibrera sensorn rekommenderas det att köra en dedikerad kalibreringskod i 12 till 24 timmar och sedan registrera RZERO-värdet , vilket är en nyckelparameter för sensornoggrannhet.

Du kan använda denna kalibreringskod:

# include "MQ135.h" void setup (){ Serial . börja ( 9600 ); } void loop () { MQ135 gasSensor = MQ135(A0); // Fäst sensorn till stift A0 float rzero = gasSensor.getRZero(); Seriell . println (rnoll); fördröjning ( 1000 ); }

Efter att ha fått RZERO-värdet. Sätt RZERO-värdet i biblioteksfilen du laddade ner "MQ135.h" genom att definiera detta värde så här #define RZERO (RZERO-värdet infogas här (ta bort alla parenteser)).

Till exempel: #define RZERO 123 456

Projektcykeln

I vårt projekt finns tre komponenter kopplade till vår ESP32: Summer, två lysdioder och gassensorn MQ135.
Men sättet vi ansluter dessa komponenter till vår ESP32 är inte på samma sätt som vi gjorde det med vår Arduino UNO.

På Arduino Uno har du ett antal GPIO-stift tillgängliga redo att användas. Du kan enkelt ansluta komponenter direkt till dessa stift med hjälp av bygelkablar. Arduino Uno har även en färdig header-kontakt som gör det enkelt att ansluta och koppla bort komponenter utan lödning.

Å andra sidan kräver ESP32 ett lite annorlunda tillvägagångssätt. ESP32 är inte utrustad med en färdig header-kontakt, så du måste ansluta den till en breadboard eller lödstift direkt till ESP32-WROOM-modulen. Det betyder att du måste använda bygelledningar eller lödtekniker för att ansluta komponenter till ESP32-stiften.

Båda metoderna har sina fördelar och nackdelar. Arduino Uno är mer användarvänlig och lämplig för nybörjare, då den har en tydlig struktur och enkel anslutning av komponenter. ESP32 ger dig större flexibilitet och möjlighet att anpassa dina anslutningar efter behov, men kräver lite mer teknisk kunskap och arbete.

Summern är ansluten till stift 5 på ESP32-kortet. Dessutom kräver summern anslutning till både 5V-anslutningen och jordanslutningen (GND) på ESP32-kortet för att fungera korrekt. Om du har följt våra tidigare projekt kommer du att känna till dessa kopplingar.

De två lysdioderna är anslutna till stift 2 respektive stift 4 på ESP32-kortet. För att säkerställa korrekt funktion av lysdioderna och förhindra överdrivet strömflöde , är ett 1k ohm motstånd anslutet i serie med varje lysdiod . Motståndet hjälper till att begränsa strömmen och skyddar lysdioderna från skador.

MQ135-gassensorn är ansluten till stift 34 på ESP32-kortet. Dessutom måste sensorn vara ansluten till 5V-anslutningen och jord (GND) på ESP32-kortet för att fungera korrekt. Sensorn registrerar luftkvalitetsdata och använder en inbyggd analog-till-digital-omvandling för att skicka dessa data till ESP32-kortet.

Genom att korrekt ansluta dessa komponenter till ESP32-kortet kan vi ansluta, samla in data och styra lysdioderna och summern baserat på luftkvalitetsavläsningar från MQ135-sensorn.


Koda

 # include <WiFi.h>
 # include <AsyncTCP.h>
 # include <ESPAsyncWebServer.h>
 # include <AsyncWebSocket.h>
 # include <MQ135.h>
 
const char *ssid = "skriv namnet på ditt internet här" ;
 const char *password = "skriv koden för ditt internet här" ;

 AsyncWebServer server( 80 );
 AsyncWebSocket ws( "/ws" );

 const char index_html[] PROGMEM = R "rawliteral(
 <!DOCTYPE html>
 <html>
 <huvud>
 <title>IOT-system för övervakning av luftföroreningar</title>
 </head>
 <kropp> 
<h1>IOT-system för övervakning av luftföroreningar</h1>
 <h2>Luftkvaliteten är <span id=" air-quality ">-</span> PPM</h2>
 <p id=" air-quality-status ></p>

 <script>
 var socket = new WebSocket(" ws: //" + plats.värdnamn + "/ws");

 socket.onmessage = function(event) {
 var data = JSON.parse(event.data);
 document.getElementById( "air-quality" ).textContent = data.airQuality;

 var airQualityStatusElement = document.getElementById( "air-quality-status" ) ;

 if (data.airQuality >= 20 ) { 
airQualityStatusElement.textContent = "Dålig luftkvalitet" ;
 } annat {
 airQualityStatusElement.textContent = "God luftkvalitet" ;
 }
 };
 </script>
 </body>
 </html>
 )rawliteral ";


 MQ135 gasSensor(34); // Definiera MQ135-sensorinstans

 const int greenLedPin = 2; // Grön LED-stift
 const int redLedPin = 4; // Röd LED-stift
 const int buzzerPin = 5; // Buzzer pin
 const int goodAirQualityThreshold = 20; // Tröskelvärde för god luftkvalitet


 void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType-typ, void *arg, uint8_t *data, size_t len) {
 if (typ == WS_EVT_CONNECT) {
 Serial.println(" WebSocket-klient ansluten "); 
} annat om (typ == WS_EVT_DISCONNECT) {
 Serial.println(" WebSocket-klienten frånkopplad ");
 }
 }

 void setup() {
 Serial.begin(115200);
 WiFi.begin(ssid, lösenord);

 while (WiFi.status() != WL_CONNECTED) {
 fördröjning(1000);
 Serial.println(" Ansluter till WiFi ... ");
 }

 IPAddress IP = WiFi.localIP();
 Serial.print(" Ansluten till WiFi . IP-adress: ");
 Serial.println(IP);

 pinMode(greenLedPin, OUTPUT);
 pinMode(redLedPin, OUTPUT);
 pinMode(buzzerPin, OUTPUT);

 server.on(" / ", HTTP_GET, [](AsyncWebServerRequest *request) { 
request->send_P(200, " text /html ", index_html);
 });

 ws.onEvent(onWsEvent);
 server.addHandler(&ws);
 server.begin();
 }

 void loop() {
 float airQuality = gasSensor.getPPM(); // Få luftkvalitetsdata i PPM

 // Förbered JSON-data
 String jsonData = " {\ "airQuality\": " + String (airQuality) + "}" ;

 // Skicka JSON-data till WebSocket-klienter
 ws.textAll(jsonData);

 // Kontrollera luftkvalitetströsklar och kontrollera summer och lysdioder
 if (airQuality <= goodAirQualityThreshold) { 
digitalWrite (greenLedPin, HIGH );
 digitalWrite (redLedPin, LOW );
 noTone (buzzerPin);
 } else if (airQuality > goodAirQualityThreshold) {
 digitalWrite (greenLedPin, LOW );
 digitalWrite (redLedPin, HIGH );
 ton (buzzerPin, 1000 ); 
} annat {
 digitalWrite (greenLedPin, LOW );
 digitalWrite (redLedPin, LOW );
 noTone (buzzerPin);
 }

 fördröjning ( 1000 ); // Justera fördröjningen efter dina behov
 }

Låt oss ta en närmare titt på koden och låt oss börja med en kort förklaring av den...

Koden börjar med att inkludera de nödvändiga biblioteken och skapa de nödvändiga objekten och variablerna . Vi använder WiFi-biblioteket för att ansluta till vårt Wi-Fi-nätverk och AsyncWebServer-biblioteket för att skapa en webbserver på ESP32-kortet.

Vi definierar även HTML-koden som ska visas på webbplatsen. Denna HTML-kod innehåller en plats där vi vill visa luftkvaliteten och dess status.

I inställningsfunktionen upprättar vi Wi-Fi-anslutningen och konfigurerar de nödvändiga GPIO-stiften som utgångsstift. Vi skapar också en HTTP-rutt till vår webbplats och lägger till en WebSocket-hanterare.

I loop-funktionen får vi luftkvalitetsdata från MQ135-sensorn med metoden gasSensor.getPPM() . Vi skapar en JSON-sträng med luftkvalitetsdata och skickar den till WebSocket-klienterna med ws.textAll(jsonData) .

Efter detta kontrollerar vi luftkvalitetsvärdet mot ett tröskelvärde ( goodAirQualityThreshold ) och styr summern och lysdioderna utifrån resultatet. Om luftkvaliteten är under eller lika med tröskelvärdet tänds den gröna lysdioden och summern stängs av. Om luftkvaliteten är över tröskeln tänds den röda lysdioden och summern aktiveras med en 1000 Hz-ton.

Slutligen finns det en kort fördröjning på 1 sekund innan koden upprepas.

Den inbäddade JavaScript-sektionen i HTML-koden använder en WebSocket för att ta emot JSON-data från ESP32-kortet. Dessa data används för att uppdatera luftkvalitetsvärdet och visa det på webbplatsen. Dessutom använder JavaScript-sektionen också en villkorlig kontrollstruktur för att ändra status för luftkvaliteten beroende på dess värde.

OK. Låt oss nu dyka in i varje avsnitt av koden och se om vi kan göra det vettigt:

 # include <WiFi.h>
 # include <AsyncTCP.h> 
# include <ESPAsyncWebServer.h>
 # include <AsyncWebSocket.h>
 # include <MQ135.h>

 const char *ssid = "skriv namnet på ditt internet här" ;
 const char *password = "skriv koden för ditt internet här" ;
 
AsyncWebServer server( 80 );
 AsyncWebSocket ws( "/ws" );

Den här delen av koden inkluderar de nödvändiga biblioteken och skapar objekt och variabler för att hantera Wi-Fi, webbserver och WebSocket-kommunikation.

Klipp ut följande hyperlänkar och installera dem på samma sätt som biblioteket. <MQ135.h> .

  1. Ladda ner biblioteket

  2. Öppna Arduino IDE.

  3. Gå till Sketch > Inkludera bibliotek > Lägg till .ZIP-bibliotek...

  4. Välj den nedladdade filen.

  5. Klicka på knappen "Öppna".

  6. Vänta på ett meddelande i Arduino IDE:s statusfält som bekräftar att biblioteket har installerats.

De bibliotek som inte är hyperlänkade är inbyggda bibliotek.
så.. Skiss --> Inkludera bibliotek --> Hantera bibliotek --> *Klicka på sökfältet och skriv in namnet på biblioteket du letar efter och tryck på 'Installera'*

#include <WiFi.h> : Detta bibliotek gör det möjligt för ESP32-kortet att ansluta till Wi-Fi-nätverket med hjälp av Wi-Fi-funktioner och metoder.

#include <AsyncTCP.h> : Detta bibliotek är ett asynkront TCP-bibliotek för ESP32 som tillåter icke-blockerande TCP-kommunikation.

#include <ESPAsyncWebServer.h> : Det här biblioteket tillhandahåller en asynkron webbserverklass för ESP32 som tillåter att servera HTTP-förfrågningar och skicka HTTP-svar asynkront.

#include <AsyncWebSocket.h> : Detta bibliotek tillåter skapandet av en asynkron WebSocket-server på ESP32-kortet. Den tillhandahåller WebSocket-funktionalitet för att skicka och ta emot data i realtid mellan klienter och server.

#include <MQ135.h> : Vi pratade lite om det här biblioteket tidigare i bloggen. Den är specifik för gassensorn MQ135 och tillhandahåller metoder för att få luftkvalitetsdata från sensorn.

const char *ssid = "skriv navnet på dit internet her"; : Den här raden definierar en teckensträngsvariabel som innehåller namnet (SSID) på ditt Wi-Fi-nätverk. Du måste ersätta "skriv in namnet på ditt internet här" med ditt faktiska nätverksnamn (SSID).

const char *password = "skriv koden for dit internet her"; : Den här raden definierar en teckensträngsvariabel som innehåller lösenordet för ditt Wi-Fi-nätverk. Du måste ersätta "skriv in koden för ditt internet här" med ditt faktiska lösenord.

AsyncWebServer server(80); : Den här raden skapar ett asynkront webbserverobjekt med portnummer 80, vilket är standardporten för HTTP-kommunikation. Detta objekt används för att betjäna HTTP-förfrågningar och hantera routing och leverans av webbsidor och resurser.

AsyncWebSocket ws("/ws"); : Den här raden skapar ett asynkront WebSocket-objekt med sökvägen "/ws". Detta objekt används för att etablera WebSocket-kommunikation och hantera WebSocket-händelser och meddelanden.

Dessa bibliotek och objekt är viktiga för att etablera Wi-Fi-anslutning, hantera webbserverfunktioner och implementera WebSocket-kommunikation i projektet.

 const char index_html[] PROGMEM = R "rawliteral(
 <!DOCTYPE html>
 <html>
 <huvud>
 <title>IOT-system för övervakning av luftföroreningar</title>
 </head>
 <kropp>
 <h1>IOT-system för övervakning av luftföroreningar</h1>
 <h2>Luftkvaliteten är <span id=" air-quality ">-</span> PPM</h2>
 <p id=" air-quality-status ></p>

 <script>
 var socket = new WebSocket(" ws: //" + plats.värdnamn + "/ws");

 socket.onmessage = function(event) {
 var data = JSON.parse(event.data);
 document.getElementById( "air-quality" ).textContent = data.airQuality;
 
var airQualityStatusElement = document.getElementById( "air-quality-status" ) ;

 if (data.airQuality >= 20 ) {
 airQualityStatusElement.textContent = "Dålig luftkvalitet" ;
 } annat {
 airQualityStatusElement.textContent = "God luftkvalitet" ;
 }
 };
 </script>
 </body>
 </html>
 )rawliteral "; 

Denna del av koden definierar en HTML-mall som används för att skapa webbgränssnittet för luftföroreningsövervakningssystemet. HTML-mallen innehåller följande element:

  • <h1> : Rubrikelementet visar texten " IOT Air Pollution Monitoring System " som huvudhuvudet på webbsidan.
  • <h2> : Detta element visar texten " Air quality is <span id="air-quality">-</span> PPM". Den innehåller också ett <span> -element med id "air-quality" där luftkvalitetsdata kommer att infogas dynamiskt.
  • <p> : Detta element med id " luftkvalitetsstatus " används för att visa statusmeddelandet baserat på luftkvaliteten.
  • <script> : Detta skriptelement skapar en WebSocket-anslutning till ESP32 med hjälp av den aktuella värdens IP-adress och sökvägen "/ws". När ett meddelande tas emot från WebSocket-anslutningen uppdateras HTML-elementen dynamiskt med JavaScript-kod. Luftkvaliteten visas i <span> -elementet med id "luftkvalitet" och statusmeddelandet uppdateras baserat på luftkvaliteten.

Denna HTML-mall tillhandahåller ett enkelt och interaktivt webbgränssnitt för att visa luftkvalitetsdata som tas emot från ESP32 via WebSocket-anslutningen.


 MQ135 gasSensor ( 34 ); // Definiera MQ135-sensorinstans

 const int greenLedPin = 2 ; // Grön LED-stift
 const int redLedPin = 4 ; // Röd LED-stift 
const int buzzerPin = 5 ; // Buzzer pin
 const int goodAirQualityThreshold = 20 ; // Tröskelvärde för god luftkvalitet 

Det här avsnittet av koden definierar olika variabler och instanser som används för att styra olika komponenter i projektet:

  • MQ135 gasSensor(34) ; : Detta skapar en instans av MQ135-sensorn och ansluter den till stift 34 på ESP32. Sensorn används för att mäta luftkvaliteten.

  • const int greenLedPin = 2 ; : Detta definierar en variabel greenLedPin , som är associerad med stift 2 på ESP32. Detta stift styr den gröna lysdioden som används för att indikera god luftkvalitet.

  • const int redLedPin = 4 ; : Detta definierar en variabel redLedPin , som är associerad med stift 4 på ESP32. Detta stift styr den röda lysdioden som används för att indikera dålig luftkvalitet.

  • const int buzzerPin = 5 ; : Detta definierar en variabel buzzerPin , som mappas till stift 5 på ESP32. Denna stift styr summern som används för att generera en ljudlarmsignal i händelse av dålig luftkvalitet.

  • const int goodAirQualityThreshold = 20 ; : Detta definierar en variabel goodAirQualityThreshold som representerar en tröskel för god luftkvalitet. Om den uppmätta luftkvaliteten ligger under detta tröskelvärde indikerar det god luftkvalitet och de gröna lysdioderna och summern är inaktiverade. Om luftkvaliteten överskrider tröskelvärdet indikerar det dålig luftkvalitet och de röda lysdioderna och summern aktiveras.

Dessa variabler och instanser används i huvudslingan för att uppdatera status för lysdioder och summer baserat på uppmätt luftkvalitet och tröskeln för god luftkvalitet.


 void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType-typ, void *arg, uint8_t *data, size_t len) {
 if (typ == WS_EVT_CONNECT) { 
Seriell . println ( "WebSocket-klient ansluten" ) ;
 } annat om (typ == WS_EVT_DISCONNECT) {
 Seriell . println ( "WebSocket-klient frånkopplad" );
 }
 } 

Den här kodbiten definierar en funktion som heter onWsEvent , som är en händelsehanterare för WebSocket-händelser. Denna funktion anropas när en händelse relaterad till WebSocket-anslutningen inträffar.

  • void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) : Detta är funktionens signatur, som anger parametrarna den tar emot.

  • A syncWebSocket *server : Detta är en pekare till AsyncWebSocket-servern som hanterar WebSocket-anslutningen.

  • AsyncWebSocketClient *client : Detta är en pekare till klienten som aktiverade händelsen.

  • AwsEventType type : Det här är den typ av händelse som inträffade. Det kan vara antingen WS_EVT_CONNECT om en klient är ansluten eller WS_EVT_DISCONNECT om en klient är frånkopplad.

  • void *arg : Detta är en generisk pekare till ytterligare argument som kan vara relevanta för händelsen.

  • uint8_t *data : Detta är en pekare till data som tas emot från klienten under händelsen.

  • size_t len ​​​​: Detta är längden på mottagna data.

Inuti funktionen finns en villkorlig kontrollstruktur ( if - else if ) som bestämmer vilken typ av händelse som har inträffat. Beroende på händelsetypen skrivs ett lämpligt meddelande ut till den seriella terminalen med Serial.println() . Om händelsen är WS_EVT_CONNECT skrivs " WebSocket-klient ansluten " ut. Om händelsen är WS_EVT_DISCONNECT skrivs " WebSocket client disconnected " ut.

Denna funktion kan användas för att hantera och reagera på händelser relaterade till WebSocket-anslutningen, t.ex. för att spela in när en klient ansluter eller kopplar från.

 void setup () { 
Seriell . börja ( 115200 );
 Wi-Fi . börja (ssid, lösenord);

 while ( WiFi .status() != WL_CONNECTED) {
 fördröjning ( 1000 );
 Seriell . println ( "Ansluter till WiFi..." ) ;
 }
 
IP-adress IP = WiFi . localIP ();
 Seriell . print ( "Ansluten till WiFi. IP-adress: " );
 Seriell . println (IP);

 pinMode (greenLedPin, OUTPUT );
 pinMode (redLedPin, OUTPUT );
 pinMode (buzzerPin, OUTPUT );
 
server.on( "/" , HTTP_GET, [](AsyncWebServerRequest *request) {
 request->send_P( 200 , "text/html" , index_html);
 });

 ws.onEvent(onWsEvent);
 server.addHandler(&ws);
 server. Börja ();
 }
  • Serial.begin(115200) : Denna linje initierar den seriella kommunikationen mellan ESP32 och datorn via USB-porten. Funktionen Serial.begin() ställer in önskad baudhastighet (115200 bps i det här fallet) för dataöverföring mellan enheterna. Detta gör att seriedata kan skickas och tas emot, som kan användas för felsökning och felsökning.

  • WiFi.begin(ssid, password) : Här försöker ESP32 ansluta till ett trådlöst nätverk genom att anropa WiFi.begin() -funktionen och ange SSID (nätverksnamn) och lösenord som parametrar. ESP32 kommer att använda denna information för att identifiera och ansluta till det specifika nätverket.

  • while (WiFi.status() != WL_CONNECTED) { ... } : Detta är en loop som körs tills ESP32 har anslutit till det trådlösa nätverket. I varje iteration av loopen kontrolleras Wi-Fi-statusen genom att anropa WiFi.status() -funktionen. Om statusen inte är "WL_CONNECTED" (dvs. ESP32 är inte ansluten), kommer slingan att fortsätta att köra och vänta i 1 sekund med delay(1000) . Dessutom skrivs meddelandet "Ansluter till WiFi..." ut med Serial.println() för att informera användaren om processen.

  • IPAddress IP = WiFi.localIP() : När ESP32 har anslutits till det trådlösa nätverket använder denna linje funktionen WiFi.localIP() för att tilldelas IP-adressen från den lokala Wi-Fi-routern. IP-adressen lagras sedan i variabeln IP av typen IPAddress .

  • pinMode(greenLedPin, OUTPUT) , pinMode(redLedPin, OUTPUT) , pinMode(buzzerPin, OUTPUT) : Dessa rader konfigurerar tillståndet för GPIO-stiften som används för att styra lysdioder och summer. Att anropa pinMode() -funktionen med parametern OUTPUT anger att GPIO-stiften ska fungera som utgångar. Detta innebär att de kan styra tillståndet (på/av) för de anslutna komponenterna.

  • server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { ... }) : Definierar här en HTTP GET-begäranhanterarefunktion för roten på webbservern ("/"). När en klient skickar en GET-begäran till root, utlöses denna funktion. Funktionen använder metoden request->send_P() för att skicka HTTP-statuskoden 200 (OK) och HTML-innehållet från index_html till klienten.

  • ws.onEvent(onWsEvent) : Den här raden registrerar onWsEvent funktionen som en WebSocket-händelsehanterare. När en WebSocket-händelse inträffar kommer onWsEvent funktionen att anropas med relevant information om händelsen.

  • server.addHandler(&ws) : Genom att lägga till WebSocket-servern som en hanterarmetod till webbservern, möjliggör denna rad hantering av både HTTP-förfrågningar och WebSocket-anslutningar av samma server. Detta innebär att både HTML-sidor och realtidsdata kan levereras från samma server.

  • server.begin() : Slutligen startar den här raden webbservern och gör den aktiv. När funktionen server.begin() anropas börjar webbservern lyssna efter inkommande förfrågningar och bearbeta dem enligt de definierade hanterarna.

Totalt sett konfigurerar void setup() olika aspekter av systemet, såsom seriell kommunikation, Wi-Fi-anslutning, GPIO-pintillstånd och hantering av HTTP-förfrågningar och WebSocket-händelser . Det är en viktig del av att sätta upp IoT-systemet för övervakning av luftföroreningar.


 void loop () {
 float airQuality = gasSensor.getPPM(); // Få luftkvalitetsdata i PPM

 // Förbered JSON-data
 String jsonData = "{\"airQuality\": " + String (airQuality) + "}" ;

 // Skicka JSON-data till WebSocket-klienter
 ws.textAll(jsonData);

 // Kontrollera luftkvalitetströsklar och kontrollera summer och lysdioder 
if (airQuality <= goodAirQualityThreshold) {
 digitalWrite (greenLedPin, HIGH );
 digitalWrite (redLedPin, LOW );
 noTone (buzzerPin);
 } else if (airQuality > goodAirQualityThreshold) {
 digitalWrite (greenLedPin, LOW );
 digitalWrite (redLedPin, HIGH ); 
ton (buzzerPin, 1000 );
 } annat {
 digitalWrite (greenLedPin, LOW );
 digitalWrite (redLedPin, LOW );
 noTone (buzzerPin);
 }

 fördröjning ( 1000 ); // Justera fördröjningen efter dina behov
 } 

Funktionen void loop() är en kontinuerlig loop som körs efter att void setup() har körts. Här är en förklaring av dess funktionalitet:

  • float airQuality = gasSensor.getPPM(); : Den här raden hämtar luftkvalitetsdata i ppm (parts per million) genom att anropa metoden getPPM()gasSensor objektet. Luftkvaliteten mäts av MQ135-givaren och värdet lagras i variabeln airQuality .

  • String jsonData = "{\"airQuality\": " + String(airQuality) + "}"; : Den här raden skapar en JSON-sträng genom att sammanfoga en textsträng med värdet airQuality . JSON-strängen har formen {"airQuality": <værdi>} och innehåller luftkvalitetsdata i ett JSON-format.

  • ws.textAll(jsonData); : Den här raden skickar JSON-data till alla anslutna WebSocket-klienter genom att anropa metoden textAll()ws objektet. Detta säkerställer att kunder får uppdaterad luftkvalitetsdata i realtid.

  • Kontroll av luftkvalitetströsklar och kontroll av summer och lysdioder:

    • Om airQuality är mindre än eller lika med goodAirQualityThreshold betyder det att luftkvaliteten är bra . Därför är den gröna lysdioden inställd på på ( HIGH ), den röda lysdioden till av ( LOW ) och summern stängs av genom att anropa noTone(buzzerPin) .
    • Om airQuality är större än goodAirQualityThreshold betyder det att luftkvaliteten är dålig . Därför är den gröna lysdioden släckt ( LOW ), den röda lysdioden på ( HIGH ) och summern aktiveras med en ton på 1000 Hz genom att anropa tone(buzzerPin, 1000)
    • delay(1000); : Den här raden introducerar en paus på 1 sekund (1000 millisekunder) mellan varje iteration av slingan med hjälp av funktionen delay() . Du kan justera detta värde efter behov för att ändra uppdateringshastigheten för luftkvalitetsdata och styrkomponenter.

Slingfunktionen upprepas sedan och processen med att uppdatera luftkvalitetsdata och styra lysdioder och summer fortsätter kontinuerligt så länge systemet är igång.



Tack så länge

I den här serien bloggar har vi introducerat dig till elektronikens värld och gett dig en grundläggande förståelse för några av de vanligaste komponenterna och koncepten. Vi har utforskat Arduino-plattformen och lärt oss hur man bygger enkla projekt med hjälp av mikrokontrollern.

I den här senaste bloggen ökade vi vårt spel och fokuserade på att bygga ett luftkvalitetsövervakningssystem med MQ135-gassensorn och ESP32-mikrokontrollern. Vi har förklarat kretsen, inklusive anslutning av lysdioder, en summer och sensorer. Vi har också visat dig hur du ställer in en webbserver och använder WebSocket-protokollet för att skicka uppdaterad luftkvalitetsdata till ett webbaserat användargränssnitt.

Detta projekt har inte bara gett dig möjlighet att lära dig om elektroniska komponenter och kodning, utan det har också gett dig en praktisk tillämpning av tekniken. Genom att bygga ett luftkvalitetsövervakningssystem kan du bli mer medveten om din omgivande luftkvalitet och vidta åtgärder för att förbättra den.

Kom ihåg att projekten vi har utforskat i den här serien bara är början på resan in i elektronikens värld. Det finns otaliga möjligheter att utforska och bygga mer komplexa system och interaktioner. Genom att kombinera dina kunskaper om komponenter, kodning och kreativt tänkande kan du skapa spännande och innovativa elektroniska lösningar.

Vi hoppas att den här serien med bloggar har gett dig en solid introduktion till elektronik och inspirerat dig att fortsätta lära dig och utforska. Kom alltid ihåg att experimentera säkert och ha kul på vägen!

Tack för ditt intresse för vår nybörjarguide till elektronik. Lycka till med dina framtida projekt

Skriv en kommentar!

Relevanta produkter

TS101 digital loddekolbeTS101 digital loddekolbe i hånd
TS101 digital lödkolv med USB C-försörjning
Erbjudande prisFrån 1 114 kr
14 i lager
TS80P USB-C Loddekolbe kitTS80P Loddekolbe
TS80P USB-C mini Lödpenna sats
Erbjudande prisFrån 1 274 kr
2 i lager
bruge Loddekolbe Renser til at rengøre loddekolbespidsenLoddekolbe Renser
Lyxigt rengöringsmedel för lödkolv
Erbjudande pris142 kr
8 i lager