summaryrefslogtreecommitdiff
path: root/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main')
-rw-r--r--libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/CMakeLists.txt2
-rw-r--r--libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/idf_component.yml6
-rw-r--r--libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/main.cpp95
3 files changed, 103 insertions, 0 deletions
diff --git a/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/CMakeLists.txt b/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/CMakeLists.txt
new file mode 100644
index 0000000..9eb7ec4
--- /dev/null
+++ b/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/CMakeLists.txt
@@ -0,0 +1,2 @@
+idf_component_register(SRCS "main.cpp"
+ INCLUDE_DIRS ".")
diff --git a/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/idf_component.yml b/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/idf_component.yml
new file mode 100644
index 0000000..e2d1c65
--- /dev/null
+++ b/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/idf_component.yml
@@ -0,0 +1,6 @@
+## IDF Component Manager Manifest File
+dependencies:
+ esp32async/espasyncwebserver:
+ version: "*"
+ override_path: "../../../"
+ pre_release: true
diff --git a/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/main.cpp b/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/main.cpp
new file mode 100644
index 0000000..59a1f59
--- /dev/null
+++ b/libraries/ESP_Async_WebServer/idf_component_examples/serversentevents/main/main.cpp
@@ -0,0 +1,95 @@
+// SPDX-License-Identifier: LGPL-3.0-or-later
+// Copyright 2016-2025 Hristo Gochkov, Mathieu Carbou, Emil Muratov
+
+//
+// SSE example
+//
+
+#include <Arduino.h>
+#include <AsyncTCP.h>
+#include <WiFi.h>
+
+#include <ESPAsyncWebServer.h>
+
+static const char *htmlContent PROGMEM = R"(
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Server-Sent Events</title>
+ <script>
+ if (!!window.EventSource) {
+ var source = new EventSource('/events');
+ source.addEventListener('open', function(e) {
+ console.log("Events Connected");
+ }, false);
+ source.addEventListener('error', function(e) {
+ if (e.target.readyState != EventSource.OPEN) {
+ console.log("Events Disconnected");
+ }
+ }, false);
+ source.addEventListener('message', function(e) {
+ console.log("message", e.data);
+ }, false);
+ source.addEventListener('heartbeat', function(e) {
+ console.log("heartbeat", e.data);
+ }, false);
+ }
+ </script>
+</head>
+<body>
+ <h1>Open your browser console!</h1>
+</body>
+</html>
+)";
+
+static const size_t htmlContentLength = strlen_P(htmlContent);
+
+static AsyncWebServer server(80);
+static AsyncEventSource events("/events");
+
+void setup() {
+ Serial.begin(115200);
+
+#ifndef CONFIG_IDF_TARGET_ESP32H2
+ WiFi.mode(WIFI_AP);
+ WiFi.softAP("esp-captive");
+#endif
+
+ // curl -v http://192.168.4.1/
+ server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
+ // need to cast to uint8_t*
+ // if you do not, the const char* will be copied in a temporary String buffer
+ request->send(200, "text/html", (uint8_t *)htmlContent, htmlContentLength);
+ });
+
+ events.onConnect([](AsyncEventSourceClient *client) {
+ Serial.printf("SSE Client connected! ID: %" PRIu32 "\n", client->lastId());
+ client->send("hello!", NULL, millis(), 1000);
+ });
+
+ events.onDisconnect([](AsyncEventSourceClient *client) {
+ Serial.printf("SSE Client disconnected! ID: %" PRIu32 "\n", client->lastId());
+ });
+
+ server.addHandler(&events);
+
+ server.begin();
+}
+
+static uint32_t lastSSE = 0;
+static uint32_t deltaSSE = 3000;
+
+static uint32_t lastHeap = 0;
+
+void loop() {
+ uint32_t now = millis();
+ if (now - lastSSE >= deltaSSE) {
+ events.send(String("ping-") + now, "heartbeat", now);
+ lastSSE = millis();
+ }
+
+ if (now - lastHeap >= 2000) {
+ Serial.printf("Free heap: %" PRIu32 "\n", ESP.getFreeHeap());
+ lastHeap = now;
+ }
+}