In dit lab maak je een apparaat om de temperatuur luchtvochtigheid en druk te meten. De meting kan je dan op je telefoon zien.

Benodigdheden

Om deze workshop te maken gebruik je deze onderdelen:

  • ESP32 WeMos LOLIN32 Lite.
  • BME280 sensor voor temperatuur, luchtvochtigheid en druk.
  • Breadboard.
  • Jumper wires m-m en m-f (we ontdekken nog hoeveel je er nodig hebt).
  • Micro usb kabel.
  • Laptop met Arduino IDE.
  • Voorbeeld programma (deze zie je hieronder).

ESP32 klaarmaken voor het breadboard

In dit lab gaan we ervan uit dat je al hebt geleerd hoe je kunt werken met het breadbord. Je kunt dit teruglezen op: https://junioriot.nl/breadboard/

De ESP32  maken we klaar voor het breadboard. Daarvoor soldeer je netjes de twee lange strips aan de bijbehorende gaatjes net als bij een Arduino nano. We leggen het hier rustig uit: https://junioriot.nl/headers-op-arduino-nano-solderen/

Controleer of het werkt met een Blink

Nu is het tijd om op jouw computer de Arduino IDE te installeren en in te stellen. Je mag daarbij de stappen met de extra leds overslaan. Volg daarvoor de uitleg op: https://junioriot.nl/voorbeeld-uploaden/

Op die pagina staat de uitleg wat je kunt in de Arduino IDE doen als het mis gaat.

Temperatuur meten met de BME280 sensor (I2C)

In het lab https://junioriot.nl/bme280-op-de-arduino/ hebben we gezien hoe we de BME280 kunnen aansluiten op de Arduino. Daar heb je getest of het op de Arduino werkt.

Nu gaan we hem aansluiten op de ESP32.

Je hebt natuurlijk in eerdere labs gezien dat je een aantal dingen zelf kunt uitzoeken. We verwachten dat je deze dingen nog moet ontdekken:

  • Welke pootjes gebruik je? Kijk zelf even in de code (verder hieronder) welke pinnen je moet gebruiken.
  • Er is een error? Ohja de error gaat over een ontbrekende library, wat moet ik doen? Kijk even welke library er ontbreekt. Gebruik de Adafruit versie.

De Wifi thermometer software

Nu heb je alle onderdelen aangesloten. Dit is een goed moment om het programma op de ESP32 te zetten. De code vind je verder hieronder. Kijk even naar de instructies in de code en voeg de juiste informatie toe. Stuur de code naar de ESP32.

Open na het uploaden de seriële monitor, en kijk naar de tekst die door de ESP32 via de serial naar ons scherm komt. Kijk daarin of je het IP adres van de ESP32 kunt vinden.

Type dit IP adres in de adres balk van je browser op je telefoon of computer die is aangesloten op het zelfde WiFi netwerk als je ESP32. Kun je de temperatuur, druk en luchtvochtigheid zien?

(Pp deze foto is nog geen breadboard gebruikt, dat is juist wel grappig). 

 

#include <WiFi.h>
#include <WebServer.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define SEALEVELPRESSURE_HPA (1013.25)

#define SDA_PIN 18
#define SCL_PIN 22
// gebruik ook VCC 
// gebruik ook GND
// als je een BME280 hebt met nog twee pinnen, dan doe je:
//   CSB aan de VCC om i2c te gebruiken
//   SDO aan de GND voor adres 0x76, SDO loslaten of aan plus voor adres 0x77

Adafruit_BME280 bme;

float temperature, humidity, pressure, altitude;

/* Hier geef je het SSID en Password van het bestaande wifi netwerk waar je vandaag zit */
const char* ssid = "mijnNetwerkNaam"; // SSID van het bestaande wifi netwerk waar je vandaag zit
const char* password = " mijnWachtwoord"; // Password van het bestaande wifi netwerk waar je vandaag zit

WebServer server(80);

void setup() {
  // start the serial monitor
  Serial.begin(115200);
  delay(100);

  Wire.begin(SDA_PIN, SCL_PIN);
  bme.begin(0x76); // I2C adress 0x76 or 0x77

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: "); Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop() {
  server.handleClient();
}

void handle_OnConnect() {
  temperature = bme.readTemperature();
  humidity = bme.readHumidity();
  pressure = bme.readPressure() / 100.0F;
  altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);
  server.send(200, "text/html", SendHTML(temperature,humidity,pressure,altitude));
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float temperature,float humidity,float pressure,float altitude){
  String ptr = "<!DOCTYPE html>";
  ptr +="<html>";
  ptr +="<head>";
  ptr +="<title>Junior IOT Weather Station</title>";
  ptr +="<meta name='viewport' content='width=device-width, initial-scale=1.0'>";

  ptr +="<style>";
  ptr +="html { font-family: 'Open Sans', sans-serif; display: block; margin: 0px auto; text-align: center;color: #444444;}";
  ptr +="body{margin: 0px;} ";
  ptr +="h1 {margin: 50px auto 30px;} ";
  ptr +="</style>";

  ptr +="</head>";
  ptr +="<body>";
  ptr +="<h1>Weather Station</h1>";
  ptr +="<div class='container'>";

  ptr +="<h3>Temperature</h3>";
  ptr +=(int)temperature;
  ptr +="<span class='superscript'>&deg;C</span></div>";
  ptr +="</div>";

  ptr +="<h3>Humidity</h3>";
  ptr +=(int)humidity;
  ptr +="<span class='superscript'>%</span></div>";
  ptr +="</div>";

  ptr +="<h3>Pressure</h3>";
  ptr +=(int)pressure;
  ptr +="<span class='superscript'>hPa</span></div>";
  ptr +="</div>";

  ptr +="<h3>Altitude</h3>";
  ptr +=(int)altitude;
  ptr +="<span class='superscript'>m</span></div>";
  ptr +="</div>";

  ptr +="<h3>www.JuniorIOT.nl</h3>";
  //ptr +="</div>";
  ptr +="</body>";
  ptr +="</html>";
  return ptr;
}