Si près de Noël, je suis sûr que la plupart des gens pensent déjà aux boules de Noël en chocolat et à l'oie rôtie. Cher bon Père Noël, regardez votre canne à pêche, je veux toujours être bon aussi (ou quelque chose comme ça). Mais l'hiver ne se limite pas aux vacances. Le père Frost veille à ce que nous jetions aussi un coup d'œil occasionnel sur le thermomètre, surtout en tant qu'automobiliste ou autre usager de la route qui doit partir tôt par temps de brouillard ou de froid.
Le contenu derrière la porte d'aujourd'hui est tout à fait approprié : une ESP8266-12F très flexible sous la forme du Lolin V3 non soudé. Quels sont les points forts et les avantages évidents de ce microcontrôleur ? Tout d'abord, c'est un puissant ESP8266 avec beaucoup de broches sorties pour connecter les capteurs et les actionneurs. Et bien sûr, vous pouvez l'intégrer dans votre réseau local sans fil (WLAN) domestique grâce au WiFi. Comme la carte n'est pas soudée, il y a plus de possibilités que la simple utilisation d'une breadboard.
Le dispositif expérimental suivant convient pour mesurer les données atmosphériques sous la cabine ou sur le balcon/terrasse. Dans un premier temps, j'afficherai les données météorologiques dans le moniteur en série, puis je m'appuierai sur ce dernier pour afficher les données dans le réseau local sans fil (WLAN).
La figure 1 montre la configuration pour mesurer la température et l'humidité relative avec le capteur BME280.
Les câbles de démarrage vous manquent sur la photo? Je les ai fait passer sous le micro contrôleur pour qu'ils se débrouillent avec une "demi grille". La breadboard devient encore plus étroite si vous enlevez les bandes d'alimentation électrique.
Vous pouvez également souder des connecteurs femelles au lieu des barrettes de connexion (non comprises dans la livraison).
Vous n'avez donc pas du tout besoin d'une grille d'affichage et vous pouvez brancher le capteur directement. Si vous utilisez comme moi le capteur combiné de pression atmosphérique, de température et d'humidité BME280, 4 connecteurs femelles peuvent être suffisants. Je ne recommande pas de souder le capteur afin de pouvoir le remplacer si nécessaire.
Avec les quatre broches, la connexion ne pose aucun problème. Nous avons seulement besoin d'une alimentation électrique et des deux connecteurs I2C SDA et SCL, qui se trouvent ici sur SDA=D6=GPIO12 et SCL=D5=GPIO14.
Le croquis offre également la possibilité d'ajuster des lignes individuelles pour la version SPI du capteur. Cependant, le BME280 de la gamme AZ-Delivery ne prend en charge que 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();
}
Voici une capture d'écran de la sortie dans le moniteur série :
Nous voulons maintenant ajouter le login dans le WLAN domestique ; les données peuvent alors être lues sur le PC ou le smartphone dans le navigateur. Veuillez noter qu'avant de télécharger le croquis, vous devez insérer vos données WLAN (SSID et mot de passe).
// 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);
}
Après le démarrage ou la réinitialisation, vous verrez l'adresse IP du Lolin V3-8266 dans le Serial Monitor avant que la pression atmosphérique, l'humidité relative et la température soient affichées en boucle.
Et donc, tapez le tout dans le navigateur. il suffit d'entrer l'adresse IP, complétée par /Sensor.
Je vous souhaite de bonnes fêtes de fin d'année et tout le bonheur possible pour une meilleure année 2021.
5 commentaires
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