Zum Inhalt springen
Logo TechLab Blog

TechLab Blog

ESP32 Wetterstation

Am Mittwoch 25. September 2019 trafen sich einige Studierene und Mitarbeitende der Fachhochschule Graubünden im TechLab, um sich eine kleine Wetterstation zu bauen.

Als Grundgerüst nahmen wir einen ESP32 Mikrokontroller, an den wir dann einen Temperatur- und Luftdrucksensor (BME280) anschlossen. Andreas und Marcel haben extra im Vorfeld der Veranstaltung ein Handout konzipiert (siehe Handout), damit die Teilnehmer nur noch den Instruktionen folgen konnten. Die ganze Verkabelung sah folgendermassen aus:

Jetzt kamen wir zum mühsamen Teil. Wir mussten in der Ardunio IDE Software (mit der wir den ESP verbunden hatten und wo wir den Code laufen liessen) die passenden Bibliotheken runterladen und installieren. Dies dauerte eine Weile.

Damit der ESP die Sensordaten des Sensors nicht nur auslesen, sondern auch schön darstellen kann, richteten wir zusätzlich noch ein Konto beim Internetdienst Thingspeak ein, wo wir dann die Daten auf einfache Art und Weise visualisieren konnten.

Danach kopierten wir uns den Code in die Arduino IDE.

#include <ThingSpeak.h>

#include <WiFi.h>

#include <WiFiClient.h>

#include <WebServer.h>

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_BME280.h>

 

#define SEALEVELPRESSURE_HPA (1013.25)

 

Adafruit_BME280 bme;

float temperature, humidity, pressure, altitude;

unsigned long myChannelNumber = 434738;

const char * myWriteAPIKey = „ZVZVZ344GU45454“;

 

const char* ssid = „YOUR_SSID“;  // Enter SSID here

const char* password = „password“;  //Enter Password here

 

WiFiClient  client;

 

void setup() {

  Serial.begin(115200);

  delay(100);

  WiFi.mode(WIFI_STA);

  ThingSpeak.begin(client);

  bme.begin(0x76);

}

 

void loop() {

  // Connect or reconnect to WiFi

  if (WiFi.status() != WL_CONNECTED) {

    Serial.print(„Attempting to connect to SSID: „);

    Serial.println(ssid);

    while (WiFi.status() != WL_CONNECTED) {

      WiFi.begin(ssid, password); // Connect to WPA/WPA2 network. Change this line if using open or WEP network

      Serial.print(„.“);

      delay(5000);

    }

    Serial.println(„\nConnected.“);

  }

 

  // Measure Sensor data

  temperature = bme.readTemperature();

  humidity = bme.readHumidity();

  pressure = bme.readPressure() / 100.0F;

  altitude = bme.readAltitude(SEALEVELPRESSURE_HPA);

 

  ThingSpeak.setField( 1, (float) temperature);

  ThingSpeak.setField( 2, (float) humidity);

  ThingSpeak.setField( 3, (float) pressure);

  ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);

 

  //if (httpCode == 200) {

    //Serial.println(„Channel write successful.“);

  //}

  //else {

    //Serial.println(„Problem writing to channel. HTTP error code “ + String(httpCode));

  //}

  // Wait 20 seconds to update the channel again

  delay(20000);

}

Der Code sieht so etwas kryptisch aus, aber es ist halb so schlimm. Zuerst werden die Libraries geladen, die es braucht, um den Sensor anzusprechen und die Wifi-Verbindung herzustellen. Danach werden verschiedene Variabeln definiert, um in diese nachher die Sensordaten hineinzuschreiben. Damit der Thingspeak-Dienst angesprochen werden kann, braucht es auch noch einen Key und die Channel Nummer. Schliesslich wird eine Wifi-Verbinung erzeugt, die Sensordaten ausgemessen und auf Thingspeak in die entsprechenden Felder reingeschrieben. Am Ende des Codes wird noch angegeben, wie oft die Daten auf Thingspeak aktualisiert werden sollen (hier 20000 Millisekunden = 20 Sekunden).

Sobald der Code auf den ESP raufgeladen wurde, sah das Ganze dann am Ende auf Thnigspeak so aus:

Man kann sich natürlich vorstellen, die Sensordaten in einer Datenbank zu speichern. Aber das wäre was für einen weiteren TechLab Abend…

Handout des Abends: Handout Techlab Esp32 Thingspeak Wetterstation

Share

Anzahl Kommentare0
Kommentare