[Résolu] Projet Station Météo DIY

Bonjour,

Je lance un projet de Station Météo "Maison" avec mon fils de 7 ans.
Le câblage c'est pour lui, la programmation pour moi.

La 1° étape, le câblage, rien à dire, il a fait le travail.
Sur une carte MEGA 2560, un sensor température / humidité DHT + Sensor Effet Hall (pour l'anémomètre). Le code c'est bon aussi. Tout fonctionne.
On peut voir le Moniteur Série Arduino IDE les informations désirée.

La 2° Etape (c'est là où je cale), consiste à ajouter un ESP8266-1 pour intégrer la connexion WiFi à Blynk.
Et là c'est le drame.
L'ESP seul est bien connecté (sans le code BLYNK).
J'arrive même depuis peu à avoir des données sur le moniteur série de la MEGA 2560 en passant.
Dès que je veux, intégrer le code Blynk, plus rien ne fonctionne.

Ci-dessous les 2 Codes Arduino séparés :

ARDUINO - MEGA 2560


#include <SimpleDHT.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11


const int ledPin = 8; 
const int hallPin = 2;
static const int DHT_SENSOR_PIN = 4;
SimpleDHT11 dht11(DHT_SENSOR_PIN);

int sensorValue;

int tempoActive = 0;
// Temps à l'activation de la tempo
unsigned long tempoDepart = 0;

void setup(){
  Serial.begin(9600);
  pinMode( ledPin, OUTPUT ); 
  pinMode( hallPin, INPUT );

  Serial1.begin(115200);  

}

void mesure_anemometre() {
    // lecture du capteur a Effet Hall
  sensorValue = digitalRead( hallPin );
  //Serial.print("sensorValue = ");
  //Serial.println(sensorValue);
  
  // senseurValue = HIGH sans aimant
  // senseurValue = LOW quand POLE SUD aimant
  sensorValue = not( sensorValue );
  
  // Allumer eteindre la LED
  digitalWrite( ledPin, sensorValue );

}

void mesure_temp_humidite() {
 // start working...
  Serial.println("=================================");
  Serial.println("Sample DHT11...");
  
  // read without samples.
  byte temperature = 0;
  byte humidity = 0;
  float t = (float)temperature;
  float h = (float)humidity;  
  
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err=");
    Serial.print(SimpleDHTErrCode(err));
    Serial.print(",");
    Serial.println(SimpleDHTErrDuration(err));
    return;
  }
 
  Serial.print("Sample OK: ");
  Serial.print((int)temperature);
  Serial.print(" *C, "); 
  Serial.print((int)humidity);
  Serial.println(" H");
    
}


void loop() {
  
  mesure_anemometre();
  
  // Activation de la temporisation
  //tempoActive = 1;
  //tempoDepart = millis();
  // Serial.print("tempoActive = ");
  // Serial.println(tempoActive);
  // Serial.print("tempoDepart = ");
  // Serial.println(tempoDepart);
  // Serial.print("millis = ");
  // Serial.println(millis());
  // Serial.print("delta = ");
  // Serial.println(millis() - tempoDepart);  
  
  
  // Si la temporisation est active,
  //if ( tempoActive ) { 
  // Et si il s'est écoulé 3 secondes,
    if ( millis() - tempoDepart >= 3000 ) {
      tempoDepart = millis();
      mesure_temp_humidite();
  // Et on désactive la temporisation pour ne pas afficher ce message une seconde fois
      //tempoActive = 0; 
    }
  //} 

  // Permet de vérifier le fonctionnement Echange MEGE 2560 <-> ESP8266-1
   // read from port 1, send to port 0:  
  if (Serial1.available()) {  
   int inByte = Serial1.read();  
   //Serial.print("Test Serial1");
   //Serial.println(inByte);
   Serial.write(inByte);  
  }  
  // read from port 0, send to port 1:  
  if (Serial.available()) {  
   int inByte = Serial.read();  
   Serial1.write(inByte);  
  }  
  
}


ARDUINO - ESP8266-1

/*
Ce programme permet de chercher tous les accès wifi disponibles à portée
*/

#include <ESP8266WiFi.h>


void setup() {
  Serial.begin(115200);
  // déconnection WiFi si une connexion préalable était faite
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  Serial.println("Fait");

  // put your setup code here, to run once:
  WiFi.begin("Livebox-1F90", "mdp");


  Serial.print("Connection en cours");
  while (WiFi.status() != WL_CONNECTED) // tant que l'esp n'est pas connecté au réseau on attends
  {
    delay(3000);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connecté, adresse IP : ");
  Serial.println(WiFi.localIP()); // affichage de l'adresse IP
  
} 

void loop() {

  
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("scan demarre");
    // WiFi.scan donne le nombre de points wifi disponibles
    int n = WiFi.scanNetworks();
    Serial.println("scan terminé");
    if (n == 0) {
      Serial.println("aucun point");
    } else {
      Serial.print(n);
      Serial.println(" nombre trouvé :");
      for (int i = 0; i < n; ++i) {
    // Print SSID and RSSI
        Serial.print(i + 1);
        Serial.print(": ");
        Serial.print(WiFi.SSID(i));
        Serial.print(" (");
        Serial.print(WiFi.RSSI(i));
        Serial.print(")");
        Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
        delay(10);      
      }
    }
    // Serial.println("");
    // // attente pour un nouveau scan
    delay(5000);
  } 
 }

Mes questions :
Est-ce possible d'intégrer du code pour permettre une connexion à BLYNK ?
Si OUI, dans quel code je dois ajouter le code Blynk ?
Si NON, existe-t-il un autre moyen de récupérer les informations ?

:warning:

Post mis dans la mauvaise section, on parle anglais dans les forums généraux. ➜ déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone”

Je pense que tu ne commence pas le bon bout.
La question est comment tu communique entre le Mega et l'ESP ?

Une fois répondu à cette question normalement cela répondra à ta question ou tu met le code pour envoyer les données sur le serveur BLYNK.

SI je peux me permettre, pourquoi utiliser un ESP01 qui n'est pas le plus simple à utiliser.

Bonsoir @frdev66

une recherche avec comme mots clefs 'ESP8266 Blynk' retourne des tutoriels.

celui-là par exemple : https://www.instructables.com/Blynk-With-ESP8266/

Il y a dans ces tutoriels de l'inspiration pour confier à l'ESP8266 la laison avec Blynk

*remarque au passage : une bonne carte à ESP8266 (pas une carte étriquée comme ESP-01) permettrait de tout faire , sans carte Mega....

J'ai connecté l'ESP aux ports 19/18 de la MEGA 2560.

J'avais sous la main un ESP01 du coup je tente avec, mais c'est vrai qu'il va pas tarder par passer sous les roues de la voiture s'il continue à me résister.

J'ai suivi des tas de tutoriels mais aucun ne fonctionne.
De plus, j'ai besoin de la MEGA 2560 car le sensor à EFFET HALL a besoin d'une alimentation 5V pour fonctionner ce qu'une carte NodeMCU ne fournit pas comme tension (je me trompe ?)

Ce que je ne comprends pas c'est pourquoi les 2 cartes, qu'elles soient séparées ou liées sans code Blynk, fonctionnent. Et pourquoi, dès que je mets du code Blynk plus rien ne fonctionne (je n'ai même plus les mesures DHT11 sur le moniteur série).

L'idée n'est pas forcément de passer par Blynk, c'est un système que je connais un peu, découvre beaucoup.
Je voudrais juste réussir à faire passer des données de la MEGA 2560 vers le net via le shield ESP8266-1.

Une carte NodeMCU reçoit le 5V comme alimentation , cette tension est diponible en bord de carte

Il ya 8 ans sortait l'ESP8266
A cette époque l' ESP-01 était la seule et unique façon d'utiliser un ESP8266. Les choses ont beaucoup évolué, des cartes diverses sont apparues sur le marché permettant d'exploiter entièrement le potentiel de la puce et ceci de façon confortable.
Respect aux cartes ESP-01 qui ont fait leur temps....

Ce que je ne comprends pas c'est pourquoi les 2 cartes, qu'elles soient séparées ou liées sans code Blynk, fonctionnent. Et pourquoi, dès que je mets du code Blynk plus rien ne fonctionne (je n'ai même plus les mesures DHT11 sur le moniteur série).

quel code Blynk ? où ? comment ?

Ce code que j'intègre à la MEGA 2560 :


#define BLYNK_TEMPLATE_ID           "TMPLvMXPVYpR"
#define BLYNK_DEVICE_NAME           "Meteo"
#define BLYNK_AUTH_TOKEN            "e4Ra7py3GsW9J"

#include <SimpleDHT.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11

//#include <ESP8266WiFi.h>
#include <ESP8266_Lib.h>
//#include <BlynkSimpleEsp8266.h>
#include <BlynkSimpleShieldEsp8266.h>
//#include <SPI.h>
//#include <WiFi.h>
//#include <BlynkSimpleWifi.h>

//#define EspSerial Serial1
//#define BLYNK_PRINT Serial1

//#define ESP8266_BAUD 115200
//ESP8266 wifi(&EspSerial);
//ESP8266 wifi(&Serial);

      //#define BLYNK_PRINT DebugSerial
      //#include <BlynkSimpleStream.h>

//#define BLYNK_PRINT Serial // Enables Serial Monitor
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Livebox-1F90";
char pass[] = "mdp";


const int ledPin = 8; 
const int hallPin = 2;
static const int DHT_SENSOR_PIN = 4;
SimpleDHT11 dht11(DHT_SENSOR_PIN);

BlynkTimer timer;

int sensorValue;

int tempoActive = 0;
// Temps à l'activation de la tempo
unsigned long tempoDepart = 0;

void setup(){
  Serial.begin(9600);
  //Serial1.begin(115200);
  pinMode( ledPin, OUTPUT ); 
  pinMode( hallPin, INPUT );

  //EspSerial.begin(ESP8266_BAUD);  
  Serial1.begin(115200);  
  //delay(10);

  Blynk.begin(auth, ssid, pass);
    
  //timer.setInterval(1000L, mesure_temp_humidite);
}

void mesure_anemometre() {
    // lecture du capteur a Effet Hall
  sensorValue = digitalRead( hallPin );
  //Serial.print("sensorValue = ");
  //Serial.println(sensorValue);
  
  // senseurValue = HIGH sans aimant
  // senseurValue = LOW quand POLE SUD aimant
  sensorValue = not( sensorValue );
  
  // Allumer eteindre la LED
  digitalWrite( ledPin, sensorValue );

  //Blynk.virtualWrite(V4, sensorValue);
}

void mesure_temp_humidite() {
 // start working...
  Serial.println("=================================");
  Serial.println("Sample DHT11...");
  
  // read without samples.
  byte temperature = 0;
  byte humidity = 0;
  float t = (float)temperature;
  float h = (float)humidity;  
  
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err=");
    Serial.print(SimpleDHTErrCode(err));
    Serial.print(",");
    Serial.println(SimpleDHTErrDuration(err));
    return;
  }
 
  Serial.print("Sample OK: ");
  Serial.print((int)temperature);
  Serial.print(" *C, "); 
  Serial.print((int)humidity);
  Serial.println(" H");

  //Blynk.virtualWrite(V5, h);
  //Blynk.virtualWrite(V6, t);
    
}


void loop() {
  Blynk.run();
  
  mesure_anemometre();
  
  // Activation de la temporisation
  //tempoActive = 1;
  //tempoDepart = millis();
  // Serial.print("tempoActive = ");
  // Serial.println(tempoActive);
  // Serial.print("tempoDepart = ");
  // Serial.println(tempoDepart);
  // Serial.print("millis = ");
  // Serial.println(millis());
  // Serial.print("delta = ");
  // Serial.println(millis() - tempoDepart);  
  
  
  // Si la temporisation est active,
  //if ( tempoActive ) { 
  // Et si il s'est écoulé 3 secondes,
    if ( millis() - tempoDepart >= 3000 ) {
      tempoDepart = millis();
      mesure_temp_humidite();
  // Et on désactive la temporisation pour ne pas afficher ce message une seconde fois
      //tempoActive = 0; 
    }
  //} 

  //timer.run();

  //Serial.println("HELLO !!");

   // read from port 1, send to port 0:  
  if (Serial1.available()) {  
   int inByte = Serial1.read();  
   //Serial.print("Test Serial1");
   //Serial.println(inByte);
   Serial.write(inByte);  
  }  
  // read from port 0, send to port 1:  
  if (Serial.available()) {  
   int inByte = Serial.read();  
   Serial1.write(inByte);  
  }  
  
}

Sur ce forum, nous n'arrêtons pas de dissuader les demandeurs d'adopter ces solutions ARDUINO / ESP complètement dépassées.
D'autre part ton sujet est mal présenté. Je sais bien que quand on a le nez dans le guidon, on ne pense pas toujours au fait que les interlocuteurs n'ont pas toutes les données en main. Qu'est ce qui t'empêches de présenter ton projet de manière plus exhaustive ?

Que veut-tu dire pas plus exhaustive ?

Des schemas ? Photos ? c'est bien ça ?

Au minimum un schéma.

Je suppose donc que tu veux faire communiquer les deux cartes par le port série.

Je ne comprends pas pourquoi tu fait des include de esp8266wifi dans ton code Arduino ?

Comme toujours, il est plus simple de faire les choses petit à petit.
Donc je te conseillerais, de commencer par faire dialoguer les deux cartes via le port série.
En envoyant des commandes du méga vers l'esp et l'esp qui répond quelque chose.
Tu pourras voir après comment insérer du code blynk ou autre serveur de données

Cela c’est si @frdev66 veut réinventer la roue. Blynk fournit une bibliothèque pour faire tout cela. Il suffit d’un peu de code issu de

#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>

Lire ce document et spécifiquement le paragraphe Connecting an Arduino Mega to an ESP-01

Bonjour,

Merci pour vos conseils.
J'ai essayé le tutoriel fourni par Blynk, mais nulle part il est indiqué sur quel Arduino il faut le déposer (MEGA 2560 ou ESP1).
Donc j'ai essayé sur :

  • ESP1 : connexion à Blynk sans soucis mais pas de mesure transmises (normal les capteurs sont connectés à la MEGA 2560)
  • MEGA 2560 : pas de connexion à Blynk et plus de mesures sur le moniteur série du IDE

J'ai même essayé sur les 2 par dépit :flushed:

Bref, comme vous pouvez le constater, je ne comprends plus rien.

Alors voici une nouvelle liste de questions, pour me permettre de reprendre depuis le début :

  • Dois-je déposer du code sur l'ESP1 (que ce soit Blynk ou juste une connexion WiFi) ?
  • Est-il obligé que les commandes AT répondent sur l'ESP1 (ce n'est pas le cas actuellement pourtant il se connecte sans soucis) ?
  • Y a-t-il un sens de compilation dans le langage Arduino (ce qui pourrait expliquer l'arrêt du fonctionnement des mesures dès lors que la librairie Blynk est activée dans le code) ?
  • Est-ce que je peux alimenter un capteur EFFET HALL (demandant 5V) avec une carte NodeMCU V3 ?
    ** al1fch indique : "cette tension est disponible en bord de carte"
    ** C'est quoi le Bord de Carte ?

Bonjour

la carte NodeMCU a 4 côtés ou 4 bords
Sur l'un d'eux dans un angle , près de l'embase USB, une broche est nommée Vin ou 5V, on y retrouve la tension 5V issue de l'embase USB.

Attention : si la tension en sortie du capteur Hall est susceptible d'atteindre 5V , insérer un pont diviseur pour amener la tension dans la plage admissible par un GPIO d'ESP8266

Quelle est la référence du capteur Hall ?

BLYNK :

Concernant BLYNK il me semble que mélanges 2 usages des ESP8266 en tant que 'périphérique WiFi' :

  1. ESP8266 avec un firmware AT, recevant et exécutant des commandes AT
  2. ESP8266 exécutant un programme 'maison', éventuellement conçu avec l'IDE Arduino

Il se pourrait que ce que tu injectes dans la carte MEGA (cf message #8) corresponde au cas 1 et que le MEGA cherche à communiquer avec un ESP8266 doté d'un firmware AT

je n'utilise pas Blynk et ai totalement abandonné les assemblages hétéroclites 'carte Arduino + ESP-01' (je ne suis pas assez maso sans doute...)
je ne peux aider davantage dans cette voie

il faut que l'ESP 01 contiennent l'OS avec les commandes AT
on flash uniquement la MEGA avec le code. l'ESP-01 est piloté comme un modem WiFi par le biais de commandes AT envoyées sur le port série

Bonne Nouvelle !!

Cette fois cela fonctionne !

Merci al1fch car ta réponse m'a permis de me dire que j'étais passé à côté de quelque chose : NodeMCU peut alimenter le capteur EFFET HALL.

J'ai donc abandonné le combo MEGA 2560 + ESP1 pour le remplacer par une NodeMCU V3 et là...

Température OK
Humidité OK
Effet Hall OK
Connexion WiFi OK
Affichage sur Blynk OK

MERCI à Tous pour votre aide et vos conseils qui ont permis de passer de la V0 à la V1 de notre Projet.

Bonsoir @frdev66

Féliciations et bienvenue au club des utilisateurs "d'ESP Libres' :rocket:

ESP libres de toute entrave.
Bravo.