I have Kai Morich's Bluetooth Terminal and Serial USB Terminal. They are super.
I also have his WiFi Serial Terminal. The BT and USB terminals are 'intuitive', but the WiFi has me stumped.
Anybody out there with any experience using it?
I'd like to link it to an ESP - the WiFi app capable of receiving a "Hello App" and transmitting "Hello User". That would satisfy my objective (a 'WiFi to Serial bridge').
Probably more involved than I surmise (?).
[ It's mentioned, but he does not provide instructions. ]
Using an ESP8266 running the WiFiTelnetToSerial sketch the app can connect to it using telnet. I set up a device in the app using the IP address of the ESP, protocol of telnet and the default port 23
The purpose of the sketch appears to be to receive input via telnet from the app and output it via Serial1 or SoftwareSerial
Using the default values in the sketch I can enter text in the app and see it echoed in the Serial monitor of the ESP8266
OK, I found that in Examples.
I'm using it 'stock', adding only the SSID and its Password
I am using an ESP-01.
With #define SWAP_PINS 0 it should be using GPIO3,1, the usual Hardware serial, Yes?
And at some point, Serial Monitor should bounce back something confirmational (an IP addr, etc)?
In the app, "Host ", that's my router/network name or should that be an IP, too (192...)?
You need to use the ESPs IP address in the device setup in the terminal app as that is what it is connecting to. I used the admin page of my router to find out which IP address had been allocated to the ESP
I queried OpenAI and got a good sketch first try. It was not bidirectional at first, but that was a simple edition from there.
It's been fussy about something or other, but ordinarily it's push the boot button, connect to the network (softAP), 'connect' with the app and it rolls on.
Here it's like a basic remote control - controlling the PWM on D6 and toggling D7. It echoes back and 'prints' out the status of the output that was addressed.
(Some of my development work is still in there or commented out.)
//
// _005
// analogWriting D6
// clientstatus LED (D0) ON → there's No client
// It Works! 2025.06.06
//
// _004
// using D6 (Y) and D7 (G)
// It Works! 2020.06.05
//
// _003
// adding facility to toggle D0 (onboard LED)
// It Workds! 2025.06.03
//
// ESP8266_KaiMorich_002
// gets data, sends data
// It Works! 2025.06.02
// Serial WiFi Terminal → Telnet (port 23)
// the 'network' has no internet, so
// make sure the mobile stays with the
// SoftAP anyway (check a box)
//
#include <ESP8266WiFi.h>
const char *ssid = "esp8266_sap";
const char *password = "12345678"; // Password must be at least 8 characters
bool Gflipit = false;
bool Yflipit = false;
const byte green = D7;
const byte yellow = D6;
const byte clientstatus = D0;
byte Yindex = 0;
byte Ybrt [6] = {0, 25, 50, 100, 175, 250};
WiFiServer server(23); // Telnet port by default is 23
void setup()
{
Serial.begin(115200);
delay(1000);
pinMode(green, OUTPUT);
digitalWrite(green, LOW);
pinMode(yellow, OUTPUT);
digitalWrite(yellow, LOW);
pinMode(clientstatus, OUTPUT);
digitalWrite(clientstatus, HIGH); // off
// Configure ESP8266 as Access Point
WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP();
Serial.print("ESP8266 AP IP: ");
Serial.println(IP);
server.begin();
Serial.println("TCP Server started");
}
void loop()
{
digitalWrite(clientstatus, LOW); // D0 on till client true
WiFiClient client = server.available();
if (client)
{
digitalWrite(clientstatus, HIGH);
while (client.connected())
{
// Data received from app
if (client.available())
{
char aa = client.read();
Serial.print(aa);
client.write(aa); // explicitly echo back
if (aa == '7')
{
Gflipit = !Gflipit;
if (Gflipit)
{
digitalWrite(green, HIGH);
client.println("\r\nD7 is ON");
}
else
{
digitalWrite(green, LOW);
client.println("\r\nD7 is OFF");
}
}
if (aa == '6')
{
Yindex ++;
if (Yindex > 5)
{
Yindex = 0;
}
client.print("\r\nD6 level: ");
client.println(Yindex);
analogWrite(yellow, Ybrt[Yindex]);
}
}
// Data received from Serial Monitor
if (Serial.available())
{
char cc = Serial.read();
client.write(cc); // send explicitly to app
}
}
client.stop();
}
}
I use D0, the onboard LED, to let me know when it got the client (the app) connected (troubleshooting).
I have found that by disallowing the "autoconnect" with the SoftAP (which is part of the android's Settings bit) I'm no longer running into the app-connections issue/s.