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();
}
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 += " ℃</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);
}
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.
5 commenti
Andreas Wolter
versuchen Sie den I2C_Scanner Sketch und testen, ob der BME überhaupt am I2C Bus erkannt wird. Man findet ihn in der Beispielen unter “Wire”. Wenn ja, sollte auch der Sketch aus diesem Beitrag funktionieren. Ansonsten müssten Sie den Sensor einmal austauschen, oder an einem anderen Mikrocontroller testen. Wenn der BME nicht erkannt wurde, könnte das am Breadboard liegen, wenn Sie eins verwendet haben. Dann einmal zum Testen mit Kabeln direkt anschließen. Wenn das nicht funktioniert, noch einmal die Pins überprüfen. Wenn dort alle Fehler ausgeschlossen wurden, empfehle ich ebenfalls, den Sensor einmal zu tauschen, oder an einem anderen Mikrocontroller zu testen.
User
Allen ein Gesundes Neues Jahr!
@A. Freudenstein an der Stelle scheitert es bei mir auch.
NodeMCU erfolgreich geflasht. Arduino IDE wurde installiert, die benötigten Bibliotheken hinzugefügt. In Arduino den Link http://arduino.esp8266.com/stable/package_esp8266com_index.json unter Datei —> Voreinstellungen —> zusätzliche Boardverwalter eingetragen.
Es muss in die Klammer die richtige Sensoradresse eingetragen sein bspw. so: (0×76) oder (0×77). Ich habe mehrere Skripte probiert. Alle wurden fehlerfrei kompiliert und ließen sich auch fehlerfrei hochladen. Zusätzlich noch ein Testskript aus der BME lib und entsprechend angepasst.
Einmal mit 76 und einmal mit 77 seperat abgespeichert, jedoch werden am seriellen Monitor keine Sensorwerte ausgegeben. BME wird nicht gefunden. Wie bei allen anderen Skripten vorher auch.
Grüße vom Fehlersuchenden
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
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
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