Een webgebaseerd weerstation maken met ESP32

In de huidige eeuw wordt alles verschoven naar wifi. Er zijn veel weerstations op de markt die op wifi kunnen worden bediend en in huizen kunnen worden gebruikt. Deze weerstations zijn verbonden met internet en bevatten enkele sensoren. Die stations voelen de temperatuur, luchtvochtigheid of de druk en geven deze weer op het scherm dat al in de gadget aanwezig is en sturen de data via wifi naar een mobiele applicatie. Deze sensoren zijn erg duur en daarom kunnen de meeste mensen ze niet betalen. We gaan thuis een weerstation maken dat ook nog eens efficiënt en zuinig is. Het is heel gemakkelijk om het thuis te maken door componenten te gebruiken die gemakkelijk op de markt verkrijgbaar zijn.

In dit artikel gaan we een weerstation maken met behulp van de ESP32 en BME280 sensoren. De sensor detecteert de betreffende parameter en stuurt deze naar een webpagina via een lokale wifi-verbinding. Hiervoor zullen we code schrijven en deze op het microcontrollerbord branden.

Hoe maak je een weerstation met ESP32 en BME280?

Nu we de samenvatting van het project kennen, laten we verder gaan en meer informatie verzamelen om aan het project te gaan werken.

Stap 1: De componenten verzamelen The

De beste aanpak om een ​​project te starten, is door een lijst met componenten te maken en deze componenten kort te bestuderen, omdat niemand midden in een project wil blijven zitten vanwege een ontbrekend onderdeel. Hieronder vindt u een lijst met componenten die we in dit project gaan gebruiken:

Stap 2: Een tabel maken in HTML

Laten we nu eens kijken hoe een tabel wordt gemaakt in HyperText Markup Language (HTML) en wordt weergegeven in de webbrowser. HTML is een taal die wordt gebruikt om de structuur van webpagina's te maken. Het bestaat uit een reeks elementen die de browser vertellen hoe de dingen op de pagina moeten worden weergegeven. Deze elementen worden weergegeven door tags. De browser leest de code die in HTML is geschreven en geeft de inhoud op het scherm weer zonder de tags weer te geven.

Om een ​​tabel in de browser te maken, gebruiken we de

label. Om er rijen in te maken, gebruiken we tags wat tabelrij betekent. Om de koppen in de tabel te geven, gebruiken we tag wat tabelkop betekent. Om elke cel in de tabel te definiëren, gebruiken we label. De code om de vereiste tabel te maken, zie de onderstaande code.

hoeveelheid waarvan we de waarde meten. 
METING WAARDE
Temp. Celsius --- *C
Temp. Fahrenheit --- *F
Druk --- hPa
Ca. Hoogte --- meter
Vochtigheid --- %

In de bovenstaande code worden twee cellen van de eerste kolommen genoemd als Meting en Waarde. Daaronder worden zes rijen gemaakt en elk is voor de verschillende hoeveelheid die moet worden gemeten. Schrijf deze code op kladblok. Klik op de het dossier menu in de linkerbovenhoek van het scherm. Klik op Opslaan als en geef uw bestand een naam met de extensie .html.Wijzig nu het opslaan als type in ALLE.Klik op de knop Opslaan om het bestand op te slaan. Er wordt een browser gemaakt in de map waarin dat tekstbestand is geplaatst. Klik op dat bestand om uw tabel in de browser te bekijken.

Wanneer u het bestand in de browser opent, ziet het eruit als in de volgende afbeelding. In deze tabel zijn de stijlen niet opgenomen. Wil je een rand toevoegen om een ​​stijlvolle tabel naar eigen keuze te maken, dan zul je daarin CSS moeten toevoegen. Klik hier om CSS toe te voegen.

Stap 3: Montage van de componenten

Laten we nu verder gaan en de sensor verbinden met de ESP32 bord. Voordat u deze verbindingen maakt, is het beter om een ​​korte studie te maken van de configuratie van de pinnen van de sensor.

EEN BME280 sensor heeft zeven pinnen. Eén pin is de Vcc-pin die wordt gebruikt om de sensor van stroom te voorzien en de tweede pin is een aardingspin. De ingangsvoeding die wordt toegepast op de Vcc-pin moet in het bereik van 1,8 V tot 3,6 V zijn. De ik2C Seriële datatransmissie (bidirectioneel) kan worden bereikt door de SDA en SCL pin. SCK wordt gebruikt voor de kloklijn in het verzendproces. SDO pin wordt gebruikt voor de gegevens die uit de BME280-sensor komen. SDI pin wordt gebruikt voor de gegevens die uit de BME280-sensor gaan. De geselecteerde active-low-chip is de CS pin.

