/* * This example shows how to use WebSerial variant to send data to the browser when timing, speed and latency are important. * WebSerial focuses on reducing latency and increasing speed by enqueueing messages and sending them in a single packet. * * The responsibility is left to the caller to ensure that the messages sent are not too large or not too small and frequent. * For example, use of printf(), write(c), print(c), etc are not recommended. * * This variant can allow WebSerial to support a high speed of more than 20 messages per second like in this example. * * It can be used to log data, debug, or send data to the browser in real-time without any delay. * * You might want to look at the Logging variant to see how to better use WebSerial for streaming logging. * * You might want to control these flags to control the async library performance: * -D CONFIG_ASYNC_TCP_QUEUE_SIZE=128 * -D CONFIG_ASYNC_TCP_RUNNING_CORE=1 * -D WS_MAX_QUEUED_MESSAGES=128 */ #include #if defined(ESP8266) #include #include #elif defined(ESP32) #include #include #endif #include #include #include #include AsyncWebServer server(80); static const char* dict = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890"; static uint32_t last = millis(); static uint32_t count = 0; void setup() { Serial.begin(115200); WiFi.softAP("WSLDemo"); Serial.print("IP Address: "); Serial.println(WiFi.softAPIP().toString()); WebSerial.onMessage([](const String& msg) { Serial.println(msg); }); WebSerial.begin(&server); server.onNotFound([](AsyncWebServerRequest* request) { request->redirect("/webserial"); }); server.begin(); } void loop() { #ifdef ESP8266 if (millis() - last > 500) { #else if (millis() - last > 50) { #endif count++; long r = random(10, 250) + 15; String buffer; buffer.reserve(r); buffer += count; while (buffer.length() < 10) { buffer += " "; } buffer += ""; for (int i = 0; i < r; i++) { buffer += dict[random(0, 62)]; } WebSerial.print(buffer); last = millis(); } }