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]