Das zweiundzwanzigste Türchen

So kurz vor Weihnachten denken die meisten bestimmt schon an Gänsebraten und Schokoladen-Christbaum-Kugeln. Lieber guter Weihnachtsmann, schaue Deine Rute an, ich will auch immer artig sein (oder so ähnlich). Aber der Winter hat mehr zu bieten als nur Feiertage. Väterchen Frost sorgt dafür, dass wir auch einen gelegentlichen Blick auf das Thermometer werfen sollten, insbesondere als Autofahrer oder sonstiger Verkehrsteilnehmer, der bei Nebel oder Glatteis früher losfahren sollte.

Da kommt der Inhalt hinter dem heutigen Türchen gerade recht: Ein hochflexibler ESP8266-12F in Form des unverlöteten Lolin V3. Wo liegen die eindeutigen Stärken und Vorteile dieses Micro Controllers? Zunächst einmal ist er ein leistungsstarker ESP8266 mit vielen heraus geführten Pins zum Anschluss von Sensoren und Aktoren. Und natürlich kann man ihn mit WiFi in das heimische WLAN integrieren. Da das Board unverlötet kommt, ergeben sich weitere Möglichkeiten als nur die Nutzung eines Breadboards.

Der folgenden Versuchsaufbau eignet sich für die Messung der atmosphärischen Daten unter dem Carport oder auf dem Balkon/der Terrasse. Dabei werde ich die Wetterdaten in einem ersten Schritt im Seriellen Monitor anzeigen, darauf aufbauend dann die Anzeige der Daten im WLAN vornehmen.


Bild 1 zeigt den Aufbau für die Messung von Temperatur und Relativer Luftfeuchtigkeit mit dem Sensor BME280.

Sie vermissen die Jumperkabel auf dem Bild? Die habe ich unterhalb des Micro Controllers verlegt, um mit einem „Half Breadboard“ auszukommen. Noch schmaler wird das Breadboard, wenn Sie die Stromversorgungsleisten entfernen.

Alternativ können Sie anstelle der Pin-Leisten sogenannte Federleisten, auch Buchsenleisten genannt  (nicht im Lieferumfang) einlöten.


Dann benötigen Sie überhaupt kein Breadboard und können den Sensor direkt einstecken. Wenn Sie wie ich den kombinierten Luftdruck-, Temperatur- und Luftfeuchtigkeits-Sensor BME280 benutzen, genügen ggf. 4 Federleisten. Vom Einlöten des Sensors rate ich ab, um diesen ggf. auch austauschen zu können.


Mit den vier Pins ist das Anschließen kein Problem. Wir benötigen nur Spannungsversorgung und die beiden I2C-Anschlüsse SDA und SCL, die hier auf SDA=D6=GPIO12 und SCL=D5=GPIO14 liegen.

Der Sketch bietet auch die Möglichkeit, einzelne Zeilen für die SPI-Version des Sensors anzupassen. Der BME280 aus dem Sortiment von AZ-Delivery unterstützt allerdings nur I2C.

 

// Example testing sketch for various DHT humidity/temperature sensors written by ladyada
// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor

#include <Wire.h>

//Sensor
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // I2C
/* pins for SPI
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 4
*/
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime = 2000;
float tempC;
float humid;
float pressure;

void setup() {
//Sensor
  Serial.begin(74880);
  Wire.begin(12,14);
  while(!Serial); // time to get serial running
  Serial.println(F("BME280 test"));

  unsigned status;

// default settings
  status = bme.begin(0x76);
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
    Serial.print("SensorID was: 0x"); 
    Serial.println(bme.sensorID(),16);
    Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
    Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
    Serial.print(" ID of 0x60 represents a BME 280.\n");
    Serial.print(" ID of 0x61 represents a BME 680.\n");
    while (1) delay(10);
  }
}

void loop() {
// Sensor
// Wait a few seconds between measurements.
  delay(delayTime);

// Read temperature as Celsius (the default)
  tempC = bme.readTemperature();
// Read rel. humidity
  humid = bme.readHumidity();
// Read air pressure
  pressure = bme.readPressure() / 100.0;

  Serial.print(F("Air Pressure: "));
  Serial.print(pressure,1);
  Serial.print(F(" HPa "));
  Serial.print(F(" Humidity: "));
  Serial.print(humid,1);
  Serial.print(F("% Temperature: "));
  Serial.print(tempC,1);
  Serial.println(F("°C "));
  Serial.println();

Download Code1

Hier ein Screenshot zur Ausgabe im Seriellen Monitor:


Nun wollen wir die Anmeldung im heimischen WLAN ergänzen; dann können die Daten am PC oder Smartphone im Browser gelesen werden. Bitte beachten Sie vor dem Hochladen des Sketches, Ihre WLAN-Daten (SSID und Passwort) einzufügen.

// Example testing sketch for various DHT humidity/temperature sensors written by ladyada
// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
// modified for WiFi by Team AZ-Delivery.de
// add your SSID and password below

#include <Wire.h>
// Server
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* SSID = "-----your SSID-----";
const char* PASSWORD = "---your password---";
ESP8266WebServer server(80);

//Sensor
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // I2C
/* pins for SPI
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 4
*/
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime = 2000;
float tempC;
float humid;
float pressure;

void setup() {
//Sensor
  Serial.begin(74880);
  Wire.begin(12,14);
  while(!Serial); // time to get serial running
  Serial.println(F("BME280 test"));

  unsigned status;

// default settings
  status = bme.begin(0x76);
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
    Serial.print("SensorID was: 0x");
    Serial.println(bme.sensorID(),16);
    Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
    Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
    Serial.print(" ID of 0x60 represents a BME 280.\n");
    Serial.print(" ID of 0x61 represents a BME 680.\n");
    while (1) delay(10);
  }

// Server
  Serial.begin(74880);
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID, PASSWORD);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.printf("Connected to %s.\n", SSID);
  Serial.printf("IP-Address: %s.\n", WiFi.localIP().toString().c_str());

  if (MDNS.begin("Lolin32")) {
    Serial.println("MDNS-Responder started.");
  }

  server.on("/", handleRoot);

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP-Server started.");

}

