Skapa en webbaserad väderstation med ESP32

Under det aktuella århundradet flyttas allt till WiFi. Det finns många väderstationer tillgängliga på marknaden som kan drivas via WiFi och kan användas i hem. Dessa väderstationer är anslutna till internet och de innehåller några sensorer. Dessa stationer känner av temperaturen, luftfuktigheten eller trycket och visar dem på skärmen som redan finns i gadgeten och skickar data till en mobilapplikation via WiFi. Dessa sensorer är mycket kostsamma, därför har de flesta inte råd med dem. Vi kommer att skapa en väderstation hemma som också blir effektiv och ekonomisk. Det är väldigt enkelt att göra det hemma med hjälp av komponenter som är lätt tillgängliga på marknaden.

I den här artikeln ska vi skapa en väderstation med hjälp av ESP32 och BME280 sensorer. Sensorn känner av respektive parameter och skickar den till en webbsida via en lokal WiFi-anslutning. För detta kommer vi att skriva kod och bränna den på mikrokontrollkortet.

Hur man skapar en väderstation med ESP32 och BME280?

Som vi nu vet abstraktet av projektet, låt oss gå vidare och samla in mer information för att börja arbeta med projektet.

Steg 1: Samla in komponenterna

Det bästa sättet att starta något projekt är att göra en lista över komponenter och gå igenom en kort studie av dessa komponenter eftersom ingen vill sticka mitt i ett projekt bara på grund av en saknad komponent. En lista över komponenter som vi ska använda i detta projekt ges nedan:

Steg 2: Skapa en tabell i HTML

Låt oss nu se hur en tabell skapas i HyperText Markup Language (HTML) och visas i webbläsaren. HTML är ett språk som används för att skapa strukturen på webbsidor. Den består av en serie element som berättar för webbläsaren hur man visar sakerna på sidan. Dessa element representeras av taggar. Webbläsaren läser koden skriven i HTML och återger innehållet på skärmen utan att taggarna visas.

För att skapa en tabell i webbläsaren använder vi

märka. För att skapa rader i den kommer vi att använda taggar som betyder tabellrad. För att ge rubrikerna i tabellen kommer vi att använda tagg som betyder tabellrubrik. För att definiera varje cell i tabellen kommer vi att använda märka. Koden för att skapa den önskade tabellen, se koden nedan.

kvantitet som vi mäter värdet på. 
MÅTT VÄRDE
Temp. Celsius --- * C
Temp. Fahrenheit --- * F
Tryck --- hPa
Ungefär. Höjd över havet --- meter
Fuktighet --- %

I ovanstående kod namnges två celler i de första kolumnerna som Mätning och värde. Under detta skapas sex rader och var och en är för den olika mängden som ska mätas. Skriv den här koden på anteckningsblocket. Klicka på Fil menyn i det övre vänstra hörnet på skärmen. Klicka på Spara som och namnge din fil med ett tillägg till .html.Ändra nu Spara som typ till ALLT.Klicka på knappen Spara för att spara filen. En webbläsare skapas i mappen där den textfilen placeras. Klicka på den filen för att se ditt bord i webbläsaren.

När du öppnar filen i webbläsaren ser den ut som följande bild. I denna tabell ingår inte stilarna. Om du vill lägga till en gräns för att skapa en elegant tabell efter eget val måste du lägga till CSS i den. Klicka här för att lägga till CSS.

Steg 3: Montering av komponenterna

Låt oss nu gå vidare och ansluta sensorn till ESP32 styrelse. Innan du gör dessa anslutningar är det bättre att gå igenom en kort studie av konfigurationen av sensorns stift.

A BME280 sensorn har sju stift på sig. En stift är Vcc-stiftet som används för att slå på sensorn och den andra in är en jordstift. Ingångsförsörjningen som matas till Vcc-stiftet måste ligga i intervallet 1,8V till 3,6V. Jag2C Seriell dataöverföring (dubbelriktad) kan uppnås av SDA och SCL stift. SCK används för klocklinjen i överföringsprocessen. SDO pin används för data som kommer ut från BME280-sensorn. SDI pin används för data som går ut från BME280-sensorn. Det valda aktiva lågchipet är CS stift.

