lano
Aktives Mitglied
Moin.
Ist das hier überhaupt richtig ?
Naja, egal ...
Ich hab einen ESP-01. Den hab ich jetzt an den seriellen Port meiner Fritzbox gehängt.
Nu hab ich mir gedacht es reicht wenn ich einfach die Zeichen von seriell lese und telnetmäßig sende und umgekehrt.
Zeilenümbrüche und Tabs funktionieren aber irgendwie nicht.
Bisher hab ich noch keine für mich logische erklärung gefunden.
Jemand ne Idee?
Ist das hier überhaupt richtig ?
Naja, egal ...
Ich hab einen ESP-01. Den hab ich jetzt an den seriellen Port meiner Fritzbox gehängt.
Nu hab ich mir gedacht es reicht wenn ich einfach die Zeichen von seriell lese und telnetmäßig sende und umgekehrt.
Zeilenümbrüche und Tabs funktionieren aber irgendwie nicht.
Bisher hab ich noch keine für mich logische erklärung gefunden.
Jemand ne Idee?
telnet2serial.ino:
#include <ArduinoOTA.h>
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
const char *ssid = "wlan";
const char *password = "passwd";
uint8_t i;
bool ConnectionEstablished; // Flag for successfully handled connection
#define MAX_TELNET_CLIENTS 2
WiFiServer TelnetServer(23);
WiFiClient TelnetClient[MAX_TELNET_CLIENTS];
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// ... Give ESP 10 seconds to connect to station.
unsigned long startTime = millis();
while (WiFi.status() != WL_CONNECTED && millis() - startTime < 10000) {
delay(200);
}
if (WiFi.status() != WL_CONNECTED)
ESP.restart();
if (!MDNS.begin("esp8266")) {
while (1) {
delay(1000);
}
}
// Add service to MDNS-SD
MDNS.addService("http", "tcp", 80);
TelnetServer.begin();
TelnetServer.setNoDelay(true);
// OTA
// Port defaults to 8266
ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
ArduinoOTA.setHostname("fritz_telnet");
// No authentication by default
//ArduinoOTA.setPassword((const char *)"1234");
ArduinoOTA.onStart([]() {});
ArduinoOTA.onEnd([]() {});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {});
ArduinoOTA.onError([](ota_error_t error) {});
ArduinoOTA.begin();
}
void loop() {
ArduinoOTA.handle(); // Wait for OTA connection
MDNS.update();
Telnet(); // Handle telnet connections
}
//void TelnetMsg(String text){
// for(i = 0; i < MAX_TELNET_CLIENTS; i++) {
// if (TelnetClient[i] || TelnetClient[i].connected()) {
// TelnetClient[i].println(text);
// }
// }
// delay(10); // to avoid strange characters left in buffer
//}
void Telnet() {
// Cleanup disconnected session
for (i = 0; i < MAX_TELNET_CLIENTS; i++) {
if (TelnetClient[i] && !TelnetClient[i].connected()) {
TelnetClient[i].stop();
}
}
// Check new client connections
if (TelnetServer.hasClient()) {
ConnectionEstablished = false; // Set to false
for (i = 0; i < MAX_TELNET_CLIENTS; i++) {
// find free socket
if (!TelnetClient[i]) {
TelnetClient[i] = TelnetServer.available();
TelnetClient[i].flush(); // clear input buffer, else you get strange characters
TelnetClient[i].println("Welcome to FritzBox Telnet!");
TelnetClient[i].println("----------------------------------------------------------------");
TelnetClient[i].println("1. Press n for new script---------------------------------------");
TelnetClient[i].println("2. Press l to list scripts--------------------------------------");
TelnetClient[i].println("3. Press d to delete script #x----------------------------------");
ConnectionEstablished = true;
break;
}
}
if (ConnectionEstablished == false) {
TelnetServer.available().stop();
}
}
for (i = 0; i < MAX_TELNET_CLIENTS; i++) {
if (TelnetClient[i] && TelnetClient[i].connected()) {
int rxlen = TelnetClient[i].available();
if (rxlen > 0) {
char sbuf[rxlen];
TelnetClient[i].readBytes(sbuf, rxlen);
Serial.write(sbuf, rxlen);
}
int txlen = Serial.available();
if (txlen > 0) {
char sbuf[txlen];
Serial.readBytes(sbuf, txlen);
TelnetClient[i].write(sbuf, txlen);
}
}
}
}