Aide pour mon projet (Arduino UNO+Blynk+Wifi shield ESP8266)

Bonjour à tous,

Je suis débutant en code. Mon projet est le suivant: J'ai une carte Arduino Uno et j'ai acheté un shield wifi basé sur un ESP8266 dont voici le lien: https://www.gotronic.fr/art-shield-wifi-esp8266-37262.htm. J'ai aussi un capteur de température et d'humidité DHT11 et un module RTC DS1307.

J'aimerais que le DHT11 envoie les informations (température et humidité) sur une interface blynk que j'ai créée et qu'à partir d'un certain taux d'humidité, de température ainsi qu'après une certaine heure, l'arrosage puisse se déclencher car j'ai également un relais qui sert d’interrupteur avec la pompe. L'interface blynk devra également permettre d'allumer l'arrosage à distance. Le shield Wifi possédant également un lecteur de carte micro SD, j'ai intégré dans le code les lignes nécessaires pour écrire les informations dans la carte.

J'ai compilé le code sur la carte Arduino uno mais je n'arrive pas à connecter la carte avec application blynk. Je précise aussi que l'interface utilisateur affiche aussi la température et l'humidité ainsi que l'état de la pompe (allumée ou éteinte).

Autre question pour le relais: voici celui que j'ai acheté: https://www.otronic.nl/fr/module-relais-5v-pour-arduino.html. J'aimerais savoir s'il supporte bien une tension de 230V (il me semble que oui) et s'il est nécessaire qu'il dispose d'une opto-isolation pour protéger la carte?

Voici le code de mon programme. Lorsque je connecte la carte à l'ordinateur, je aperçois pas l'humidité et la température qui s'affiche dans la console. Est-ce normal ?

#define BLYNK_TEMPLATE_ID ""
#define BLYNK_TEMPLATE_NAME ""
#define BLYNK_AUTH_TOKEN ""             
#define BLYNK_PRINT Serial                 
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
#define BLYNK_DEBUG
#define APP_DEBUG
#include <SoftwareSerial.h>                      // Librairie
#include <ESP8266_Lib.h>                         // Librairie ESP8266
#include <BlynkSimpleShieldEsp8266.h>            // Librairie Blynk et ESP8266
#include <BlynkRpcClient.h>                      // Librairies Blynk
#include <Blynk.h>                               // Librairies Blynk
#include <Wire.h>                                // Librairies de l'horloge
#include "RTClib.h"                              // Librairies de l'horloge
#include <SPI.h>                                 // Librairies de la  carte SD
#include <SD.h>                                  // Librairies de la  carte SD          /!\ Penser à mettre la carte SD au format MS-DOS FAT dans "propriétés"
#include "DHT.h"                                 // Librairie DHT11
#include <AverageValue.h>                        // Librairie moyenne
char ssid[] = "Name";                   // Vos identidiants WiFi (id)
char pass[] = "code";  // Vos identidiants WiFi (mdp)
File monFichier;                                 //
RTC_DS1307 rtc;                                  // On associe l'horloge DS-1307 à la famille des RTC
SoftwareSerial EspSerial(2, 3);                  // RX, TX (Numéro de série du logiciel sur Uno, Nano...) software
#define ESP8266_BAUD (9600)                      // Votre débit en bauds ESP8266
ESP8266 wifi(&EspSerial);
  #define DHT11_PIN 6                              //Entrée de l'iformation du DHT11 au pin digital 6
  DHT dht(6, DHT11);                               // On associe le DHT11 à la famille des DHT
  pinMode(DHT11, INPUT);       // On associe le DHT11 à une entrée
  pinMode(Relaispin, OUTPUT);  // On associe le relais à une sortie
  digitalWrite(DHT11, LOW);      // On éteint le DHT11
  digitalWrite(Relaispin, LOW);  // On éteint le module relais
  digitalWrite(DHT11, HIGH);

