- Ring-Buffer _logBuf in web_server.cpp: webLogForward() schreibt auf Core 1 - GET /log-data liefert Puffer als Plain-Text (kein WebSocket, kein Core-Konflikt) - Browser pollt alle 2 s, Auto-Scroll, dunkles Terminal-Theme - LOG_I/LOG_E/LOG_D: Timestamp (HH:MM:SS nach NTP, sonst +Xs), webLogForward() - Alle Serial.* in laser_tracker.cpp, mqtt_client.cpp, web_server.cpp auf LOG_I/LOG_E - main.cpp: esp_reset_reason() beim Booten loggen (POWER_ON / WATCHDOG / PANIC...) - telnet_logger.h entfernt (war nur noch Deprecated-Stub) - Feature-Requests.md: FR-002 abgeschlossen
119 lines
3.8 KiB
C++
119 lines
3.8 KiB
C++
/**
|
||
* TEST SKETCH – Telnet Server (Minimal, keine externen Libraries)
|
||
*
|
||
* Testet ob WiFiServer / WiFiClient auf dem ESP32 korrekt funktioniert.
|
||
* Keine Abhängigkeiten außer dem ESP32 Arduino Framework.
|
||
*
|
||
* Ablauf:
|
||
* 1. Verbindet sich mit WLAN (Credentials in mqtt_test_secrets.h)
|
||
* 2. Öffnet Telnet-Server auf Port 23
|
||
* 3. Sendet jede Sekunde einen Zähler über Serial UND Telnet
|
||
* 4. Eingehende Telnet-Bytes werden auf Serial gespiegelt
|
||
*
|
||
* ENTHÄLT ArduinoOTA → nach dem Test kann per OTA zurückgeflasht werden!
|
||
*
|
||
* Flash: pio run -e test-telnet --target upload
|
||
* Monitor: pio device monitor (USB Serial, 115200)
|
||
* Telnet: telnet <IP> 23 oder PuTTY (Telnet, Port 23)
|
||
* Zurück: pio run -e az-delivery-devkit-v4-ota --target upload
|
||
*
|
||
* Erwartetes Verhalten:
|
||
* Serial + Telnet: "[TICK] uptime: 5 s, heap: 234560" jede Sekunde
|
||
*/
|
||
|
||
#include <Arduino.h>
|
||
#include <WiFi.h>
|
||
#include <ArduinoOTA.h>
|
||
#include "mqtt_test_secrets.h" // TEST_WIFI_SSID, TEST_WIFI_PASSWORD
|
||
|
||
// -----------------------------------------------------------------------
|
||
// WiFi-Zugangsdaten aus mqtt_test_secrets.h
|
||
// Fehlermeldung falls nicht definiert
|
||
// -----------------------------------------------------------------------
|
||
#ifndef TEST_WIFI_SSID
|
||
#error "TEST_WIFI_SSID nicht definiert – bitte mqtt_test_secrets.h anlegen"
|
||
#endif
|
||
|
||
static WiFiServer telnetServer(23);
|
||
static WiFiClient telnetClient;
|
||
|
||
// -----------------------------------------------------------------------
|
||
void setup() {
|
||
Serial.begin(115200);
|
||
delay(500);
|
||
Serial.println("\n[SETUP] Telnet-Test gestartet");
|
||
|
||
// WLAN verbinden
|
||
Serial.printf("[SETUP] Verbinde mit SSID: %s ...\n", TEST_WIFI_SSID);
|
||
WiFi.begin(TEST_WIFI_SSID, TEST_WIFI_PASSWORD);
|
||
uint32_t t = millis();
|
||
while (WiFi.status() != WL_CONNECTED) {
|
||
if (millis() - t > 15000) {
|
||
Serial.println("[SETUP] FEHLER: WLAN-Verbindung nach 15s fehlgeschlagen!");
|
||
Serial.println("[SETUP] Gerät startet neu ...");
|
||
delay(1000);
|
||
ESP.restart();
|
||
}
|
||
delay(500);
|
||
Serial.print(".");
|
||
}
|
||
Serial.printf("\n[SETUP] WiFi verbunden! IP: %s\n", WiFi.localIP().toString().c_str());
|
||
|
||
// ArduinoOTA starten (damit nach dem Test per OTA zurückgeflasht werden kann)
|
||
ArduinoOTA.setHostname("lasercutter-display");
|
||
ArduinoOTA.begin();
|
||
Serial.println("[SETUP] ArduinoOTA aktiv");
|
||
|
||
// Telnet-Server starten
|
||
telnetServer.begin();
|
||
telnetServer.setNoDelay(true);
|
||
Serial.printf("[SETUP] Telnet-Server läuft auf Port 23\n");
|
||
Serial.printf("[SETUP] Verbinde mit: telnet %s 23\n", WiFi.localIP().toString().c_str());
|
||
}
|
||
|
||
// -----------------------------------------------------------------------
|
||
void loop() {
|
||
ArduinoOTA.handle();
|
||
|
||
// --- Neuen Client annehmen ---
|
||
if (!telnetClient || !telnetClient.connected()) {
|
||
WiFiClient newClient = telnetServer.available();
|
||
if (newClient) {
|
||
telnetClient = newClient;
|
||
telnetClient.setNoDelay(true);
|
||
Serial.println("[TELNET] Client verbunden!");
|
||
telnetClient.println("[TELNET] Verbindung OK. Sekunden-Ticks folgen ...");
|
||
telnetClient.flush();
|
||
}
|
||
} else {
|
||
// Weiteren wartenden Client ablehnen
|
||
WiFiClient extra = telnetServer.available();
|
||
if (extra) {
|
||
extra.stop();
|
||
}
|
||
// Eingehende Bytes auf Serial spiegeln
|
||
while (telnetClient.available()) {
|
||
char c = telnetClient.read();
|
||
Serial.print(c);
|
||
}
|
||
}
|
||
|
||
// --- Jede Sekunde Tick senden ---
|
||
static uint32_t lastTick = 0;
|
||
static uint32_t counter = 0;
|
||
if (millis() - lastTick >= 1000) {
|
||
lastTick = millis();
|
||
counter++;
|
||
|
||
char msg[80];
|
||
snprintf(msg, sizeof(msg), "[TICK] #%lu uptime: %lu s heap: %u\n",
|
||
counter, millis() / 1000, ESP.getFreeHeap());
|
||
|
||
Serial.print(msg);
|
||
if (telnetClient && telnetClient.connected()) {
|
||
telnetClient.print(msg);
|
||
telnetClient.flush();
|
||
}
|
||
}
|
||
}
|