Protokollet som vi ska använda i detta projekt är 12C-kommunikation med BME280-sensormodulen. För detta ändamål kommer vi att använda SDA och SCL stift på sensorn. Anslut stift 21 på ESP32 är ansluten till SDA-stift på sensorn och stift 22 på ESP32 är ansluten till SCL f sensorn.

När alla anslutningar har gjorts ansluter du mikrokontrollkortet till datorn och bränner koden i den. Tryck på Enable-knappen för att starta den. Anslutningarna i diagrammet kommer att se ut:

Steg 4: Komma igång med ESP32

Om du inte har arbetat med Arduino IDE tidigare, oroa dig inte för att steg för steg för att ställa in Arduino IDE visas nedan.

  1. Ladda ner den senaste versionen av Arduino IDE från Arduino.
  2. Anslut ditt Arduino-kort till datorn och öppna Kontrollpanelen. Klicka på Hårdvara och ljud.Nu öppen Enheter och skrivare och hitta porten som kortet är anslutet till. I mitt fall är det COM14men det är annorlunda på olika datorer.
  3. Klicka på Arkiv och sedan på Inställningar. Kopiera följande länk i Ytterligare styrelsens webbadress. “https://dl.espressif.com/dl/package_esp32_index.json ”
  4. För att använda ESP32 med Arduino IDE måste vi importera speciella bibliotek som gör att vi kan bränna kod på ESP32 och använda den. dessa två bibliotek bifogas i länken nedan. För att inkludera biblioteket, gå till Skiss> Inkludera bibliotek> Lägg till ZIP-bibliotek. En ruta visas. Hitta ZIP-mappen på din dator och klicka på OK för att inkludera mapparna. Detta bibliotek bifogas tillsammans med koden i länken nedan.
  5. Nu går det Skiss> Inkludera bibliotek> Hantera bibliotek.
  6. En meny öppnas. Skriv i sökfältet adafruit bme280. Detta paket kommer att användas för att integrera BME280 sensorn och ta avläsningar från den. Paketet visas på skärmen. Installera paketet genom att klicka på installationsknappen.
  7. I samma Library Manager, sök efter Adafruit Unified Sensor.Detta bibliotek hjälper också BME280-sensorn att användas med ESP32. En lista visas i rutan. Gå till slutet av listan och välj biblioteket som visas i bilden nedan. Klicka på installationsknappen för att installera biblioteket.
  8. En meny öppnas. Skriv i sökfältet Arduino JSON.En lista visas. Installera Arduino JSON av Benoit Blanchon.
  9. Klicka nu på Verktyg.En rullgardinsmeny visas. Ställ in brädet på ESP Dev-modul.
  10. Klicka på verktygsmenyn igen och ställ in porten som du observerade på kontrollpanelen tidigare.
  11. Ladda nu upp koden som är bifogad i länken nedan och klicka på uppladdningsknappen för att bränna koden på ESP32-mikrokontrollern.

Så nu när du laddar upp koden kan ett fel inträffa. Detta är det vanligaste felet som kan uppstå om du använder en ny version av Arduino IDE och Arduino JSON. Följande är de fel som du kan se på skärmen.

I filen ingår från C: \ Users \ Pro \ Documents \ Arduino \ bibliotek \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0, från C: \ Users \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C : \ Users \ Pro \ Documents \ Arduino \ bibliotek \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 14: 11: fel: StaticJsonBuffer är en klass från ArduinoJson 5. Se arduinojson.org/upgrade för att lära dig hur du uppgraderar ditt program till ArduinoJson version 6 StaticJsonBuffer jsonBuffer; ^ I filen ingår från C: \ Users \ Pro \ Documents \ Arduino \ bibliotek \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0, från C: \ Users \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C: \ Users \ Pro \ Documents \ Arduino \ bibliotek \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 65: 11: fel: StaticJsonBuffer är en klass från ArduinoJson 5. Se arduinojson.org/upgrade för att lära dig hur du uppgraderar ditt program till ArduinoJson version 6 returnerar StaticJsonBuffer() .parseObject (_data); ^ Flera bibliotek hittades för "WiFi.h" Används: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ Packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ bibliotek \ WiFi Används inte: C: \ Program Files ( x86) \ Arduino \ bibliotek \ WiFi Använda biblioteket WiFi i version 1.0 i mappen: C: \ Användare \ Pro \ AppData \ Lokalt \ Arduino15 \ paket \ esp32 \ hårdvara \ esp32 \ 1.0.2 \ bibliotek \ WiFi Använda biblioteket IOXhop_FirebaseESP32-master i mapp: C: \ Users \ Pro \ Documents \ Arduino \ bibliotek \ IOXhop_FirebaseESP32-master (äldre) Använda biblioteket HTTPClient i version 1.2 i mapp: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ Packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ bibliotek \ HTTPClient Använda biblioteket WiFiClientSecure vid version 1.0 i mappen: C: \ Användare \ Pro \ AppData \ Local \ Arduino15 \ paket \ esp32 \ hårdvara \ esp32 \ 1.0.2 \ bibliotek \ WiFiClientSecure Använda biblioteket ArduinoJson på version 6.12.0 i mapp: C: \ Användare \ Pro \ Dokument \ Arduino \ bibliotek \ ArduinoJson utgångsstatus 1 Fel vid kompilering för ESP32 Dev-modul.