Het protocol dat we in dit project gaan gebruiken is 12C communicatie met de BME280 sensormodule. Hiervoor gebruiken we de SDA en SCL pin van de sensor. Sluit pin21 van de ESP32 aan op de SDA-pin van de sensor en de pin22 van de ESP32 is aangesloten op de SCL van de sensor.

Wanneer alle verbindingen zijn gemaakt, sluit u de microcontrollerkaart aan op de computer en brandt u de code erin. Druk op de knop Inschakelen om het te starten. De aansluitingen van het diagram zien er als volgt uit:

Stap 4: Aan de slag met ESP32

Als u nog niet eerder met Arduino IDE hebt gewerkt, hoeft u zich geen zorgen te maken, want hieronder wordt stap voor stap uitgelegd om Arduino IDE in te stellen.

  1. Download de nieuwste versie van Arduino IDE van Arduino.
  2. Sluit uw Arduino-bord aan op de pc en open het Configuratiescherm. Klik op Hardware en geluid.Nu open Apparaten en printer en zoek de poort waarop uw bord is aangesloten. In mijn geval is het COM14maar het is anders in verschillende computers.
  3. Klik op Bestand en klik vervolgens op Voorkeuren. Kopieer de volgende link in de Extra Board Manager's URL. “https://dl.espressif.com/dl/package_esp32_index.json ”
  4. Om ESP32 nu met Arduino IDE te gebruiken, moeten we speciale bibliotheken importeren waarmee we code op ESP32 kunnen branden en gebruiken. deze twee bibliotheken zijn bijgevoegd in de onderstaande link. Om de bibliotheek op te nemen, ga naar Sketch > Bibliotheek opnemen > ZIP-bibliotheek toevoegen. Er verschijnt een vak. Zoek de ZIP-map op uw computer en klik op OK om de mappen op te nemen. Deze bibliotheek is samen met de code in de onderstaande link bijgevoegd.
  5. Ga nu naar Schets > Bibliotheek opnemen > Bibliotheken beheren.
  6. Er wordt een menu geopend. Typ in de zoekbalk adafruit bme280. Dit pakket wordt gebruikt om te integreren de BME280 sensor en neem er metingen van. Het pakket verschijnt op het scherm. Installeer het pakket door op de knop Installeren te klikken.
  7. Zoek in dezelfde Bibliotheekmanager naar: Adafruit Unified Sensor.Deze bibliotheek helpt ook de BME280-sensor te gebruiken met ESP32. Er verschijnt een lijst in het vak. Ga naar het einde van de lijst en selecteer de bibliotheek die in de onderstaande afbeelding wordt weergegeven. Klik op de installatieknop om de bibliotheek te installeren.
  8. Er wordt een menu geopend. Typ in de zoekbalk Arduino JSON.Er verschijnt een lijst. Installeren Arduino JSON door Benoit Blanchon.
  9. Klik nu op de Hulpmiddelen.Er verschijnt een vervolgkeuzemenu. Zet het bord op ESP-ontwikkelaarsmodule.
  10. Klik nogmaals op het Tool-menu en stel de poort in die u eerder in het configuratiescherm hebt waargenomen.
  11. Upload nu de code die in de onderstaande link is bijgevoegd en klik op de uploadknop om de code op de ESP32-microcontroller te branden.

Dus nu wanneer u de code uploadt, kan er een fout optreden. Dit is de meest voorkomende fout die kan optreden als u een nieuwe versie van de Arduino IDE en de Arduino JSON gebruikt. Hieronder volgen de fouten die u op het scherm kunt zien.