void loop() {
// Sensor
// Wait a few seconds between measurements.
  delay(delayTime);

// Read temperature as Celsius (the default)
  tempC = bme.readTemperature();
// Read rel. humidity
  humid = bme.readHumidity();
// Read air pressure
  pressure = bme.readPressure() / 100.0;

  Serial.print(F("Air Pressure: "));
  Serial.print(pressure,1);
  Serial.print(F(" HPa "));
  Serial.print(F(" Humidity: "));
  Serial.print(humid,1);
  Serial.print(F("% Temperature: "));
  Serial.print(tempC,1);
  Serial.println(F("°C "));
  Serial.println();
 
// Server
  server.handleClient();

server.on("/Sensor", HTTP_GET, []() {
  String message = "<!doctype html>\n";
  message += "<html>\n";
  message += " <head>\n";
  message += " <title>Lolin V3 und BME280</title>\n";
  message += " </head>\n";
  message += " <body>\n";
  message += " <h1>Air Pressure: ";
  message += String(pressure, 1);
  message += " HPa;</h1>\n";
  message += " <h1>Temperature: ";
  message += String(tempC, 2);
  message += " &#8451;</h1>\n";
  message += " <h1>Rel. Humidity: ";
  message += String(humid, 0);
  message += " %</h1>\n";
  message += " </body>\n";
  message += "</html>\n";
  server.send(200, "text/html", message);
  });
}

void handleRoot() {
  server.send(200, "text/plain", "Here is your LolinV3!");
}

void handleNotFound() {
  String message = "Path ";
  message += server.uri();
  message += " not found.\n";
  server.send(404, "text/plain", message);
}

Download Code2

Nach dem Start bzw. Reset sehen Sie die IP-Adresse des Lolin V3-8266 im Seriellen Monitor, bevor Luftdruck, Rel. Luftfeuchtigkeit und Temperatur in einer Endlosschleife angezeigt werden.


Und so das Ganze im Browser aus, dazu einfach die IP-Adresse, ergänzt um /Sensor eingeben.

 

Ich wünsche Ihnen eine gesegnete Weihnachtszeit und alles Gute für ein besseres Jahr 2021.

Specials

3 Kommentare

Bernd Albrecht

Bernd Albrecht

@ A. Freudenstein
Hallo und vielen Dank für Ihr Interesse an unseren Produkten und Blog-Beiträgen.
Ich mache keinen Hehl daraus, dass ich aufgrund des letzten Satzes geneigt war, Ihren Kommentar komplett zu löschen. Aber mein Lehrer sagte immer „Sine ira et studio“. Selbstverständlich kann immer etwas beim Hochladen oder Verlinken schief gehen. Also habe ich die Verlinkung aus dem Blog genommen, die beiden Sketches heruntergeladen und gestartet, das richtige Micro Controller Board eingestellt und das Kompilieren gestartet. Beide Sketche wurde ohne Fehlermeldung kompiliert.
Aufgrund Ihrer Angaben kann ich den Fehler bei Ihnen leider nicht abschließend analysieren; ich vermute falsche Board-Einstellung oder nicht-kompatible Bibliotheken.
Wenn die Probleme fortbestehen, wenden Sie sich bitte an unseren Service.

A. Freudenstein

A. Freudenstein

Hallo,
versuchte, über Weihnachten das 22. Türchen zum Laufen zu bringen, nachdem ich mir die Teile original bei az.delivery bestellt und auch noch rechtzeitig erhalten hatte.
Dachte, recht einfache Sache. Trugschluß!
Beim Kompilieren traten Fehler über Fehler auf, die ich nach und nach beseitigt hatte, bis zum Schluß der Fehler mit der wire.h Bibliothek noch übrig blieb, der sich nicht beseitigen ließ und ein Fehler in der Zeile ca. 45, beginnt mit: Serial.println(bme.sensorID(),16);
Frage: Gibt es mittlerweile irgendwo schon eine lauffähige Version, die mir jemand zukommen lassen kann? (Beide Versionen, Code 1 + 2)?
Damit das Suchen und Basteln ein Ende hat.
Wurden die Versionen vom Verfasser des Blogs ausprobiert?
MfG
A. Freudenstein

Matthias Kasper

Matthias Kasper

Hallo zusammen,

genau dafür habe ich schon vor einiger Zeit ein Gehäuse zum 3D-Druck konstruiert. Das kann auf Thingiverse mit dem Link https://www.thingiverse.com/thing:4672436 runter geladen werden.

Mit freundlichen Grüßen
Matthias

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi