Created
August 25, 2016 14:52
-
-
Save tablatronix/4793677ca748f5f584c95ec4a2b10303 to your computer and use it in GitHub Desktop.
Arduino ESP8266 telnet server with some ansi experiments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Arduino ESP8266 telnet server with some ansi experiments | |
* @author: shawn_a | |
*/ | |
#include <ESP8266WiFi.h> | |
#include <Arduino.h> | |
/* Set these to your desired AP credentials. */ | |
const char *APssid = "ESPap"; | |
const char *APpassword = "esp123456789"; | |
int port = 23; | |
// ansi stuff, could always use printf instead of concat | |
String ansiPRE = "\033"; // escape code | |
String ansiHOME = "\033[H"; // cursor home | |
String ansiESC = "\033[2J"; // esc | |
String ansiCLC = "\033[?25l"; // invisible cursor | |
String ansiEND = "\033[0m"; // closing tag for styles | |
String ansiBOLD = "\033[1m"; | |
String ansiRED = "\033[41m"; // red background | |
String ansiGRN = "\033[42m"; // green background | |
String ansiBLU = "\033[44m"; // blue background | |
String ansiREDF = "\033[31m"; // red foreground | |
String ansiGRNF = "\033[34m"; // green foreground | |
String ansiBLUF = "\033[32m"; // blue foreground | |
String BELL = "\a"; | |
// declare telnet server (do NOT put in setup()) | |
WiFiServer TelnetServer(port); | |
WiFiClient Telnet; | |
void handleTelnet(){ | |
if (TelnetServer.hasClient()){ | |
// client is connected | |
if (!Telnet || !Telnet.connected()){ | |
if(Telnet) Telnet.stop(); // client disconnected | |
Telnet = TelnetServer.available(); // ready for new client | |
} else { | |
TelnetServer.available().stop(); // have client, block new conections | |
} | |
} | |
if (Telnet && Telnet.connected() && Telnet.available()){ | |
// client input processing | |
while(Telnet.available()) | |
Serial.write(Telnet.read()); // pass through | |
// do other stuff with client input here | |
} | |
} | |
void startAP(){ | |
WiFi.mode(WIFI_AP); | |
WiFi.softAP(APssid, APpassword); | |
IPAddress myIP = WiFi.softAPIP(); | |
Serial.print("AP IP address: "); | |
Serial.println(myIP); | |
} | |
void setup() { | |
Serial.begin(115200); | |
// Serial.setDebugOutput(true); | |
delay(1000); // serial delay | |
Serial.println(); | |
Serial.println("Staring AP"); | |
startAP(); // startup is async ? | |
delay(4000); // ap delay | |
TelnetServer.begin(); | |
Serial.print("Starting telnet server on port " + (String)port); | |
// TelnetServer.setNoDelay(true); // ESP BUG ? | |
Serial.println(); | |
delay(100); | |
} | |
void loop() { | |
handleTelnet(); | |
Telnet.print(ansiHOME+ansiCLC); // clear screen | |
Telnet.println("uptime: "+ansiBLU + ansiBOLD + (String)millis() + ansiEND + ansiEND+" ms"); | |
delay(20); // to fast might crash terminals | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment