Hola a todos y gracias de antemano a quienes puedan responder. Intentare ser lo mas claro posible.
EL PROBLEMA , con Arduino Nano, teniendo 2 DHT11 y un Modulo Rele5V, se intenta enviar los datos de los sensores via comunicacion SERIAL a un ESP8266-01, el ESP-01 a veces recibe otras veces no. El ESP-01 debe recibir la informacion y enviar una respuesta para activar o desactivar el RELE.
Estoy usando el ESP-01 conectado directamente al Serial del Nano, Rx a Tx y Tx a Rx (ESP-01 a Nano).
He intentado de varias formas y la mayoria de las veces, puedo enviar la informacion por serial desde el nano al esp-01 pero no recibo la respuesta del esp-01.
El ESP01, esta con un servidor asincronico.
Para enviar los datos de Nano a ESP-01, desde nano, envio un string (formato JSON). Uso un Serial.print("string de datos json \n"), luego un flush() para que espere a que la transmicion este enviada, el ESP-01 recibe por el Serial.Available().
Fragmento del Loop Nano()
stamp2 = millis();
diftim1 = stamp2-stamp1;
if( (diftim1/1000)>10&&switchData==false ){
switchData=true;
stamp1=millis();
} // Si pasan 60 seg sin respuesta,
// se envian datos nuevamente
if(switchData){
switchData = false;
delay(2000); // Esperamos 2 segundos para medir los sensores
//Enviamos los datos de los sensores
//Sensor 1
h1 = dht1.readHumidity();
t1 = dht1.readTemperature();
//Sensor 2
h2 = dht2.readHumidity();
t2 = dht2.readTemperature();
// Retornamos loop si hay problemas de los sensores
if (isnan(h1) || isnan(t1) || isnan(h2) || isnan(t2)) {
//Serial.print("{'data':'esp8266','estado':1,'humedadA':0,'tempboxA':0,'humendadB':0,'tempboxB':0,'rele5v':2,'Error':'Sensores con problemas de lectura!'}\n");
return;
}
// Datos a enviar
Serial.print("{'data':'esp8266','estado':0,'humedadA':"+String(h1)+",'tempboxA':"+String(t1)+",'humendadB':"+String(h2)+",'tempboxB':"+String(t2)+",'rele5v':2,'Error':''}\n");
Serial.flush();
delay(200);
Desde el ESP-01 lo siguiente :
void loop(){
if (!ejecutado)
{
MDNS.update();
if (modo_sta == 1) {
EnviandoMail(ip_actual, new_ssid_station);
}
}
Captura();
}
void Captura(){
// Monitor serial communication
if(Serial.available()>0){
message = Serial.readStringUntil('\n');
messageReady=true;
}
if(messageReady){
messageReady=false;
DeserializationError error = deserializeJson(doc, message);
if(error){
}else{
if(doc["data"]=="esp8266"){
if(doc["estado"]==0&&doc["tempboxA"].as<long>()>0&&doc["tempboxB"].as<long>()>0){
Esp01.clear();
sen="";
Esp01["dht11_hum"] = doc["humedadA"];
Esp01["dht11_tem"] = doc["tempboxA"];
Esp01["ntc100_tem"] = doc["tempboxB"];
// ----------------------------------
dht11B_temp = doc["tempboxB"].as<long>();
dht11A_temp = doc["tempboxA"].as<long>();
ConsultaRele(val_sensor_main,dht11B_temp);
ConsultaRele(val_sensor_box, dht11A_temp);
if(new_rele!=rele5v){
rele5v=new_rele;
}
generaJSON(); // Almacena datos en LittleFS
delay(200);
serializeJson(Esp01,sen);
writeFile(sen, "/json/sensores.json");
delay(200);
Serial.print("{'data':'nano','estado':0,'dht11A_hum':0,'dht11A_tem':0,'dht11B_hum':0,'dth11B':0,'rele5v':"+String(rele5v)+",'Mensaje':'Recepcion OK'}\n");
Serial.flush();
}else{
Serial.print("{'data':'nano','estado':0,'dht11A_hum':0,'dht11A_tem':0,'dht11B_hum':0,'dth11B':0,'rele5v':"+String(rele5v)+",'Mensaje':'Recepcion con problemas'}\n");
Serial.flush();
}
}
}
}
}
Generalmente , Nano envia los datos, ESP-01 los recibe, pero no recibo por serial la respuesta de ESP-01.
Ambos estan a 9600. Iniciando de forma individual (tanto ESP como Nano), funcionan bien y no existe bloqueos o lag. Juntos, el nano se bloquea algunas veces y el ESP-01 he tenido que volver a enviarlos los datos del LittleFS, ya que, despues de bloquearse deblo flash nuevamente.
Si alguien tiene una mejor de idea de comunicacion por serial, acepto ideas y consejos.
Saludos a todos.