Estoy creando un código para conectar un ESP32 con LabVIEW a través del protocolo TCP/IP y así enviar información desde el controlador y también recibirla. Mi programa funciona correctamente por 2 minutos aproximadamente pero luego me aparece un error en LabVIEW (error 66), donde dice que la conexión ha sido cerrada por el otro nodo, es decir por el controlador, según entiendo. Por esto supongo que el error está en mi código de Arduino IDE, pero la verdad no he podido encontrar en problema y tampoco he logrado hacer que el programa avise por el puerto serial cuando el cliente se desconectó o que al menos vuelva a hacer la conexión cuando esta se pierde con el cliente de LabVIEW. Agradecería mucho si alguien me pudiera indicar si hay algún error con mi programa.
//Se incluye librería para el WiFi
#include <WiFi.h>
//Se definen nombre de red y contraseña a la que se va a conectar el controlador
const char* ssid = "";
const char* pass = "";
//Se configura el servidor con el puerto 8000
WiFiServer server(8000);
IPAddress local_IP();
//Se conectan los sensores a los pines 36, 39, 34 y 35
int sensor2 = 36;
int sensor3 = 39;
int sensor4 = 34;
int sensor5 = 35;
//Se conectan los relé a los pines 23, 22, 21 y 19
int led1 = 23;
int led2 = 22;
int led3 = 21;
int led4 = 19;
//char labview = 0;
void setup() {
Serial.begin(115200);
//Se inicia la conexión a la red WiFi definida
WiFi.begin(ssid, pass);
delay(2000);
//Mostrar asteriscos mientras se realiza la conexión
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("*");
}
//Se anuncia cuando ya se haya conectado a la red WiFi y se muestra la dirección IP que será usada para el código en LabVIEW
Serial.println("");
Serial.println("Se ha conectado a la red WiFi");
Serial.println("Dirección IP: ");
Serial.println(WiFi.localIP());
//Se inicia el ESP32 como servidor
server.begin();
// Se establecen los sensores como entrada
pinMode(sensor2, INPUT);
pinMode(sensor3, INPUT);
pinMode(sensor4, INPUT);
pinMode(sensor5, INPUT);
//Se establecen los relé como salida
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}
void loop() {
// Mostrar al cliente que el ESP32 como servidor está disponible
WiFiClient client = server.available();
//Mostrar en el puerto serial cuando el cliente se haya conectado
if (client) {
Serial.println("Cliente conectado");
//Ejecutar mientras el cliente esté conectado
while (client.connected()) {
//Calibración del sensor 2********************************
int humedad2 = analogRead(sensor2);
//int humedad1=334*humedad-81;
int porcentaje2 = map(humedad2, 579, 252, 0, 100);
//Calibración del sensor 3**********************************
int humedad3 = analogRead(sensor3);
//int humedad1=334*humedad-81;
int porcentaje3 = map(humedad3, 579, 252, 0, 100);
//Calibración del sensor 4**********************************
int humedad4 = analogRead(sensor4);
//int humedad1=334*humedad-81;
int porcentaje4 = map(humedad4, 579, 252, 0, 100);
//Calibración del sensor 5**********************************
int humedad5 = analogRead(sensor5);
//int humedad1=334*humedad-81;
int porcentaje5 = map(humedad5, 579, 252, 0, 100);
if (client.available() > 0) {
//Se define si se enciende o apaga LED1**************************************
int labview = client.read();
if (labview == '0') {
digitalWrite(led1, LOW);
}
if (labview == '1') {
digitalWrite(led1, HIGH);
}
//Se define si se enciende o apaga LED2****************************************
//int labview=Serial.read();
if (labview == '2') {
digitalWrite(led2, LOW);
}
if (labview == '3') {
digitalWrite(led2, HIGH);
}
//Se define si se enciende o apaga LED3****************************************
//int labview=Serial.read();
if (labview == '4') {
digitalWrite(led3, LOW);
}
if (labview == '5') {
digitalWrite(led3, HIGH);
}
//Se define si se enciende o apaga LED4****************************************
//int labview=Serial.read();
if (labview == '6') {
digitalWrite(led4, LOW);
}
if (labview == '7') {
digitalWrite(led4, HIGH);
}
}
//Mostrar en el puerto serial el valor obtenido por el sensor
//Enviar al cliente el valor obtenido por el sensor
Serial.println(porcentaje2);
client.println(porcentaje2);
Serial.println(porcentaje3);
client.println(porcentaje3);
Serial.println(porcentaje4);
client.println(porcentaje4);
Serial.println(porcentaje5);
client.println(porcentaje5);
delay(1000);
}
//Verificar si el servidor tiene un cliente conectado
if(server.hasClient()){
//Si no hay cliente salir del loop y esperar otro cliente
return;
}
}
}