Poco antes de Navidad, la mayoría de la gente seguramente pensará en ganso asado y bolas de chocolate para árboles de Navidad. Querido buen Santa, mira tu vara, siempre quiero ser bueno (o algo así). Pero el invierno tiene más que ofrecer que solo vacaciones. Father Frost asegura que también deberíamos echar un vistazo ocasional al termómetro, especialmente como conductor u otro usuario de la carretera que debería salir antes en medio de niebla o hielo negro.
El contenido detrás de la pequeña puerta de hoy es perfecto: un ESP8266-12F altamente flexible en forma de Lolin V3 sin soldar.
¿Cuáles son las claras ventajas y fortalezas de este microcontrolador? En primer lugar, es un ESP8266 de alto rendimiento con muchos pines para conectar sensores y actuadores. Y por supuesto, puede integrarlo con WiFi en el WiFi de su hogar. Dado que la placa viene sin soldar, existen otras posibilidades además de usar una placa de pruebas.
La siguiente configuración de prueba es adecuada para medir los datos atmosféricos debajo de la cochera o en el balcón / terraza. En un primer paso, mostraré los datos meteorológicos en el monitor en serie, luego me basaré en esto para mostrar los datos en la WLAN.
La Figura 1 muestra la configuración para medir la temperatura y la humedad relativa con el sensor BME280.
¿Le faltan los cables de puente en la imagen? Lo moví debajo del microcontrolador para pasar con una "media placa". La placa de pruebas se vuelve aún más estrecha si quita las tiras de la fuente de alimentación.
Alternativamente, en lugar de las tiras de pines, puede soldar en las llamadas tiras de resorte, también conocidas como tiras de enchufe (no incluidas en la entrega).
Entonces no necesita una placa de prueba y puede conectar el sensor directamente. Si, como yo, utiliza el sensor combinado de presión de aire, temperatura y humedad BME280, 4 regletas de enchufes pueden ser suficientes. Aconsejo no soldar en el sensor para poder reemplazarlo si es necesario.
La conexión no es un problema con los cuatro pines. Solo necesitamos la fuente de alimentación y las dos conexiones I2C : SDA y SCL, que están aquí en SDA = D6 = GPIO12 y SCL = D5 = GPIO14.
El boceto también ofrece la opción de adaptar líneas individuales para la versión SPI del sensor. Sin embargo, el BME280 de la gama AZ-Delivery solo es compatible con 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();
}
Aquí hay una captura de pantalla de la salida en el monitor en serie:
Ahora queremos agregar el registro en la WLAN doméstica; luego, los datos se pueden leer en la PC o en el smartphone en el navegador. Asegúrese de incluir sus datos WiFi (SSID y contraseña) antes de cargar el boceto.
// 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);
}
Después del inicio o del reinicio, usted verá la dirección IP del Lolin V3-8266 en el serial Monitor antes de la presión del aire, Rel. humedad y temperatura en un bucle infinito.
Y así todo el asunto en el navegador, simplemente la dirección IP, complementado por /sensor enter.
Les deseo una bendecida Navidad y todo lo mejor para el año 2021.
5 comentarios
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