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.