Dht11 + ESP32 + réveille a distanceu

Bonjour, dans ce petit programme, j'envoie de ma cave le taux d'humidité et la température toutes les 600 secondes sur un serveur qui les stocke dans une base SQL. J'ai procédé ainsi car je souhaite économiser l'énergie consommée par l'esp32 qui est alimenté par une batterie. Pour résumer:
1/toutes les 600 secondes l'esp32 lit le capteur DHT11
2/envoie les données sur un serveur
3/ qui les transmet dans une base de données.
4/ Ensuite je peux les consulter sur mon site.
J'ai fait comme cela parce que idéalement j'aurais aimé lire les donnés en live. Le problème est que si l'esp32 est en mode sleep, il n'est pas connecté au wifi et donc je ne peux pas l'activer à distance.

Y-a-t-il une façon plus intelligente de procéder? => est ce que je peux réveiller l'esp32 à distance sachant qu'il dort?

Sinon j'aimerais juste que l'esp32 relève les données à 1h du matin, midi et 19h tous les jours. Quelle est la manière élégante d'y arriver?

Merci beaucoup

[code]
#include "DHT.h"
#include <Arduino.h> 
#define DHTPIN 32
//our sensor is DHT11 type
#define DHTTYPE DHT11
//create an instance of DHT sensor
DHT dht(DHTPIN, DHTTYPE);

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "XXXX";           
const char* password = "XXXXXX"; 
 

#define uS_TO_S_FACTOR 1000000UL  // Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP  600   // Time ESP32 will go to sleep (in 600 seconds) *

const char* serverName = "https://mapage.php";

// Keep this API Key value to be compatible with the PHP code provided in the project page. 
// If you change the apiKeyValue value, the PHP file /mapage.php also needs to have the same key 
// => security process

String apiKeyValue = "XXXXX";

void setup()
{
Serial.begin(115200);


  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) +
  " Seconds");

  Serial.println();

  WiFi.begin(ssid, password);

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP());
  
Serial.println("DHT11 sensor!");
//call begin to start sensor
dht.begin();

//use the functions which are supplied by library.
float humidity = dht.readHumidity();
// Read temperature as Celsius (the default)
float temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// print the result to Terminal
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C ");
//we delay a little bit for next read
delay(2000);

 if(WiFi.status()== WL_CONNECTED){
    WiFiClient client;
    HTTPClient http;

 // Your Domain name with URL path or IP address with path
    //http.begin(client, serverName);
    http.begin("https://XXXXXXX"); // ma page php
    // Specify content-type header
   http.addHeader("Content-Type", "application/x-www-form-urlencoded");
    
    // Prepare your HTTP POST request data
    String httpRequestData = "api_key=" + apiKeyValue + "&humidity=" + humidity
                          + "&temperature=" + temperature + "";
    Serial.print("httpRequestData: ");
    Serial.println(httpRequestData);
    

    // Send HTTP POST request  
    int httpResponseCode = http.POST(httpRequestData);
   
    if (httpResponseCode>0 || httpResponseCode==-1 ) {
      //String response = http.getString();
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
       //Serial.println(response);
    }
    else {
      Serial.print("Error code: ");
      Serial.println(httpResponseCode);
    }
    // Free resources
    http.end();
  }
  else {
    Serial.println("WiFi Disconnected");
  }
  //Send an HTTP POST request every 30 seconds

  Serial.println("Going to sleep now");
  delay(1000);
  Serial.flush(); 
  esp_deep_sleep_start();
  Serial.println("This will never be printed");

}

void loop() {
}
[/code]

Bonjour @el_gringo

est ce que je peux réveiller l'esp32 à distance sachant qu'il dort?

Non, pas de manière autonome. Seuls sont possibles les réveils par temporisation ou par action sur un GPIO

Sinon j'aimerais juste que l'esp32 relève les données à 1h du matin, midi et 19h tous les jours. Quelle est la manière élégante d'y arriver?

horaires précis : ajouter un circuit intégré RTC et y programmer une alarme pour qu'il réveille l"ESP32 à la bonne heure par sa sortie INT reliée à un GPIO configuré pour le réveil

horaires approximatifs : mettre à l'heure l'ESP32 par NTP et programmer une durée de sommeil acceptable

Merci Al1fch

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