Opprette en nettbasert værstasjon ved hjelp av ESP32
I det nåværende århundre blir alt flyttet til WiFi. Det er mange værstasjoner tilgjengelig i markedet som kan drives på WiFi og kan brukes i hjem. Disse værstasjoner er koblet til internett, og de inkluderer noen sensorer. Disse stasjonene registrerer temperatur, fuktighet eller trykk og viser dem på skjermen som allerede er tilstede i enheten, og sender dataene til en mobilapplikasjon via WiFi. Disse sensorene er veldig dyre, derfor har de fleste ikke råd til dem. Vi skal lage en værstasjon hjemme som også vil være effektiv og økonomisk. Det er veldig enkelt å lage det hjemme ved å bruke komponenter som er lett tilgjengelige i markedet.
I denne artikkelen skal vi lage en værstasjon ved hjelp av ESP32 og BME280 sensorer. Sensoren registrerer den respektive parameteren og sender den til en webside gjennom en lokal WiFi-tilkobling. For dette vil vi skrive kode og brenne den på mikrokontrollerkortet.
Hvordan lage en værstasjon ved hjelp av ESP32 og BME280?
Som vi nå vet sammendraget av prosjektet, la oss gå videre og samle mer informasjon for å begynne å jobbe med prosjektet.
Trinn 1: Samle komponentene
Den beste tilnærmingen for å starte et prosjekt er å lage en liste over komponenter og gå gjennom en kort studie av disse komponentene, fordi ingen vil holde seg midt i et prosjekt bare på grunn av en manglende komponent. En liste over komponenter som vi skal bruke i dette prosjektet er gitt nedenfor:
Trinn 2: Lag en tabell i HTML
La oss nå se hvordan en tabell lages i HyperText Markup Language (HTML) og vises i nettleseren. HTML er et språk som brukes til å lage strukturen til nettsider. Den består av en rekke elementer som forteller nettleseren hvordan de skal vise tingene på siden. Disse elementene er representert med koder. Nettleseren leser koden skrevet i HTML og gjengir innholdet på skjermen uten å vise kodene.
For å lage en tabell i nettleseren, bruker vi
mengde som vi måler verdien av.
MÅL | VERDI |
---|---|
Temp. Celsius | --- * C |
Temp. Fahrenheit | --- * F |
Press | --- hPa |
Ca. Høyde | --- meter |
Luftfuktighet | --- % |
I koden ovenfor er to celler i de første kolonnene navngitt som Måling og verdi. Under dette opprettes seks rader, og hver er for den forskjellige størrelsen som skal måles. Skriv denne koden på notisblokken. Klikk på Fil menyen øverst til venstre på skjermen. Klikk på Lagre som og navngi filen din med en utvidelse på .html.Endre nå Lagre som type til ALLE.Klikk på lagringsknappen for å lagre filen. Det opprettes en nettleser i mappen der tekstfilen er plassert. Klikk på den filen for å se tabellen din i nettleseren.
Når du åpner filen i nettleseren, vil den se ut som følgende bilde. I denne tabellen er ikke stilene inkludert. Hvis du vil legge til en ramme for å lage et stilig bord etter eget valg, må du legge til CSS i den. Klikk her for å legge til CSS.
Trinn 3: Montering av komponentene
La oss nå gå videre og koble sensoren til ESP32 borde. Før du gjør disse tilkoblingene, er det bedre å gå gjennom en kort studie av konfigurasjonen av pinnene til sensoren.
EN BME280 sensoren har syv pinner på den. Én pinne er Vcc-pinnen som brukes til å slå på sensoren, og den andre er en jordpinne. Inngangsforsyningen som påføres Vcc-stiften må være i området 1,8V til 3,6V. Jeg2C Seriell dataoverføring (toveis) kan oppnås av SDA og SCL pin. SCK brukes til klokkelinjen i overføringsprosessen. SDO pin brukes til dataene som kommer ut av BME280-sensoren. SDI pin brukes til dataene som går ut av BME280-sensoren. Den valgte aktiv-lave brikken er CS pin.
Protokollen som vi skal bruke i dette prosjektet er 12C kommunikasjon med BME280 sensormodulen. For dette formålet skal vi bruke SDA og SCL pinnen på sensoren. Koble pin21 på ESP32 er koblet til SDA-pinnen på sensoren og pin22 på ESP32 er koblet til SCL f sensoren.
Når alle tilkoblingene er gjort, kobler du mikrokontrollerkortet til datamaskinen og brenner koden i den. Trykk på Enable-knappen for å starte den. Forbindelsene til diagrammet vil se ut som:
Trinn 4: Komme i gang med ESP32
Hvis du ikke har jobbet med Arduino IDE før, ikke bekymre deg fordi trinn for trinn for å konfigurere Arduino IDE vises nedenfor.
- Last ned den nyeste versjonen av Arduino IDE fra Arduino.
- Koble Arduino-kortet til PC-en og åpne Kontrollpanel. Klikk på Maskinvare og lyd.Nå åpen Enheter og skriver og finn porten som kortet ditt er koblet til. I mitt tilfelle er det COM14men det er forskjellig på forskjellige datamaskiner.
- Klikk på Fil og deretter på Innstillinger. Kopier følgende lenke i Tilleggsstyrelederens URL. “https://dl.espressif.com/dl/package_esp32_index.json ”
- For å bruke ESP32 med Arduino IDE, må vi importere spesielle biblioteker som lar oss brenne kode på ESP32 og bruke den. disse to bibliotekene er vedlagt i lenken nedenfor. For å inkludere biblioteket, gå til Skisse> Inkluder bibliotek> Legg til ZIP-bibliotek. En rute vises. Finn ZIP-mappen på datamaskinen din, og klikk OK for å inkludere mappene. Dette biblioteket er vedlagt sammen med koden i lenken nedenfor.
- Nå går du Skisse> Inkluder bibliotek> Administrer biblioteker.
- En meny åpnes. Skriv inn i søkefeltet adafruit bme280. Denne pakken vil bli brukt til å integrere BME280 sensoren og ta avlesninger fra den. Pakken vises på skjermen. Installer pakken ved å klikke på installasjonsknappen.
- I den samme Library Manager, søk etter Adafruit Unified Sensor.Dette biblioteket hjelper også BME280-sensoren til å brukes med ESP32. En liste vises i boksen. Gå til slutten av listen og velg biblioteket som vises på bildet nedenfor. Klikk på installasjonsknappen for å installere biblioteket.
- En meny åpnes. Skriv inn i søkefeltet Arduino JSON.En liste vises. Installere Arduino JSON av Benoit Blanchon.
- Klikk nå på Verktøy.En rullegardinmeny vises. Sett brettet til ESP Dev-modul.
- Klikk på Verktøy-menyen igjen og angi porten du observerte i kontrollpanelet før.
- Last nå opp koden som er vedlagt i lenken nedenfor, og klikk på opplastingsknappen for å brenne koden på ESP32-mikrokontrolleren.
Så når du laster opp koden, kan det oppstå en feil. Dette er den vanligste feilen som kan oppstå hvis du bruker en ny versjon av Arduino IDE og Arduino JSON. Følgende er feilene du kan se på skjermen.
I filen inkludert fra C: \ Users \ Pro \ Documents \ Arduino \ biblioteker \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0, fra C: \ Users \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C : \ Users \ Pro \ Documents \ Arduino \ biblioteker \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 14: 11: feil: StaticJsonBuffer er en klasse fra ArduinoJson 5. Se arduinojson.org/upgrade for å lære hvordan du oppgraderer programmet ditt til ArduinoJson versjon 6 StaticJsonBufferjsonBuffer; ^ I filen inkludert fra C: \ Users \ Pro \ Documents \ Arduino \ biblioteker \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0, fra C: \ Users \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C: \ Users \ Pro \ Documents \ Arduino \ biblioteker \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseStream.h: 65: 11: feil: StaticJsonBuffer er en klasse fra ArduinoJson 5. Se arduinojson.org/upgrade for å lære hvordan du oppgraderer programmet til ArduinoJson versjon 6 returnerer StaticJsonBuffer () .parseObject (_data); ^ Flere biblioteker ble funnet for "WiFi.h" Brukt: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ Packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ biblioteker \ WiFi Ikke brukt: C: \ Program Files ( x86) \ Arduino \ biblioteker \ WiFi Bruker biblioteket WiFi i versjon 1.0 i mappen: C: \ Brukere \ Pro \ AppData \ Lokalt \ Arduino15 \ pakker \ esp32 \ maskinvare \ esp32 \ 1.0.2 \ biblioteker \ WiFi Bruker biblioteket IOXhop_FirebaseESP32-master i mappe: C: \ Users \ Pro \ Documents \ Arduino \ biblioteker \ IOXhop_FirebaseESP32-master (eldre) Bruker biblioteket HTTPClient i versjon 1.2 i mappen: C: \ Users \ Pro \ AppData \ Local \ Arduino15 \ Packages \ esp32 \ hardware \ esp32 \ 1.0.2 \ biblioteker \ HTTPClient ved hjelp av bibliotek WiFiClientSecure i versjon 1.0 i mappe: C: \ Brukere \ Pro \ AppData \ Local \ Arduino15 \ pakker \ esp32 \ hardware \ esp32 \ 1.0.2 \ biblioteker \ WiFiClientSecure Ved hjelp av bibliotek ArduinoJson på versjon 6.12.0 i mappe: C: \ Users \ Pro \ Documents \ Arduino \ libraries \ ArduinoJson exit status 1 Feil under kompilering for ESP32 Dev-modul.
Det er ingenting å bekymre seg for, fordi vi kan eliminere disse feilene ved å følge noen enkle trinn. Disse feilene oppstår fordi den nye versjonen av Arduino JSON har en annen klasse i stedet for StaticJsonBuffer.Dette er klassen til JSON 5. Så vi kan ganske enkelt eliminere denne feilen ved å nedgradere versjonen av Arduino JSON av vår Arduino IDE. Bare gå til Skisse> Inkluder bibliotek> Administrer biblioteker.Søk etterArduino JSON av Benoit Blanchonsom du har installert før. Avinstaller den først, og sett deretter versjonen til 5.13.5. Nå som vi har satt en gammel versjon av Arduino JSON, installerer du den igjen og kompilerer koden på nytt. Denne gangen vil koden din kompileres vellykket.
Klikk her for å laste ned koden.
Trinn 5: Forstå koden
Koden til dette prosjektet er veldig enkel og godt kommentert. Men likevel blir koden kort forklart nedenfor.
1. I starten er biblioteker inkludert, slik at ESP32-kortet kan kobles til den lokale WiFi-tilkoblingen hjemme eller på kontoret. Bibliotekene som hjelper ESP32 med å integrere BME280-sensoren med den, er også inkludert. Deretter defineres navnet og passordet til din lokale wifi-tilkobling slik at ESP32 kan kobles til Wifi.
// Last inn Wi-Fi-biblioteket # inkluderer// libray for å bruke wifi # inkluderer #inkludere // bibliotek for å bruke BME280-sensor # inkluderer // bibliotek for å bruke BME280-sensor
2. Etter dette kommenteres noen linjer. Disse linjene vil bli brukt hvis du bruker SPI-protokoll for kommunikasjon av sensoren. Vi vil holde dem kommentert fordi vi bruker 12C-protokollen.
/*#inkludere#define BME_SCK 18 #define BME_MISO 19 #define BME_MOSI 23 #define BME_CS 5 * /
3. Det opprettes en variabel for å lagre verdien av havnivåtrykket i hektopascal. 1 hektopascal tilsvarer en millibar. Høyden for det gitte trykket er estimert, og deretter sammenligner denne variabelen den med havnivåtrykket. Etter dette, bmeer et objekt som er opprettet for videre bruk.
#define SEALEVELPRESSURE_HPA (1013.25) // variabel for å sammenligne funnet trykk til havnivå Adafruit_BME280 bme; // I2C
4. Etter dette er navnet på WiFi-tilkoblingen din og strømmen inkludert i koden, slik at ESP32 kan kobles til WiFi. Deretter er portnummeret satt til å kommunisere med webserveren, og en variabel blir erklært for å lagre HTTP-forespørselen.
const char * ssid = "DIN SSID"; // Navnet på din lokale wifi-tilkobling const char * passord = "DITT PASSORD"; // Passord til din lokale wifi-tilkobling WiFiServer-server (80); // Sett porttjener på webserveren til 80 String header; // Variabel for å lagre HTTP-forespørselen
5. ugyldig oppsett ()er en funksjon der vi initialiserer INPUT- eller OUTPUT-pinnene. Denne funksjonen angir også overføringshastigheten ved å bruke Serial.begin () kommando. Baud Rate er kommunikasjonshastigheten til mikrokontrolleren. Noen kodelinjer er lagt til her for å koble ESP32 til den lokale wifi-tilkoblingen. Styret vil prøve å koble til den lokale wifi-tilkoblingen og vil skrive ut "forbindelse." i seriell skjerm. Den skrives ut "Tilkoblet" når forbindelsen er opprettet. Så for å overvåke dette er det bedre å åpne den serielle skjermen og sjekke dens staus der.
ugyldig oppsett () {Serial.begin (115200); // innstilling av overføringshastighets bool-status; // standardinnstillinger // (du kan også sende inn et Wire-bibliotekobjekt som & Wire2) // status = bme.begin (); hvis (! bme.begin (0x76)) {// sjekker om sensoren er fouund Serial.println ("Kunne ikke finne en gyldig BME280-sensor, sjekk kabling!"); mens (1); } // Koble til Wi-Fi-nettverk med SSID og passord Serial.print ("Koble til"); Serial.println (ssid); WiFi.begin (ssid, passord); mens (WiFi.status ()! = WL_CONNECTED) {forsinkelse (500); Serial.print ("."); } // Skriv ut lokal IP-adresse og start webserver Serial.println (""); Serial.println ("WiFi tilkoblet."); Serial.println ("IP-adresse:"); // skriv ut IP-adressen på seriell skjerm Serial.println (WiFi.localIP ()); server.begin (); }
6. ugyldig sløyfe ()er en funksjon som går gjentatte ganger i en løkke. I denne sløyfen skriver vi en kode som forteller mikrokontrollerkortet hvilke oppgaver som skal utføres og hvordan. I denne koden opprettes først en forbindelse med en ny klient. Hvis forbindelsen er opprettet, vises websiden i nettleseren. Deretter blir bordet laget, og sensoravlesningene blir fylt ut i tabellen. Når bordet er fylt, blir forbindelsen stengt.
ugyldig sløyfe () {WiFiClient-klient = server.tilgjengelig (); // Lytt etter innkommende klienter hvis (klient) {// Hvis en ny klient kobles til, Serial.println ("Ny klient."); // skriv ut en melding i serieporten String currentLine = ""; // lage en streng for å holde innkommende data fra klienten mens (client.connected ()) {// loop mens klienten er koblet til hvis (client.available ()) {// hvis det er byte å lese fra klienten, char c = client.read (); // les en byte, deretter Serial.write (c); // skriv den ut den serielle skjermoverskriften + = c; hvis (c == '\ n') {// hvis byten er et nytt linjetegn // hvis den nåværende linjen er tom, har du to nye linjetegn på rad. // det er slutten på klientens HTTP-forespørsel, så send et svar: if (currentLine.length () == 0) {// HTTP-overskrifter starter alltid med en svarkode (f.eks. HTTP / 1.1 200 OK) // og en innholdstype slik at klienten vet hva som kommer, så en tom linje: client.println ("HTTP / 1.1 200 OK"); client.println ("Innholdstype: tekst / html"); client.println ("Tilkobling: lukk"); client.println (); // Vis HTML-nettsiden client.println (""); client.println (""); client.println (""); // CSS for å style tabellen client.println ("ESP32 med BME280
"); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println (""); client.println ("
MÅL | VERDI |
---|---|
Temp. Celsius | "); client.println (bme.readTemperature ()); client.println (" * C |
Temp. Fahrenheit | "); client.println (1.8 * bme.readTemperature () + 32); client.println (" * F |
Press | "); client.println (bme.readPressure () / 100.0F); client.println (" hPa |
Ca. Høyde | "); client.println (bme.readAltitude (SEALEVELPRESSURE_HPA)); client.println (" m |
Luftfuktighet | "); client.println (bme.readHumidity ()); client.println ("% |
Dette var hele prosedyren for hvordan du lager en værstasjon ved hjelp av ESP32, nå etter å ha samlet maskinvarekomponentene fra markedet og begynt å lage dine egne. Lykke til!