Det finns inget att oroa sig för eftersom vi kan eliminera dessa fel genom att följa några enkla steg. Dessa fel uppstår eftersom den nya versionen av Arduino JSON har en annan klass istället för StaticJsonBuffer.Det här är klassen för JSON 5. Så vi kan helt enkelt eliminera detta fel genom att nedgradera versionen av Arduino JSON av vår Arduino IDE. Gå helt enkelt till Skiss> Inkludera bibliotek> Hantera bibliotek.Söka efterArduino JSON av Benoit Blanchonsom du har installerat tidigare. Avinstallera den först och ställ sedan in versionen till 5.13.5. Nu när vi har ställt in en gammal version av Arduino JSON, installera den igen och kompilera om koden. Den här gången kommer din kod att kompileras framgångsrikt.

Klicka här för att ladda ner koden.

Steg 5: Förstå koden

Koden för detta projekt är väldigt enkel och väl kommenterad. Men ändå förklaras koden kort nedan.

1. I början ingår bibliotek så att ESP32-kortet kan anslutas till den lokala WiFi-anslutningen i hemmet eller på kontoret. Biblioteken som hjälper ESP32 att integrera BME280-sensorn med den ingår också. Sedan definieras namnet och lösenordet för din lokala wifi-anslutning så att ESP32 kan anslutas till Wifi.

// Ladda Wi-Fi-bibliotek # inkludera             // libray för att använda wifi #include  #omfatta  // bibliotek för att använda BME280-sensor # inkludera  // bibliotek för att använda BME280-sensorn

2. Efter detta kommenteras några rader. Dessa linjer kommer att användas om du använder SPI-protokoll för att kommunicera med sensorn. Vi kommer att hålla dem kommenterade eftersom vi använder 12C-protokollet.