void setup() {                                                      // Ce qui ne se répette qu'une fois
  Serial.begin(9600);                                               // Permet d'ouvrir la console
  if (!SD.begin(4)) {                                               // Si communication avec carte SD a échouée, alors...
    Serial.println("L'initialisation a échouee !");  // rajouter les accents si nécessaire. Si problème, ce message s'affiche
    return;                                                         // Sinon
  }

  monFichier = SD.open("projet.txt", FILE_WRITE);  // Ouverture du fichier. 1 seul fichier ouvert à la fois
  if (monFichier) {
    Serial.print("Je suis en train d'écrire dans le fichier projet.txt");  // Affichage dans la console de ce message
    monFichier.close();                                                    // Fermeture du fichier
  } else {                                                                 //Sinon
    Serial.println("Erreur");            // Si erreur lors de l'ouverture du fichier, alors ce message
  }
  Serial.begin(57600);  // Entre en communication avec le bus I2C depuis la librairie Wire
#ifndef AVR
  Wire.begin();  // Pour les carte Arduino UNO
#endif
  rtc.begin();  //Entre en communication avec l'horloge depuis le bus I2C
  if (!rtc.isrunning()) {
    Serial.println("L'horloge ne fonctionne pas.");
    // Lorsque l'heure doit être réglée sur un nouvel appareil ou après une panne de courant,
    // la ligne suivante définit l'horloge RTC sur la date et l'heure auxquelles ce croquis a été compilé.
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // Cette ligne définit le RTC avec une date et une heure explicites, par exemple pour définir le 21 janvier 2014 à 3 heures du matin,
    //vous appelleriez : rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  Serial.begin(9600);
  EspSerial.begin(ESP8266_BAUD);
  delay(10);
  Blynk.begin(BLYNK_AUTH_TOKEN, wifi, ssid, pass);  // On peut également spécifier le serveur :
                                                    //Blynk.begin(BLYNK_AUTH_TOKEN, wifi, ssid, pass, "blynk.cloud", 80);
                                                    //Blynk.begin(BLYNK_AUTH_TOKEN, wifi, ssid, pass, IPAddress(192,168,1,100), 8080);
                                                    //Serial.println("Source: Les frères Poulain, Procruste, forum Blynk et Arduino ainsi que SVJ.");
                                                    //monFichier.println("Source: Les frères Poulain, Procruste, Documentation de Blynk et forum Arduino ainsi que SVJ.");
}

BLYNK_WRITE(V0) {  // Executes when the value of virtual pin 0 changes
  if (param.asInt() == 1) {
    digitalWrite(7, HIGH);  // Set digital pin 2 HIGH // execute this code if the switch widget is now ON
  } else {
    // execute this code if the switch widget is now OFF
    digitalWrite(7, LOW);  // Set digital pin 2 LOW
  }
}

void loop() {  //Ce qui se répette tout le temps

  Blynk.run();
  DateTime now = rtc.now();
  int Relaispin = 7;                               // Définition des broches pour le relais au pin digital 7
  long h = dht.readHumidity();           //Lecture de l'humidité avec une variable avec nombre à virgule
  long t = dht.readTemperature();        //Lecture de la température avec une variable avec nombre à virgule
  AverageValue<long> averageValue(960);  //Nombre de valeur compris entre averageValue et averageValue Max

  monFichier.print(now.year(), DEC);    //Affichage de l'année dans le fichier
  monFichier.print('/');                //Affichage du slach dans le fichier
  monFichier.print(now.month(), DEC);   //Affichage du mois dans le fichier
  monFichier.print('/');                //Affichage du slach dans le fichier
  monFichier.print(now.day(), DEC);     //Affichage des jours dans le fichier
  monFichier.print('/');                //Affichage du slach dans le fichier
  monFichier.print(now.hour(), DEC);    //Affichage des heures dans le fichier
  monFichier.print(':');                //Affichage des 2 points dans le fichier
  monFichier.print(now.minute(), DEC);  //Affichage des minutes dans le fichier
  monFichier.print(':');                //Affichage des 2 points dans le fichier
  monFichier.print(now.second(), DEC);  //Affichage des secondes dans le fichier
  monFichier.println();                 //Retour à la ligne dans le fichier
  Serial.print("Humidite: ");           //Affichage de "Humidité" dans la console. Rajouter les accents si nécessaire
  monFichier.print("Humidite: ");       //Affichage de "Humidité" dans le fichier. Rajouter les accents si nécessaire
  Serial.println("h");                  //Affichage de l'humidité dans la console. Rajouter les accents si nécessaire
  monFichier.println("h");              //Affichage de l'humidité dans le fichier. Rajouter les accents si nécessaire
  monFichier.print("Temperature: ");    //Affichage de "Température" dans le fichier. Rajouter les accents si nécessaire
  monFichier.println("t");              //Affichage de la température dans le fichier. Rajouter les accents si nécessaire
  delay(90000);                         // Attendre 90 secondes soit 1 min et  30 s

  int valeurHumidite = analogRead(DHT11);  // On associe la valeur de l'Humidité à ce que détecte le dht11
  if (valeurHumidite > 500) {                                       // Si la valeur de l'humidité est supérieure au seuil d'humidité...
    if (now.hour() > 20) {                                          // Si il est plus de 20 h ...
        digitalWrite(Relaispin, HIGH);                              // Alors le Relais, donc la pompe s'allume
        monFichier.println("Pompe allumée.");  // Idem dans la carte sd
      } else {                                                      // Sinon...
        digitalWrite(Relaispin, LOW);                               // Le relais reste éteint.
        monFichier.println("Pompe éteinte.");                       // Idem dans la carte SD
      }
    }
  
  {
    averageValue.push(h);
    monFichier.println(averageValue.average());
    delay(200);
  }
}

Merci d'avance de votre aide.

Tu a aucun affichage sur le port série avec la la température ou et l'humidité.
Tu affiche uniquement "Pompe allumé" ou "Pompe éteinte"

C'est vrai, je pensais en avoir mis pour la tempérture. Mais pour l'humidité, il est bien là ? C'est bien ces lignes là ?

Serial.print("Humidite: ");           //Affichage de "Humidité" dans la console. Rajouter les accents si nécessaire 
Serial.println("h");                  //Affichage de l'humidité dans la console. Rajouter les accents si nécessaire

Avez-vous les réponses à mes autres questions?
Merci de votre aide.

Pour se connecter à l'interface utilisateur, faut-il que j'insère les lignes permettant de se connecter au serveur blynk ?

Blynk.begin(BLYNK_AUTH_TOKEN, wifi, ssid, pass, "blynk.cloud", 80);
Blynk.begin(BLYNK_AUTH_TOKEN, wifi, ssid, pass, IPAddress(192,168,1,100), 8080);
                                                    

J'ai essayé mais j'ai eu un message d'erreur qui me disait que la fonction IPAddress n'était pas déclarée.
Merci de votre aide.

Effectivement tu devrais avoir ces affichages, donc ce n'est pas normal

Es tu sûre d'avoir le moniteur série configuré à la même vitesse que ton programme.
D'ailleurs tu fais deux Serial.begin, pourquoi ?

Je crois que cette fonction est fourni par Ethernet.h
Tu as regardé du côté des tutoriels de blynk?

Il y en a un pour communiquer avec un lecteur de carte sd mais j'ai oublié qu'il n'y en avait pas besoin puisqu'il qu'il y a déjà un lecteur dans le shield. Le deuxième permet de communiquer avec l'horloge mais il se peut que le débit soit mauvais. Le troisième permet de communiquer avec le shield. J'ai récupérer des bouts de code à droite à gauche et il se peut qu'il y ait des incohérence. Je pense qu'il s'agit du lecteur de carte sd et de son débit qui sont incorrects. Est-ce celà ?
J'ai trouvé des exemples de codes sur le sites de blynk via ce lien: https://examples.blynk.cc/?board=ESP8266&shield=ESP8266%20WiFi&example=GettingStarted%2FBlynkBlink
De quel tutoriels parlez-vous?
Merci de votre aide

Non, je parles de celui que tu utilises pour écrire dans le moniteur série, dans le cas présent, c'est l'objet Serial, que tu utilises pour écrire "Humidité" par exemple.
Mais peu importe pourquoi tu utilise le port série, il n'y a pas de raison d'initialiser deux fois le communication avec deux Bégin.

Je ne parles d'aucun tuto en particulier, mais je ne pense pas que celui-ci utilise deux Serial.begin.

Ok donc j’enlève les autres Serial.begin. Je n’en garde qu’un avec un débit de 9600 je suppose ? Pour que l’on puisse voir les informations dans la console, les lignes de code sont-elles bonne?
Merci de ton aide

Pour le moniteur série, j’ai mis le réglage sur Both NL & CR. Est-ce bien cela ?
Merci

Pas tout à fait, les autres, tu as en que deux, donc plutôt l'autre.
pourquoi 9600 ?
la vitesse dépend de ce que tu as choisis(ou pas) avec celui que tu dialogue, je ne me rappels plus par défaut de la vitesse sélectionné par défaut dans l'IDE d'Arduino.
Mais il faut que les deux vitesses (de ton programme et du moniteur série de L'IDE) soit identiques.
En règles général 9600 n'est plus utilisé, c'est plutôt 115200 qui est couramment utilisé.

Il y en a un juste après le void Setup:

Serial.begin(9600); 

Le second est à la ligne 49 :

Serial.begin(57600);

Et le troisième est à la ligne 62:

Serial.begin(9600);

Lequel dois-je enlever ? Celui du milieu ?
Je vais mettre le débit à 115200 pour voir si c'est çà qui bloque.

Il faut bien comprendre ce que fais cette fonction, "begin" initialise la communication avec l'appareil à l'autre bout des fils de communication série.
Une fois celle-ci établi, il n'y a plus de raison d'établir une nouvelle communication, surtout avec une vitesse différentes.
Donc il ne faut qu'un seul appel à "begin", en général on fait ça de le setup, car cette fonction est appelée qu'une seul fois.
Par contre il faut que le moniteur série de ton IDE Arduino soit configurer avec la même vitesse que celle utilisée dans ton programme.

Ok merci je vais regarder.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.