In bestand opgenomen van C:\Users\Pro\Documents\Arduino\libraries\IOXhop_FirebaseESP32-master/IOXhop_FirebaseESP32.h:8:0, van C:\Users\Pro\Desktop\smartHome\code\code.ino:2: C :\Users\Pro\Documents\Arduino\libraries\IOXhop_FirebaseESP32-master/IOXhop_FirebaseStream.h:14:11: error: StaticJsonBuffer is een klasse van ArduinoJson 5. Zie arduinojson.org/upgrade voor meer informatie over het upgraden van uw programma naar ArduinoJson versie 6 StaticJsonBuffer jsonBuffer; ^ In bestand opgenomen uit C: \ Users \ Pro \ Documents \ Arduino \ libraries \ IOXhop_FirebaseESP32-master / IOXhop_FirebaseESP32.h: 8: 0, vanuit C: \ Users \ Pro \ Desktop \ smartHome \ code \ code.ino: 2: C:\Users\Pro\Documents\Arduino\libraries\IOXhop_FirebaseESP32-master/IOXhop_FirebaseStream.h:65:11: error: StaticJsonBuffer is een klasse van ArduinoJson 5. Zie arduinojson.org/upgrade om te leren hoe u uw programma kunt upgraden naar ArduinoJson versie 6 retourneert StaticJsonBuffer().parseObject(_data); ^ Er zijn meerdere bibliotheken gevonden voor "WiFi.h" Gebruikt: C:\Users\Pro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.2\libraries\WiFi Niet gebruikt: C:\Program Files ( x86)\Arduino\libraries\WiFi Bibliotheek WiFi gebruiken op versie 1.0 in map: C:\Users\Pro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.2\libraries\WiFi Bibliotheek gebruiken IOXhop_FirebaseESP32-master in map: C:\Users\Pro\Documents\Arduino\libraries\IOXhop_FirebaseESP32-master (legacy) Bibliotheek HTTPClient gebruiken op versie 1.2 in map: C:\Users\Pro\AppData\Local\Arduino15\packages\esp32\hardware\ esp32\1.0.2\libraries\HTTPClient Bibliotheek WiFiClientSecure gebruiken op versie 1.0 in map: C:\Users\Pro\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.2\libraries\WiFiClientSecure Bibliotheek Arduino gebruiken op versie 6.12.0 in map: C:\Users\Pro\Documents\Arduino\libraries\ArduinoJson exit status 1 Fout bij compileren voor board ESP32 Dev Module.

U hoeft zich nergens zorgen over te maken, want we kunnen deze fouten elimineren door enkele eenvoudige stappen te volgen. Deze fouten ontstaan ​​omdat de nieuwe versie van Arduino JSON een andere klasse heeft in plaats van StaticJsonBuffer.Dit is de klasse van JSON 5. We kunnen deze fout dus eenvoudig elimineren door de versie van Arduino JSON van onze Arduino IDE te downgraden. Ga gewoon naar Schets > Bibliotheek opnemen > Bibliotheken beheren.Zoeken naarArduino JSON door Benoit Blanchondie u eerder hebt geïnstalleerd. Verwijder het eerst en stel vervolgens de versie in op 5.13.5. Nu we een oude versie van Arduino JSON hebben ingesteld, installeer deze opnieuw en compileer de code opnieuw. Deze keer wordt je code succesvol gecompileerd.

Om de code te downloaden, klik hier.

Stap 5: De code begrijpen

De code van dit project is heel eenvoudig en goed becommentarieerd. Maar toch, de code wordt hieronder kort uitgelegd.

1. In het begin worden bibliotheken meegeleverd zodat het ESP32-bord kan worden aangesloten op de lokale wifi-verbinding in huis of op kantoor. De bibliotheken die de ESP32 helpen om de BME280-sensor ermee te integreren, zijn ook inbegrepen. Vervolgens worden de naam en het wachtwoord van uw lokale wifi-verbinding gedefinieerd zodat de ESP32 met de wifi kan worden verbonden.

// Laad wifi-bibliotheek #include             // bibliotheek om wifi te gebruiken #include  #inclusief  // bibliotheek om BME280-sensor te gebruiken #include  // bibliotheek om de BME280-sensor te gebruiken

2. Hierna worden enkele regels becommentarieerd. Deze lijnen worden gebruikt als u het SPI-protocol gebruikt voor de communicatie van de sensor. We zullen ze becommentarieerd houden omdat we het 12C-protocol gebruiken.

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

3. Er wordt een variabele gemaakt om de waarde van de druk op zeeniveau in hectopascal op te slaan. 1 hectopascal is gelijk aan een millibar. De hoogte voor de gegeven druk wordt geschat en deze variabele vergelijkt deze met de luchtdruk op zeeniveau. Na dit, bmeis een object dat is gemaakt voor verder gebruik.

#define SEALEVELPRESSURE_HPA (1013.25) // variabele om gevonden druk te vergelijken met zeeniveau Adafruit_BME280 bme; // I2C

4. Hierna wordt de naam van uw wifiverbinding en de stroomtoevoer opgenomen in de code, zodat de ESP32 op de wifiverbinding kan worden aangesloten. Hierna wordt het poortnummer ingesteld om te communiceren met de webserver en wordt een variabele gedeclareerd om het HTTP-verzoek op te slaan.

const char* ssid = "UW SSID"; // Naam van uw lokale wifi-verbinding const char* wachtwoord = "UW PASWOORD"; // Wachtwoord van uw lokale wifi-verbinding WiFiServer-server (80); // Stel het poortnummer van de webserver in op 80 String-header; // Variabele om het HTTP-verzoek op te slaan

