Station météo BME280
Modérateur : Francois
Station météo BME280
Bonjour,
J'ai commencé ma station météo d'après le tuto de Domotic DIY . Pour moi, c'est un peu compliqué!
Mosquitto fonctionne bien
Ota ne fonctionne pas , j'ai pas de message d'erreur mais dans l'IDE Arduino, en port com ne ne vois pas le port wifi de ma station pourtant les elle est bien connectée à ma box, je la vois et avec son nom.
La BME280 fonctionne, j'ai bien les données dans le moniteur Arduino (capture jointe) mais mon device ne se met pas à jour.
J'ai commencé ma station météo d'après le tuto de Domotic DIY . Pour moi, c'est un peu compliqué!
Mosquitto fonctionne bien
Ota ne fonctionne pas , j'ai pas de message d'erreur mais dans l'IDE Arduino, en port com ne ne vois pas le port wifi de ma station pourtant les elle est bien connectée à ma box, je la vois et avec son nom.
La BME280 fonctionne, j'ai bien les données dans le moniteur Arduino (capture jointe) mais mon device ne se met pas à jour.
- Fichiers joints
-
- Erreur BME280.JPG (54.71 Kio) Vu 6944 fois
-
- Administrateur
- Messages : 3234
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: Station météo BME280
Bonjour,
Au tout départ, lors du démarrage de l'ESP, dans la console, il doit être affiché l'adresse IP du module, ce qui justifiera qu'il est bien connecté au WiFi.
Python v2.7 (et non pas v3) a bien été installé ?
Essayez d'abord d'allumer l'ESP, puis après quelques seconde lancer l'IDE Arduino seulement une fois l'ESP connecté au Wifi.
Au tout départ, lors du démarrage de l'ESP, dans la console, il doit être affiché l'adresse IP du module, ce qui justifiera qu'il est bien connecté au WiFi.
Python v2.7 (et non pas v3) a bien été installé ?
Essayez d'abord d'allumer l'ESP, puis après quelques seconde lancer l'IDE Arduino seulement une fois l'ESP connecté au Wifi.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Re: Station météo BME280
J'ai bien installé la version 2.7 de python.
Tout a fait lors que je vais dans la console, et que je fais un reset de l'ESP j'ai bien l'adresse IP Voici mon script:
Lorsque j'allume ESP, et qu'au bout de quelques secondes je vais voir dans l'IDE en console, j'ai bien les données de connections WiFi et MQTT ainsi que les données de la BME280. (Il faut attendre un peu).
Merci de votre réponse et Bon weekend.
Tout a fait lors que je vais dans la console, et que je fais un reset de l'ESP j'ai bien l'adresse IP Voici mon script:
Code : Tout sélectionner
/*
Station météo à base d'un ESP8266, et envoi des données vers Domoticz via MQTT.
Dépot Github : https://github.com/DomoticDIY/.........
Chaine YouTube du Tuto Vidéo : https://www.youtube.com/c/DomoticDIY
Bibliothéques nécessaires, et version utilisées :
- pubsubclient v2.7.0 : https://github.com/knolleary/pubsubclient
- ArduinoJson v6.15.0 : https://github.com/bblanchon/ArduinoJson
- ESP8266Wifi v1.0.0
- ArduinoOTA v1.0.0
- Adafruit unified sensor v 1.1.2
- Adafruit BME280 v2.0.2
Installer le gestionnaire de carte ESP8266 version 2.7.1
Si besoin : URL à ajouter pour le Bord manager : http://arduino.esp8266.com/stable/package_esp8266com_index.json
Adaptation pour reconnaissance dans Domoticz :
Dans le fichier PubSubClient.h : La valeur du paramètre "MQTT_MAX_PACKET_SIZE" doit être augmentée à 512 octets. Cette définition se trouve à la ligne 26 du fichier.
Sinon cela ne fonctionne pas avec Domoticz
Pour prise en compte du matériel :
Installer si besoin le Driver USB CH340G : https://wiki.wemos.cc/downloads
dans Outils -> Type de carte : generic ESP8266 module
Flash mode 'QIO' (régle générale, suivant votre ESP, si cela ne fonctionne pas, tester un autre mode.
Flash size : 1M (no SPIFFS)
Port : Le port COM de votre ESP vu par windows dans le gestionnaire de périphériques.
*/
const char* ssid = "SFR_xxxx"; // SSID du réseau Wifi
const char* password = "resa4jfxxxxxxxb83"; // Mot de passe du réseau Wifi.
const char* mqtt_server = "192.168.1.xx"; // Adresse IP ou DNS du Broker.
const int mqtt_port = 1883; // Port du Brocker MQTT
const char* mqtt_login = "mqtt"; // Login de connexion à MQTT.
const char* mqtt_password = "pass2mqtt"; // Mot de passe de connexion à MQTT.
// ------------------------------------------------------------
// Variables de configuration :
const char* topicIn = "domoticz/out"; // Nom du topic envoyé par Domoticz
const char* topicOut = "domoticz/in"; // Nom du topic écouté par Domoticz
// ------------------------------------------------------------
// Variables et constantes utilisateur :
String nomModule = "Moulins58_Meteo"; // Nom usuel de ce module. Sera visible uniquement dans les Log Domoticz.
unsigned long t_lastActionCapteur = 0; // enregistre le Time de la dernière intérogation.
const long t_interoCapteur = 60000; // Valeur de l'intervale entre 2 relevés.
// Variables utilisateur. ( Mettre IDX = 0 si pas de device)
int idxBME280 =237; // index du capteur BME280.
int idxPA =0; // Index du capteur BMP280, uniquement pour pression atmosphèrique.
int correctionBME280 =6; // correction de la PA en fonction de l'altitude du capteur (+ 1hPA tous les 8m.)
int idxAltitude =0; // Index du Device de distance.
// On intégre les bibliothéques necessaire à la mise à jour via OTA.
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
// On intégre les librairies necessaires à la connexion Wifi, au MQTT, et à JSON, necessaire pour le MQTT.
#include <PubSubClient.h>
#include <ArduinoJson.h>
// On intégre les librairies necessaires aux Capteurs.
#include <Wire.h>
#include <Adafruit_BME280.h>
// Initialisation du Wifi et du MQTT.
WiFiClient espClient;
PubSubClient client(espClient);
// Initialisation du BME280
Adafruit_BME280 bme;
// float temperature, humidity, pressure, altitude;
#define SEALEVELPRESSURE_HPA (1013.25)
void setup() {
Serial.begin(115200); // On initialise la vitesse de transmission de la console.
setup_wifi(); // Connexion au Wifi
initOTA(); // Initialisation de l'OTA
client.setServer(mqtt_server, mqtt_port); // On défini la connexion MQTT
init_capteurs(); // Initialisation des Capteurs de relevés
}
void loop() {
ArduinoOTA.handle(); // On verifie si une mise a jour OTA nous est envoyée. Si OUI, la lib ArduinoOTA se charge de faire la MAJ.
unsigned long currentMillis = millis(); // On enregistre le Time courant
// On s'assure que MQTT est bien connecté.
if (!client.connected()) {
// MQTT déconnecté, on reconnecte.
Serial.println("MQTT déconnecté, on reconnecte !");
reconnect();
} else {
// On vérifie que l'intervale de relevé des capteurs est atteint.
if (currentMillis - t_lastActionCapteur >= t_interoCapteur) {
// MQTT connecté, on exécute les traitements
getDataBME280(); // Relevé des données du BME280, et envoi à Domoticz
// Traitement effectué, on met à jour la valeur du dernier traitement.
t_lastActionCapteur = currentMillis;
}
}
}
// INITIALISATION des Capteurs
// ***************************
void init_capteurs() {
bme.begin(0x76); // 0x76 = I2C adresse
}
/*
* ************** */
/* Les Fonctions
* ************** */
void getDataBME280() {
// Relevé et envoi du BM280 (Pression atmosphérique)
String temperature = String(bme.readTemperature());
String humidity = String(bme.readHumidity());
int pressure = (bme.readPressure() / 100.0F) + correctionBME280;
String altitude = String(bme.readAltitude(SEALEVELPRESSURE_HPA) * 100);
int bar_for = 0;
// Calcul de BAR_FOR (0 = No info; 1 = Soleil; 6 = Partiellement nuageux; 3 = Variable; 4 = Pluie)
if (pressure < 980) { bar_for = 4; }
else if (pressure < 1000) { bar_for = 6; }
else if (pressure < 1020) { bar_for = 3; }
else if (pressure >= 1020) { bar_for = 1; }
else { bar_for = 0; }
// Envoi des données à Domoticz via MQTT
if ( idxBME280 != 0) {
String svalue = temperature + ";" + humidity + ";0;" + String(pressure) + ";" + String(bar_for); // svalue = TEMP;HUM;HUM_STAT;BAR;BAR_FOR;
Serial.print("BME280 : svalue = "); Serial.print(svalue); Serial.print(" (TEMP;HUM;HUM_STAT;BAR;BAR_FOR)"); // Message pour débug en console
SendData("udevice", idxBME280, 0, svalue);
}
if ( idxPA != 0) {
String svalue = String(pressure) + ";" + String(bar_for); // svalue = BAR;BAR_FOR
Serial.print("BME280 : svalue = "); Serial.print(svalue); Serial.print(" (BAR;BAR_FOR)"); // Message pour débug en console
SendData("udevice", idxPA, 0, svalue);
}
if ( idxAltitude != 0) {
Serial.print("Altitude : svalue = "); Serial.print(altitude); Serial.print(" (Distance en m)");
SendData("udevice", idxAltitude, 0, altitude);
}
}
// CONNEXION WIFI
// **************
void setup_wifi() {
// Connexion au réseau Wifi
delay(10);
Serial.println();
Serial.print("Connection au réseau : ");
Serial.println(ssid);
WiFi.mode(WIFI_STA); // Passage de la puce en mode client
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
// Tant que l'on est pas connecté, on boucle.
delay(500);
Serial.print(".");
}
// Initialise la séquence Random
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connecté");
Serial.print("Addresse IP : ");
Serial.println(WiFi.localIP());
}
// INITIALISATION Arduino OTA
// **************************
void initOTA() {
/* Port par defaut = 8266 */
// ArduinoOTA.setPort(8266);
/* Hostname, par defaut = esp8266-[ChipID] */
ArduinoOTA.setHostname("Moulins58_Meteo");
/* Pas d'authentication par defaut */
// ArduinoOTA.setPassword("admin");
/* Le mot de passe peut également être défini avec sa valeur md5 */
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
// code à exécuter au démarrage de la mise à jour
ArduinoOTA.onStart([]() {
String type;
if (ArduinoOTA.getCommand() == U_FLASH)
type = "sketch";
else // U_SPIFFS
type = "filesystem";
// NOTE: si vous mettez à jour SPIFFS, démonter SPIFFS à l'aide de SPIFFS.end ()
Serial.println("Début de update " + type);
});
// code à exécuter à la fin de la mise à jour
ArduinoOTA.onEnd([]() {
Serial.println("\nFin");
});
// code à exécuter pendant la mise à jour
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progression : %u%%\r", (progress / (total / 100)));
});
// code à exécuter en cas d'erreur de la mise à jour
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Erreur[%u] : ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Authentification Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Exécution Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connexion Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Réception Failed");
else if (error == OTA_END_ERROR) Serial.println("Fin Failed");
});
ArduinoOTA.begin();
Serial.println("Prêt");
Serial.print("Adresse IP : ");
Serial.println(WiFi.localIP());
}
// CONNEXION MQTT
// **************
void reconnect() {
// Boucle jusqu'à la connexion MQTT
while (!client.connected()) {
Serial.print("Tentative de connexion MQTT...");
// Création d'un ID client aléatoire
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Tentative de connexion
if (client.connect(clientId.c_str(), mqtt_login, mqtt_password)) {
Serial.println("connecté");
// Connexion effectuée, publication d'un message...
String message = "Connexion MQTT de "+ nomModule + " réussi sous référence technique : " + clientId + ".";
// Création de la chaine JSON6
DynamicJsonDocument doc(256);
// On renseigne les variables.
doc["command"] = "addlogmessage";
doc["message"] = message;
// On sérialise la variable JSON
String messageOut;
serializeJson(doc, messageOut);
// Convertion du message en Char pour envoi dans les Log Domoticz.
char messageChar[messageOut.length()+1];
messageOut.toCharArray(messageChar,messageOut.length()+1);
client.publish(topicOut, messageChar);
// On souscrit (écoute)
client.subscribe("#");
} else {
Serial.print("Erreur, rc=");
Serial.print(client.state());
Serial.println(" prochaine tentative dans 2s");
// Pause de 2 secondes
delay(2000);
}
}
}
// ENVOI DES DATAS.
// ***************
void SendData (String command, int idxDevice, int nvalue, String svalue) {
// Création de la chaine JSON6
DynamicJsonDocument doc(256);
// On renseigne les variables.
doc["command"] = command;
doc["idx"] = idxDevice;
doc["nvalue"] = nvalue;
doc["svalue"] = svalue;
// On sérialise la variable JSON
String messageOut;
serializeJson(doc, messageOut);
// Convertion du message en Char pour envoi dans les Log Domoticz.
char messageChar[messageOut.length()+1];
messageOut.toCharArray(messageChar,messageOut.length()+1);
client.publish(topicOut, messageChar);
// Pause de 1 secondes
delay(1000);
Serial.println("\t -> Message envoyé à Domoticz");
}
Merci de votre réponse et Bon weekend.
Re: Station météo BME280
J'apporte quelque précisions:
J'ai installé un matériel " System Alive Checker (Ping)" pour voire mon adresse IP de mon ESP 8266 dans Domoticz. Et celui-ci est bien connecté à Domoticz.
Mais aucune données dans Température et Météo.
Si quelqu'un pouvait m'aider? Merci
J'ai installé un matériel " System Alive Checker (Ping)" pour voire mon adresse IP de mon ESP 8266 dans Domoticz. Et celui-ci est bien connecté à Domoticz.
Mais aucune données dans Température et Météo.
Si quelqu'un pouvait m'aider? Merci
- Fichiers joints
-
- Ping Station météo.JPG (28.21 Kio) Vu 6875 fois
-
- Administrateur
- Messages : 3234
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: Station météo BME280
Bonjour,
Si le capteur virtuel du BME280 est "Moulins58-Meteo", cela n'est pas le bon type de capteur.
Celui-ci est un capteur de lumière (Lighting), qui ne peut être que ON ou OFF.
Il faut installer le capteur "Température+Humidité+Baromêtre"
Dans les logs de domoticz tu dois déjà pouvoir vérifier que le MQTT reçoit l'info, et l'envoi à Domoticz.
Si le capteur virtuel du BME280 est "Moulins58-Meteo", cela n'est pas le bon type de capteur.
Celui-ci est un capteur de lumière (Lighting), qui ne peut être que ON ou OFF.
Il faut installer le capteur "Température+Humidité+Baromêtre"
Dans les logs de domoticz tu dois déjà pouvoir vérifier que le MQTT reçoit l'info, et l'envoi à Domoticz.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Re: Station météo BME280
Mon capteur est bien un capteur "température humidité baromètre" .
Dans la capture que j'ai joints au précédent message, c'est juste le ping de l'adresse IP du capteur comme quoi il est bien connecté à Domoticz.
Dans les logs, je n'ai pas de trace de ce capteur.
Bonne après-midi.
Dans la capture que j'ai joints au précédent message, c'est juste le ping de l'adresse IP du capteur comme quoi il est bien connecté à Domoticz.
Dans les logs, je n'ai pas de trace de ce capteur.
Bonne après-midi.
Re: Station météo BME280
Rien compris!....
17h30 aujourd'hui 24 mars, ma sonde fonctionne, je n'ai rien fait aujourd'hui sur mon Raspberry il faisait du soleil donc jardin.
Merci a ceux qui m'ont répondus.
17h30 aujourd'hui 24 mars, ma sonde fonctionne, je n'ai rien fait aujourd'hui sur mon Raspberry il faisait du soleil donc jardin.
Merci a ceux qui m'ont répondus.
-
- Administrateur
- Messages : 3234
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: Station météo BME280
Etrange, mais l'important est que cela fonctionne.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Re: Station météo BME280
Oui, mais elle n'a pas fonctionnée longtemps!
Je me suis emballé trop vite, elle s'est mise à jour une seule fois.
Je me suis emballé trop vite, elle s'est mise à jour une seule fois.
-
- Administrateur
- Messages : 3234
- Enregistré le : mer. 17 sept. 2014 18:12
- Localisation : Seine et Marne
Re: Station météo BME280
Regarde dans les log de Domoticz voir si c'est le MQTT qui est déconnant, la commande envoyée, ou Domoticz qui ne l'accepte pas.
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.