Bonjour,
Je viens vers vous car je commence Arduino et j'ai un problème.
Tout le code fonctionne très bien juste par moments je ne sais pas pourquoi après avoir envoyé le mail. Il retourne sur la connexion au wifi et par moments la connexion au wifi ne fonctionne pas super bien ...
J'ai regardé mais je ne comprends pas pourquoi il retourne dans la fonction setup...
Merci d'avance !
#include <WiFi.h>
#include "DHT.h"
#include <ESP_Mail_Client.h>
#define DHTPIN 21
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "B-----------";
const char* password = "-----------";
const char* host = "192.----.---.60";
float temperature;
float humidite;
String str;
// identification du compte email utilisé pour l'envoi
#define SMTP_HOST "-------.net"
#define SMTP_PORT 465 //assurez vous d'utiliser le bon numéro de port
#define AUTHOR_EMAIL "------@.com"
#define AUTHOR_PASSWORD "--------"
// identification du destinataire
#define RECIPIENT_NAME "-------"
#define RECIPIENT_EMAIL "------@.com"
#define EMAIL_TITLE "ESP ALERTE"
SMTPSession smtp;
void setup(){
Serial.begin(115200);
Serial.println("DHT22 Output!");
dht.begin();
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(200);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
smtp.callback(smtpCallback); // permettra de suivre le déroulement sur le moniteur série
//send_email(); // routine qui envoie le email
}
void loop(){
temperature = dht.readTemperature();
humidite = dht.readHumidity();
if(isnan(temperature) || isnan(humidite)){
Serial.println("Failed to read DHT22");
}else{
Serial.print("Humidite: ");
Serial.print(humidite);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" C");
delay(20000);
}
Serial.print("connecting to ");
Serial.println(host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
// This will send the request to the server
client.print(String("GET http://192.----.---.60/test.php?") +
("&temperature=") + temperature +
("&humidite=") + humidite +
" HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 2000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
// Read all the lines of the reply from server and print them to Serial
while(client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
if (temperature > 25) {
send_email();
}
Serial.println();
Serial.println("closing connection");
}
void send_email()
{
ESP_Mail_Session session;
SMTP_Message message;
session.server.host_name = SMTP_HOST;
session.server.port = SMTP_PORT;
session.login.email = AUTHOR_EMAIL;
session.login.password = AUTHOR_PASSWORD;
message.sender.name = "ESP32";
message.sender.email = AUTHOR_EMAIL;
message.subject = EMAIL_TITLE;
message.addRecipient(RECIPIENT_NAME, RECIPIENT_EMAIL);
// construction du corps du message (inclusion d'un nombre aléatoire)
message.text.content = "Température mesurée : "+String(temperature) +" °C | Humidité mesurée : " + String(humidite)+" %";
message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_normal;
if (!smtp.connect(&session)) // connexion au serveur SMTP
return;
if (!MailClient.sendMail(&smtp, &message)) // envoi du email
Serial.println("Erreur lors de l'envoi du email, " + smtp.errorReason());
loop();
}
// Affichage d'infos dans le moniteur série pendant l'envoi du email
void smtpCallback(SMTP_Status status){
Serial.println(status.info());
}