Boucle Connexion WIFI

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());
}

: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

Déjà il n'est pas nécessaire d'appeler la fonction loop, celle-ci est appelé par l'environnement Arduino, tout comme la fonction setup.

Si tu rentres plusieurs fois dans la fonction setup, c'est que ton Arduino reboot, il faudrait voir ce que dit le moniteur série

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