====== ESP32 POST ====== Consumo con deep sleep: 0.013A Cálculo: 156mWh - 2 horas 1872mWh dia pila tiene 11W -> 5.8 dias Queremos hacer la lectura de un valor y enviarlo por post. Empezamos por la plantilla de OTA: #include #include #include const char* ssid = "mi_red_wifi"; const char* password = "mi_contraseña_wifi"; IPAddress ip(192,168,1,69); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); IPAddress dns(8,8,8,8); AsyncWebServer server(80); void setup() { Serial.begin(115200); delay(10); Serial.println('\n'); WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet, dns); Serial.print("Conectando a "); Serial.print(ssid); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); } Serial.println('\n'); Serial.println("Conectado correctamente"); Serial.print("IP:\t"); Serial.println(WiFi.localIP()); server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->send(200, "text/plain", "V1.0 Primer OTA"); }); AsyncElegantOTA.begin(&server); // Start AsyncElegantOTA server.begin(); Serial.println("HTTP server started"); delay(1000); } void loop() { } Aladimos que haga un post. El tiempo hay que poner el incial igual al final, para que haga una nada mas empezar y luego se espere el tiempo que queramos, en este caso 1 hora #include #include #include #include const char* ssid = "pitufina"; const char* password = "reyvisigodo"; IPAddress ip(192,168,1,79); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); IPAddress dns(8,8,8,8); AsyncWebServer server(80); //Your Domain name with URL path or IP address with path String serverName = "http://bateriaseko.lobo99.com/agua.php"; // the following variables are unsigned longs because the time, measured in // milliseconds, will quickly become a bigger number than can be stored in an int. unsigned long lastTime = 3600000; // Timer set to 10 minutes (600000) //unsigned long timerDelay = 600000; // Set timer to 5 seconds (5000) unsigned long timerDelay = 3600000; void setup() { Serial.begin(115200); delay(10); Serial.println('\n'); WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet, dns); Serial.print("Conectando a "); Serial.print(ssid); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); } Serial.println('\n'); Serial.println("Conectado correctamente"); Serial.print("IP:\t"); Serial.println(WiFi.localIP()); server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->send(200, "text/plain", "V1.0 Primer OTA"); }); AsyncElegantOTA.begin(&server); // Start AsyncElegantOTA server.begin(); Serial.println("HTTP server started"); delay(1000); } void loop() { if ((millis() - lastTime) > timerDelay) { //Check WiFi connection status if(WiFi.status()== WL_CONNECTED){ HTTPClient http; String serverPath = serverName + "?agua=24"; // Your Domain name with URL path or IP address with path http.begin(serverPath.c_str()); // Send HTTP GET request int httpResponseCode = http.GET(); if (httpResponseCode>0) { Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); String payload = http.getString(); Serial.println(payload); } else { Serial.print("Error code: "); Serial.println(httpResponseCode); } // Free resources http.end(); } else { Serial.println("WiFi Disconnected"); } lastTime = millis(); } } Añadimos la lectura para que la envíe en el POST: #include #include #include #include const char* ssid = "pitufina"; const char* password = "reyvisigodo"; IPAddress ip(192,168,1,79); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); IPAddress dns(8,8,8,8); AsyncWebServer server(80); //Your Domain name with URL path or IP address with path String serverName = "http://bateriaseko.lobo99.com/agua.php"; // the following variables are unsigned longs because the time, measured in // milliseconds, will quickly become a bigger number than can be stored in an int. unsigned long lastTime = 3600000; // Timer set to 10 minutes (600000) //unsigned long timerDelay = 600000; // Set timer to 5 seconds (5000) unsigned long timerDelay = 3600000; /////////////////////////////////////////////// //// ///// //// Variables lector ultrasonido ///// //// ///// /////////////////////////////////////////////// const int trigPin = 5; const int echoPin = 18; //define sound speed in cm/uS #define SOUND_SPEED 0.034 #define CM_TO_INCH 0.393701 long duration; float distanceCm; float distanceInch; void setup() { Serial.begin(115200); delay(10); Serial.println('\n'); // Definimos pin ultrasonido pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet, dns); Serial.print("Conectando a "); Serial.print(ssid); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); } Serial.println('\n'); Serial.println("Conectado correctamente"); Serial.print("IP:\t"); Serial.println(WiFi.localIP()); server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->send(200, "text/plain", "V1.0 Primer OTA"); }); AsyncElegantOTA.begin(&server); // Start AsyncElegantOTA server.begin(); Serial.println("HTTP server started"); delay(1000); } void loop() { // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculate the distance distanceCm = duration * SOUND_SPEED/2; if ((millis() - lastTime) > timerDelay) { //Check WiFi connection status if(WiFi.status()== WL_CONNECTED){ HTTPClient http; String serverPath = serverName + "?agua=" + distanceCm; // Your Domain name with URL path or IP address with path http.begin(serverPath.c_str()); // Send HTTP GET request int httpResponseCode = http.GET(); if (httpResponseCode>0) { Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); String payload = http.getString(); Serial.println(payload); } else { Serial.print("Error code: "); Serial.println(httpResponseCode); } // Free resources http.end(); } else { Serial.println("WiFi Disconnected"); } lastTime = millis(); } } Ahora hacemos un sleep para que no gaste energía durante esa hora: #include #include #include #include const char* ssid = "pitufina"; const char* password = "reyvisigodo"; IPAddress ip(192,168,1,79); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); IPAddress dns(8,8,8,8); AsyncWebServer server(80); //Your Domain name with URL path or IP address with path String serverName = "http://bateriaseko.lobo99.com/agua.php"; #define uS_TO_S_FACTOR 1000000ULL //Conversion factor for micro seconds to seconds #define TIME_TO_SLEEP 3600 //Time ESP32 will go to sleep (in seconds) RTC_DATA_ATTR int bootCount = 0; /////////////////////////////////////////////// //// ///// //// Variables lector ultrasonido ///// //// ///// /////////////////////////////////////////////// const int trigPin = 5; const int echoPin = 18; //define sound speed in cm/uS #define SOUND_SPEED 0.034 #define CM_TO_INCH 0.393701 long duration; float distanceCm; float distanceInch; void setup() { Serial.begin(115200); delay(10); Serial.println('\n'); // Definimos pin ultrasonido pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet, dns); Serial.print("Conectando a "); Serial.print(ssid); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print('.'); } Serial.println('\n'); Serial.println("Conectado correctamente"); Serial.print("IP:\t"); Serial.println(WiFi.localIP()); server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) { request->send(200, "text/plain", "V1.0 Primer OTA"); }); AsyncElegantOTA.begin(&server); // Start AsyncElegantOTA server.begin(); Serial.println("HTTP server started"); delay(1000); enviaLectura(); 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"); //Go to sleep now esp_deep_sleep_start(); } void loop() {} String enviaLectura() { // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculate the distance distanceCm = duration * SOUND_SPEED/2; //Check WiFi connection status if(WiFi.status()== WL_CONNECTED){ HTTPClient http; String serverPath = serverName + "?agua=" + distanceCm; // Your Domain name with URL path or IP address with path http.begin(serverPath.c_str()); // Send HTTP GET request int httpResponseCode = http.GET(); if (httpResponseCode>0) { Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); String payload = http.getString(); Serial.println(payload); } else { Serial.print("Error code: "); Serial.println(httpResponseCode); } // Free resources http.end(); } else { Serial.println("WiFi Disconnected"); } delay(1000); return "OK"; }