Station météo BME280

Vous souhaitez piloter votre framboise à partir d'une page web ? Ou mieux encore à partir d'un smartphone ou d'une tablette Android ? Venez donc visiter cette rubrique...

Modérateur : Francois

Moulins58
Messages : 31
Enregistré le : jeu. 11 févr. 2021 20:46
Localisation : Nantes

Station météo BME280

Message par Moulins58 » ven. 19 mars 2021 14:38

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)Image mais mon device ne se met pas à jour.
Fichiers joints
Erreur BME280.JPG
Erreur BME280.JPG (54.71 Kio) Vu 6617 fois

domi
Administrateur
Messages : 3230
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Station météo BME280

Message par domi » ven. 19 mars 2021 16:56

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.
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.

Moulins58
Messages : 31
Enregistré le : jeu. 11 févr. 2021 20:46
Localisation : Nantes

Re: Station météo BME280

Message par Moulins58 » ven. 19 mars 2021 19:30

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
Capture-console.JPG
Capture-console.JPG (38 Kio) Vu 6604 fois
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");
}
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.

Moulins58
Messages : 31
Enregistré le : jeu. 11 févr. 2021 20:46
Localisation : Nantes

Re: Station météo BME280

Message par Moulins58 » mar. 23 mars 2021 09:24

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. Image
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
Ping Station météo.JPG (28.21 Kio) Vu 6548 fois

domi
Administrateur
Messages : 3230
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Station météo BME280

Message par domi » mar. 23 mars 2021 09:59

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.
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.

Moulins58
Messages : 31
Enregistré le : jeu. 11 févr. 2021 20:46
Localisation : Nantes

Re: Station météo BME280

Message par Moulins58 » mar. 23 mars 2021 12:53

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.

Moulins58
Messages : 31
Enregistré le : jeu. 11 févr. 2021 20:46
Localisation : Nantes

Re: Station météo BME280

Message par Moulins58 » mer. 24 mars 2021 17:52

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. :lol: :lol: :lol:
Merci a ceux qui m'ont répondus.

domi
Administrateur
Messages : 3230
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Station météo BME280

Message par domi » mer. 24 mars 2021 20:20

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.

Moulins58
Messages : 31
Enregistré le : jeu. 11 févr. 2021 20:46
Localisation : Nantes

Re: Station météo BME280

Message par Moulins58 » ven. 26 mars 2021 16:15

Oui, mais elle n'a pas fonctionnée longtemps!
Je me suis emballé trop vite, elle s'est mise à jour une seule fois.

domi
Administrateur
Messages : 3230
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: Station météo BME280

Message par domi » ven. 26 mars 2021 18:33

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.

Répondre

Retourner vers « Des interfaces pour le Raspberry Pi »