From 85ea4e995a75abe061f6fc375ea0481084dddd43 Mon Sep 17 00:00:00 2001 From: schererleander Date: Tue, 20 Jan 2026 08:34:54 +0100 Subject: initial commit --- .../RequestContinuation/RequestContinuation.ino | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 libraries/ESP_Async_WebServer/examples/RequestContinuation/RequestContinuation.ino (limited to 'libraries/ESP_Async_WebServer/examples/RequestContinuation') diff --git a/libraries/ESP_Async_WebServer/examples/RequestContinuation/RequestContinuation.ino b/libraries/ESP_Async_WebServer/examples/RequestContinuation/RequestContinuation.ino new file mode 100644 index 0000000..0584cf1 --- /dev/null +++ b/libraries/ESP_Async_WebServer/examples/RequestContinuation/RequestContinuation.ino @@ -0,0 +1,91 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +// Copyright 2016-2025 Hristo Gochkov, Mathieu Carbou, Emil Muratov + +// +// Shows how to use request continuation to pause a request for a long processing task, and be able to resume it later. +// + +#include +#ifdef ESP32 +#include +#include +#elif defined(ESP8266) +#include +#include +#elif defined(TARGET_RP2040) || defined(TARGET_RP2350) || defined(PICO_RP2040) || defined(PICO_RP2350) +#include +#include +#endif + +#include +#include +#include + +static AsyncWebServer server(80); + +// request handler that is saved from the paused request to communicate with Serial +static String message; +static AsyncWebServerRequestPtr serialRequest; + +// request handler that is saved from the paused request to communicate with GPIO +static uint8_t pin = 35; +static AsyncWebServerRequestPtr gpioRequest; + +void setup() { + Serial.begin(115200); + +#ifndef CONFIG_IDF_TARGET_ESP32H2 + WiFi.mode(WIFI_AP); + WiFi.softAP("esp-captive"); +#endif + + // Post a message that will be sent to the Serial console, and pause the request until the user types a key + // + // curl -v -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "question=Name%3F%20" http://192.168.4.1/serial + // + // curl output should show "Answer: [y/n]" as the response + server.on("/serial", HTTP_POST, [](AsyncWebServerRequest *request) { + message = request->getParam("question", true)->value(); + serialRequest = request->pause(); + }); + + // Wait for a GPIO to be high + // + // curl -v http://192.168.4.1/gpio + // + // curl output should show "GPIO is high!" as the response + server.on("/gpio", HTTP_GET, [](AsyncWebServerRequest *request) { + gpioRequest = request->pause(); + }); + + pinMode(pin, INPUT); + + server.begin(); +} + +void loop() { + delay(500); + + // Check for a high voltage on the RX1 pin + if (digitalRead(pin) == HIGH) { + if (auto request = gpioRequest.lock()) { + request->send(200, "text/plain", "GPIO is high!"); + } + } + + // check for an incoming message from the Serial console + if (message.length()) { + Serial.printf("%s", message.c_str()); + // drops buffer + while (Serial.available()) { + Serial.read(); + } + Serial.setTimeout(10000); + String response = Serial.readStringUntil('\n'); // waits for a key to be pressed + Serial.println(); + message = emptyString; + if (auto request = serialRequest.lock()) { + request->send(200, "text/plain", "Answer: " + response); + } + } +} -- cgit v1.3.1