5. ongeldige setup()is een functie waarin we de INPUT- of OUTPUT-pinnen initialiseren. Deze functie stelt ook de baudrate in met behulp van Serieel.begin() opdracht. Baudrate is de communicatiesnelheid van de microcontroller. Hier zijn enkele regels code toegevoegd om de ESP32 te verbinden met de lokale wifi-verbinding. Het bord zal proberen verbinding te maken met de lokale wifi-verbinding en zal afdrukken "verbinding." in de seriële monitor. Het zal afdrukken "Verbonden" wanneer de verbinding tot stand is gebracht. Dus om dit te controleren, is het beter om de seriële monitor te openen en de status daar te controleren.

void setup() { Serial.begin(115200); // instellen van de baudrate bool-status; // standaardinstellingen // (u kunt ook een Wire-bibliotheekobject zoals &Wire2 invoeren) //status = bme.begin(); if (!bme.begin(0x76)) { // controleren of sensor is gevonden Serial.println ("Kon geen geldige BME280-sensor vinden, controleer bedrading!"); terwijl (1); } // Maak verbinding met het wifi-netwerk met SSID en wachtwoord Serial.print ("Verbinding maken met "); Seriële.println(ssid); WiFi.begin(ssid, wachtwoord); while (WiFi.status() != WL_CONNECTED) {vertraging (500); Serieel.print("."); } // Druk het lokale IP-adres af en start de webserver Serial.println(""); Serial.println("WiFi verbonden."); Serial.println("IP-adres: "); // druk het ip-adres af op seriële monitor Serial.println(WiFi.localIP()); server.begin(); }

6. lege lus()is een functie die herhaaldelijk in een lus wordt uitgevoerd. In deze lus schrijven we een code die het microcontrollerbord vertelt welke taken moeten worden uitgevoerd en hoe. In deze code wordt eerst verbinding gemaakt met een nieuwe klant. Als de verbinding tot stand is gebracht, wordt de webpagina weergegeven in de browser. Vervolgens wordt de tabel gemaakt en worden de meetwaarden van de sensoren in die tabel ingevuld. Als de tafel gevuld is, wordt de verbinding gesloten.

void loop () {WiFiClient-client = server.available (); // Luister naar inkomende clients if (client) { // Als een nieuwe client verbinding maakt, Serial.println ("Nieuwe client."); // print een bericht uit in de seriële poort String currentLine = ""; // maak een string om binnenkomende gegevens van de client te bewaren terwijl (client.connected()) {// loop terwijl de client is verbonden if (client.available()) { // als er bytes zijn om van de client te lezen, char c = klant.lezen(); // lees een byte, dan Serial.write (c); // print het uit de seriële monitor header += c; if (c == '\n') { // als de byte een teken voor een nieuwe regel is // als de huidige regel leeg is, heb je twee tekens op een rij. // dat is het einde van het HTTP-verzoek van de client, dus stuur een antwoord: if (currentLine.length() == 0) { // HTTP-headers beginnen altijd met een responscode (bijv. HTTP/1.1 200 OK) // en een content-type zodat de klant weet wat er gaat komen, dan een lege regel: client.println("HTTP/1.1 200 OK"); client.println ("Inhoudstype: tekst / html"); client.println("Verbinding: sluiten"); klant.println(); // Geef de HTML-webpagina client.println weer (""); cliënt.println(""); cliënt.println(""); // CSS om de tabel te stylen client.println("

ESP32 met BME280

"); cliënt.println(""); cliënt.println(""); cliënt.println(""); cliënt.println(""); cliënt.println(""); cliënt.println(""); cliënt.println("
METINGWAARDE
Temp. Celsius"); client.println(bme.readTemperature()); client.println(" *C
Temp. Fahrenheit"); client.println(1.8 * bme.readTemperature() + 32); client.println(" *F
Druk"); client.println(bme.readPressure() / 100.0F); client.println(" hPa
Ca. Hoogte"); client.println(bme.readAltitude(SEALEVELPRESSURE_HPA)); client.println(" m
Vochtigheid"); client.println(bme.readHumidity()); client.println(" %
"); // Het HTTP-antwoord eindigt met een andere lege regel client.println(); // Break out of the while loop break; } else { // als je een nieuwe regel hebt, wis dan currentLine currentLine = ""; } } else if (c != '\r') { // als je iets anders hebt dan een regelterugloopteken, currentLine += c; // voeg het toe aan het einde van de currentLine } } } // Wis de header-variabele header = ""; // Sluit de verbinding client.stop(); Serial.println("Client verbroken."); Serial.println("");}}

Dit was de hele procedure om een ​​weerstation te maken met ESP32, nu na het verzamelen van de hardwarecomponenten van de markt en het maken van uw eigen. Succes!

Facebook Twitter Google Plus Pinterest