/*#omfatta  #define BME_SCK 18 #define BME_MISO 19 #define BME_MOSI 23 #define BME_CS 5 * /

3. En variabel skapas för att spara värdet på havsnivåtrycket i hektopascal. 1 hektopascal motsvarar en millibar. Höjden för det angivna trycket uppskattas och sedan jämför denna variabel den med havsnivåtrycket. Efter det här, bmeär ett objekt som skapas för vidare användning.

#define SEALEVELPRESSURE_HPA (1013.25) // variabel för att jämföra hittat tryck till havsnivå Adafruit_BME280 bme; // I2C

4. Därefter ingår namnet på din WiFi-anslutning och dess ström i koden så att ESP32 kan anslutas till WiFi. Därefter är portnumret inställt för att kommunicera med webbservern och en variabel förklaras för att lagra HTTP-begäran.

const char * ssid = "DIN SSID"; // Namn på din lokala wifi-anslutning const char * lösenord = "DITT LÖSENORD"; // Lösenord för din lokala wifi-anslutning WiFiServer-server (80); // Ställ in webbserverns portnummer till 80 Stränghuvud; // Variabel för att lagra HTTP-begäran

5. ogiltig installation ()är en funktion där vi initialiserar INPUT- eller OUTPUT-stiften. Denna funktion ställer också in baudhastigheten med Serial.begin () kommando. Baud Rate är mikrokontrollerns kommunikationshastighet. Vissa kodrader läggs till här för att ansluta ESP32 till den lokala wifi-anslutningen. Brädet försöker ansluta till den lokala wifi-anslutningen och kommer att skriva ut "förbindelse." i den seriella bildskärmen. Det kommer att skrivas ut "Ansluten" när anslutningen upprättas. Så för att övervaka detta är det bättre att öppna den seriella skärmen och kontrollera dess staus där.

ogiltig installation () {Serial.begin (115200); // ställa in överföringshastighets bool-status; // standardinställningar // (du kan också skicka ett Wire-biblioteksobjekt som & Wire2) // status = bme.begin (); if (! bme.begin (0x76)) {// kontrollera om sensorn är fouund Serial.println ("Det gick inte att hitta en giltig BME280-sensor, kontrollera kabeldragningen!"); medan (1); } // Anslut till Wi-Fi-nätverk med SSID och lösenord Serial.print ("Ansluter till"); Serial.println (ssid); WiFi.begin (ssid, lösenord); medan (WiFi.status ()! = WL_CONNECTED) {fördröjning (500); Serial.print ("."); } // Skriv ut lokal IP-adress och starta webbservern Serial.println (""); Serial.println ("WiFi-ansluten."); Serial.println ("IP-adress:"); // skriv ut IP-adressen på seriell bildskärm Serial.println (WiFi.localIP ()); server.begin (); }

6. ogiltig slinga ()är en funktion som körs upprepade gånger i en slinga. I den här slingan skriver vi en kod som berättar för mikrokontrollerkortet vilka uppgifter som ska utföras och hur. I den här koden upprättas först en anslutning med en ny klient. Om anslutningen upprättas visas webbsidan i webbläsaren. Sedan görs bordet och sensoravläsningarna fylls i den tabellen. När bordet är fyllt stängs anslutningen.

void loop () {WiFiClient client = server.available (); // Lyssna efter inkommande klienter om (klient) {// Om en ny klient ansluter, Serial.println ("Ny klient."); // skriv ut ett meddelande i serieporten String currentLine = ""; // skapa en sträng för att hålla inkommande data från klienten medan (client.connected ()) {// loop medan klienten är ansluten om (client.available ()) {// om det finns byte att läsa från klienten, char c = client.read (); // läs en byte, sedan Serial.write (c); // skriv ut den seriella bildskärmsrubriken + = c; om (c == '\ n') {// om byten är en nylinjetecken // om den aktuella raden är tom, har du två nya linjetecken i rad. // det är slutet på klientens HTTP-begäran, så skicka ett svar: if (currentLine.length () == 0) {// HTTP-rubriker börjar alltid med en svarkod (t.ex. HTTP / 1.1 200 OK) // och en innehållstyp så att klienten vet vad som kommer, sedan en tom rad: client.println ("HTTP / 1.1 200 OK"); client.println ("Innehållstyp: text / html"); client.println ("Connection: close"); client.println (); // Visa HTML-webbsidan client.println (""); client.println (""); client.println (""); // CSS för att utforma tabellen client.println ("

ESP32 med BME280

"); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println ("
MÅTTVÄRDE
Temp. Celsius"); client.println (bme.readTemperature ()); client.println (" * C
Temp. Fahrenheit"); client.println (1.8 * bme.readTemperature () + 32); client.println (" * F
Tryck"); client.println (bme.readPressure () / 100.0F); client.println (" hPa
Ungefär. Höjd över havet"); client.println (bme.readAltitude (SEALEVELPRESSURE_HPA)); client.println (" m
Fuktighet"); client.println (bme.readHumidity ()); client.println ("%
"); // HTTP-svaret slutar med en annan tom radklient.println (); // Bryt ut medan loopen bryts;} annars {// om du har en ny rad, rensa sedan currentLine currentLine =" ";}} else if (c! = '\ r') {// om du har något annat än ett vagnretur, currentLine + = c; // lägg till det i slutet av currentLine}}} // Rensa rubrikvariabelhuvudet = ""; // Stäng anslutningen client.stop (); Serial.println ("Client disconnected."); Serial.println ("");}}

Detta var hela proceduren för hur man skapar en väderstation med ESP32, nu efter att ha samlat hårdvarukomponenterna från marknaden och börjat skapa sina egna. Lycka till!

Facebook Twitter Google Plus Pinterest