Skip to content

Telnet Server For ESP8266: Cloning the serial port via Telnet. "Debugging over the air"

License

Notifications You must be signed in to change notification settings

obrain17/telnetspy

 
 

Repository files navigation

TELNET SERVER FOR ESP8266 / ESP32

Cloning the serial port via Telnet.

DESCRIPTION

This module allows you "Debugging over the air". So if you already use ArduinoOTA this is a helpful extension for wireless development. Use "TelnetSpy" instead of "Serial" to send data to the serial port and a copy to a telnet connection. There is a circular buffer which allows to store the data while the telnet connection is not established. So its possible to collect data even when the Wifi and Telnet connections are still not established. Its also possible to create a telnet session only if it is neccessary: then you will get the already collected data as far as it is still stored in the circular buffer. Data send from telnet terminal to ESP8266 / ESP32 will be handled as data received by serial port. It is also possible to use more than one instance of TelnetSpy, for example to send control information on the first instance and data dumps on the second instance.

USAGE

Add the following line to your sketch:

#include <TelnetSpy.h>
TelnetSpy LOG;

Add the following line to your initialisation block ( void setup() ):

LOG.begin();

Add the following line at the beginning of your main loop ( void loop() ):

LOG.handle();

Use the following functions of the TelnetSpy object to modify behavior

Change the port number of this telnet server. If a client is already connected it will be disconnected.
Default: 23

void setPort(uint16_t portToUse);

Change the message which will be send to the telnet client after a session is established.
Default: "Connection established via TelnetSpy.\n"

void setWelcomeMsg(char* msg);    

Change the message which will be send to the telnet client if another session is already established.
Default: "TelnetSpy: Only one connection possible.\n"

void setRejectMsg(char* msg);    

Change the amount of characters to collect before sending a telnet block.
Default: 64

void setMinBlockSize(uint16_t minSize);

Change the time (in ms) to wait before sending a telnet block if its size is less than <minSize> (defined by setMinBlockSize).
Default: 100

void setCollectingTime(uint16_t colTime);

Change the maximum size of the telnet packets to send.
Default: 512

void setMaxBlockSize(uint16_t maxSize);

Change the size of the ring buffer. Set it to 0 to disable buffering. Changing size tries to preserve the already collected data. If the new buffer size is too small the youngest data will be preserved only. Returns false if the requested buffer size cannot be set.
Default: 3000

bool setBufferSize(uint16_t newSize);

This function returns the actual size of the ring buffer.

uint16_t getBufferSize();

Enable / disable storing new data in the ring buffer if no telnet connection is established. This function allows you to store important data only. You can do this by disabling "storeOffline" for sending less important data.
Default: true

void setStoreOffline(bool store);

Get actual state of storing data when offline.

bool getStoreOffline();

If no data is sent via TelnetSpy the detection of a disconnected client has a long timeout. Use setPingTime to define the time (in ms) without traffic after which a ping (chr(0)) is sent to the telnet client to detect a disconnect earlier. Use 0 as parameter to disable pings.
Default: 1500

void setPingTime(uint16_t pngTime);

Set the serial port you want to use with this object (especially for ESP32) or NULL if no serial port should be used (telnet only).
Default: Serial

void setSerial(HardwareSerial* usedSerial);

This function returns true, if a telnet client is connected.

bool isClientConnected();

This function installs a callback function which will be called on every telnet connect of this object (except rejected connect tries). Use NULL to remove the callback.
Default: NULL

void setCallbackOnConnect(void (*callback)());

This function installs a callback function which will be called on every telnet disconnect of this object (except rejected connect tries). Use NULL to remove the callback.
Default: NULL

void setCallbackOnDisconnect(void (*callback)());

HINT

Add the following lines to your sketch:

TelnetSpy SerialAndTelnet;
#define SERIAL SerialAndTelnet
//#define SERIAL Serial

Replace "Serial" with "SERIAL" in your sketch. Now you can switch between serial only and serial with telnet by changing the comments of the defines only.

IMPORTANT

To connect to the telnet server you have to:

  • establish the Wifi connection
  • execute "SerialAndTelnet.begin(WhatEverYouWant);"

The order is not important.

All you do with "Serial" you can also do with "TelnetSpy", but remember: Transfering data also via telnet will need more performance than the serial port only. So time critical things may be influenced.

It is not possible to establish more than one telnet connection at the same time. But its possible to use more than one instance of TelnetSpy.

If you have problems with low memory you may reduce the value of the define TELNETSPY_BUFFER_LEN for a smaller ring buffer on initialisation.

Usage of void setDebugOutput(bool) to enable / disable of capturing of os_print calls when you have more than one TelnetSpy instance: That TelnetSpy object will handle this functionallity where you used setDebugOutput at last. On default TelnetSpy has the capturing of OS_print calls enabled. So if you have more instances the last created instance will handle the capturing.

License

This library is open-source and licensed under the [MIT license] (http://opensource.org/licenses/MIT). Do whatever you like with it, but contributions are appreciated.

About

Telnet Server For ESP8266: Cloning the serial port via Telnet. "Debugging over the air"

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 100.0%