Closed
Description
Basic Infos
Hardware
Hardware: ESP-02 + Arduino Nano
Core Version: 2.3.0
Description
The ESP is working as a Serial<->TCP bridge. Code mostly like the Telnet example.
When sending data from the Arduino Nano over Serial to the ESP I'm losing data.
When I let the ESP Send the same String to the client, everyting comes to the client.
But receiving the same string over Serial and foreward it to the clients, sometimes bytes are missing, see following picture.
It looks like a buffer overflow, because always the last bytes are missing.. But the whole message is < 256 Bytes.
I tried different baud rates from 57600 up to 500000, but the problem is always the same.
Sketch
Arduino Nano
uint16_t index = 0;
void setup()
{
Serial.begin(115200);
}
void loop()
{
Serial.println(index++);
delay(5);
Serial.println("#############################################");
delay(5);
Serial.println("#############################################");
delay(5);
Serial.println("#############################################");
delay(5);
Serial.println("#############################################");
delay(5);
Serial.println("#############################################");
delay(5000);
}
ESP
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#define SERIALBAUD 115200 //Baud rate for communication
#define MAXCLIENTS 4
//Access Point data
const char* ssid = "OpenRF";
const char* password = "12345678";
//TCP Server on Port 333
WiFiServer server(333);
//Server clients
WiFiClient serverClients[MAXCLIENTS];
void setup()
{
Serial.begin(SERIALBAUD);
//Start Access Point
WiFi.disconnect(true);
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password);
//Start Server
server.begin();
server.setNoDelay(true);
//Initialization finished
Serial.println();Serial.println();
Serial.println("ESP ready");
Serial.print("Server IP is : "); Serial.println(WiFi.softAPIP());
Serial.println("Port is : 333");
}
void loop()
{
uint8_t i;
//check if there are any new clients
if (server.hasClient())
{
for(i = 0; i < MAXCLIENTS; i++)
{
//find free/disconnected spot
if (!serverClients[i] || !serverClients[i].connected())
{
if(serverClients[i])
serverClients[i].stop();
serverClients[i] = server.available();
//Serial.print("New client: "); Serial.print(i);
continue;
}
}
//no free/disconnected spot so reject
WiFiClient serverClient = server.available();
serverClient.stop();
//Serial.println("No client slot available");
}
//check clients for data
for(i = 0; i < MAXCLIENTS; i++)
{
if (serverClients[i] && serverClients[i].connected())
{
if(serverClients[i].available())
{
//get data from the telnet client and push it to the UART
while(serverClients[i].available())
Serial.write(serverClients[i].read());
}
}
}
//check UART for data
if(Serial.available())
{
size_t len = Serial.available();
uint8_t sbuf[len];
Serial.readBytes(sbuf, len);
//push UART data to all connected telnet clients
for(i = 0; i < MAXCLIENTS; i++)
{
if (serverClients[i] && serverClients[i].connected())
{
serverClients[i].write(sbuf, len);
delay(1);
}
}
}
}