I'm trying to send continuously and randomly generated pixel colors (80x60) in Adafruit ESP32 Feather to my C# program, over Wifi, using UDP and TCP protocols. Any other type of data I can send without problems through any of the protocols, but this String that I create that sends the 4800 (80x60) values causes some difficulty, particularly in UDP.
In the TCP protocol, all data is sent by ESP32 and received by the C# program, despite the protocol being very slow and, consequently, the video obtained by them has very few frames per second.
In the case of UDP, which was expected to be faster (and it was my great hope), the generated data is not entirely received by the C# program, and the video only has the first pixels (approximately 410 - "Imagem1").
Both protocols are defined the same way in the C# program, with the exception that TCP is in Stream format and UDP is in Datagrams (it is not possible to define Stream).
On the other hand, my code in ESP32 is as follows:
Code: Select all
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
#include <WiFiUdp.h>
#include <Udp.h>
const char* ssid = "SensorIR_test";
const char* password = "123456789";
WiFiServer server(80);
WiFiUDP Udp;
const int udpPort = 80; // local port to listen on
int reply; // a int to send back
String str_reply, inputs;
String str_reply_UDP[60];
int speedx;
int i, j;
int subS_l;
int index_of_S;
void setup() {
Serial.begin(250000);
delay(10);
Serial.print("Setting AP (Access Point)…");
WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
server.begin();
Udp.begin(udpPort);
}
void loop() {
WiFiClient client = server.available(); // Listen for incoming clients
int packetSize = Udp.parsePacket();
inputs = "";
i=1;
j=1;
if (client) {
// If a new client connects,
Serial.println("New Client."); // print a message out in the serial port
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
client.setNoDelay(1);
//break;
int c=client.read();
// else {
// teste=teste+1;
for (int y=0; y<60; y++) {
for (int k=0; k<80; k++) {
//speedx=random(0,255);
str_reply+=random(0,255);
str_reply+=" ";
}
client.print(str_reply);
Serial.print(str_reply);
client.print(" ");
Serial.print(" ");
}
}
}
// Close the connection
client.stop();
Serial.println("TCP communication disconnected.");
Serial.println("");
}
else if (packetSize) {
for (int y=1; y<61; y++) {
str_reply_UDP[y]="";
}
int d = Udp.read();
// Serial.println(d);
if (d==59) { //ASCII=";"
Serial.println("New UDP Client."); // print a message out in the serial port
}
else if (d==33) { //ASCII="!"
for (int y=0; y<60; y++) {
for (int k=0; k<80; k++) {
str_reply_UDP[y]+=random(0,255);
str_reply_UDP[y]+=" ";
}
}
}
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
for (int u=0; u<61; u++) {
Serial.println(str_reply_UDP[u]);
Udp.println(str_reply_UDP[u]);
}
Udp.endPacket();
}
}