leer datos en arduino y enviarlos a nodemcu para subirlos a pagina php

Hola a todos tengo un arduino uno y NodeMCU. Quiero hacer lecturas de temperatura turbidez, y ph, etc transmitirlas por comunicación serie a NodeMCU y una vez enviados ir subiendo los datos a una pagina php.

el problema es que no me imprime los datos como debe:

****************************************************************
ESTA PARTE CORRESPONDE A ARDUINO Y ME IMPRIME TAL CUAL!
 

Serial.print("Temperatura: ");
    Serial.print(x);
    Serial.print("℃");
    Serial.print(" \n");
    Serial.print("pH: ");
    Serial.print(Po);
    Serial.print(" %\t");
    
    Serial.print(" \n");
    
    //delay(1000);  
    Serial.print("Turbidez: ");             //Para mostrar el valor en el monitor serie de arduino.
    Serial.print(voltage);
    Serial.print(" %");
    Serial.print(" \n");
    


ESTA PARTE CORRESPONDE AL ENVIO DE DATOS AL NODE
    Trans.print('T');
    Trans.println(x);                                   //Transmisión del valor a NodeMCU.
    delay(1000);
    Trans.print('P');
    Trans.println(Po);
    delay(1000);                       
    Trans.print('Z');
    Trans.println(voltage);                                  //Transmisión del valor a NodeMCU.
    delay(1000);                                                                                                                      
}



*********************************************************************
ESTA PARTE CORRESPONDE A LA RECEPCION DE DATOS DEL NODEMCU

void loop()
{

 if (mySerial.available() > 0) {
    mySerial.readBytesUntil('(x)', buffer, lonbuffer);       
    Temperatura = mySerial.parseFloat();
   
    mySerial.readBytesUntil('(Po)', buffer, lonbuffer);     
    pH = mySerial.parseFloat();
   
    mySerial.readBytesUntil('(voltage)', buffer, lonbuffer);
    Turbidez = mySerial.parseFloat();
   
    mostrar = true;
  }
    
  if (mostrar)
  { 
    Serial.print("temp: ");
    Serial.println(Temperatura);
    Serial.print("pH: ");
    Serial.println(pH);
    Serial.print("Turb: ");
    Serial.println(Turbidez);
    mostrar = false;
    actualizaDatos(String(Temperatura), String(pH), String(Turbidez));
    delay (1000);
  }

y me imprime lo siguiente
******************************************




T30
P8.34
Z1.23
T30
P8.30
Z1.23



    Serial.print("temp: ");
    Serial.println(Temperatura);
    Serial.print("pH: ");
    Serial.println(pH);
    Serial.print("Turb: ");
    Serial.println(Turbidez);
    mostrar = false;
    actualizaDatos(String(Temperatura), String(pH), String(Turbidez));
    delay (1000);

no me imprime de esta manera...

alguien que pueda ayudarme???

Lee las normas del foro y edita tu post usando etiquetas.

Porque no pones el código completo?
Y esos delay (1000); que funcion cumplen? ya se que una demora de 1 segundo pero sabes que eso detiene la ejecución del programa?
Envias, detienes, envias detienes.

Y en el nodemcu tu tienes

 mySerial.readBytesUntil('(x)', buffer, lonbuffer);

y se queda esperando x tiempos que son una locura…

Los dispositivos son rápidos, no hacen falta esas demoras. Si queires enviar datos cada 1000 mseg usa millis() e implementa una máquina de estados.

Varios comentarios para hacerte pero son todas criticas constructivas.
Veo que tienes procedimientos como

  1. EEPROM_read y EEPROM_write lo que indica que desconoces el hecho que exiten EEPROM.get() y EEPROM.put()

Que permiten leer/guardar todo tipo de variables o estructuras.
Eso simplificaría tu código.

  1. Defines a
#define DoSensorPin  A1

de modo que esto

pinMode(DoSensorPin,INPUT);

no tiene sentido.

  1. Esto
int sensorValue = analogRead(A4);//read the input analog pin 0: 
  double voltage  = sensorValue*(5.0/1024.0);

Que valor diferente de 5V puede darte? Justamente 1023/1024*5V = 4,9951

Esto no significa que estes midiendo la tensión de referencia!!

  1. usas millils() con verificación de 30 milisegundos pero tu loop comienza con un delay(1000) ???

  2. Los demas retardos con millis() caen en el mismo problema. Elimina ese delay(1000)!

  3. En este fragmento, si ingresa un caracter por el puerto Serie mira que haces de nuevo!!

if (serialDataAvailable() > 0) {
    byte modeIndex = uartParse();  //parse the uart command received
    doCalibration(modeIndex);    // If the correct calibration command is received, the calibration function should be called.
    delay(1000);  
}

Otro delay(1000)!!

  1. Y otro delay aunque este puede que no tenga importancia.
    Al final de
double avergearray(int* arr, int number){

Tienes esto, pero

return avg;
  delay(10000);

como primero retorna seguramente ese delay no se ejecuta. Pero comentalo por lo menos.

[b]Comunicación con ESP8266[/b]
Recordando que debes usar adaptacion de niveles entre TX del Arduino y RX del ESP o al menos un divisor de tensión, no hace falta que conviertas las cosas a string.
Puedes enviarlas como gustes a sabiendas que sabes que en envias para que el Nodemcu puede interpretar cada dato.

h

Hola necesito ayuda!

Estoy haciendo un proyecto el cual consiste en monitorear la calidad del agua cuento con 4 sensores, 3 son sensores analogos y uno es digital. He logrado programarlos los 4 en conjunto sin ningun problema.
El problema se presenta a la hora de enviar los datos obtenidos al nodemcu he intentado de varias maneras y no logro conseguirlo.

https://forum.arduino.cc/index.php?topic=539300.0 … he leido este topico pero la vd es que me quedo estancada en esta parte:

{codigo omitido para no repetir y ahorrar caracteres igual que el codigo de la entrada antwrior}

const int lonbuffer = 6;                                        // longitud del buffer
char buffer[lonbuffer];                                         // buffer para almacenar el comando
float temperatura;                                              // valor del primer parámetro
float humedad;                                                  // valor del segundo parámetro
float luminosidad;                                              // valor del tercer parámetro
bool mostrar = false;

void setup()
{
  Serial.begin(9600);
  Serial.println("Iniciando.");
  //WiFi.mode(WIFI_STA);
   //WiFi.disconnect();
 delay(100);
 Serial.println("setup completado");
 Serial.println("Comienza la busqueda de redes WiFi");
 int n = WiFi.scanNetworks();
 Serial.println("Busqueda realizada");
 if (n == 0)
    Serial.print("Redes no encontradas");
 else {
    for (int i = 0; i < n; i++) {
     //Muestra los datos de las redes encontradas
     Serial.print(i+1);
     Serial.print(": ");
     Serial.print(WiFi.SSID(i));
     Serial.print(" (");
     Serial.print(WiFi.RSSI(i));
     Serial.println(")");
     delay(10);
    }
 }
  mySerial.begin(9600);
  Serial.println(wl_status_to_string(WiFi.status()));         //Avisa si hay fallo de conexión

    while (WiFi.status() != WL_CONNECTED)
    {
      WiFi.begin(ID_Wifi, PWD_Wifi);
      delay(5000);
      Serial.println("Connecting to WiFi");
      Serial.println(wl_status_to_string(WiFi.status()));         //Avisa si hay fallo de conexión
    }
    
    Serial.println( "Connected" );
    ip=WiFi.localIP();
    Serial.print("Conexion AP OK\r\n");                          //Conexión correcta
    Serial.print("IP: ");                                        //Muestra IP
    Serial.print (ip);
 }

void actualizaDatos(String temp, String hum, String lumi ) //Función para el envío a Thingspeak
{
 WiFiClient web;
 if (web.connect(IP,80))                                     //Se conecta a la página web de Thingspeak mediante Http (puerto 80)
   {
    Serial.print("Conexion TCP OK \r\n");
   }
    else
      {
        Serial.print("Conexion TCP error\r\n");
      }    

 String EnviaDatos = "GET /update?key=" + writeAPIKey + "&field1=" + temp + "&field2=" + hum + "&field3=" + lumi + "\r\n";  //Prepara cadena para enviar datos a web
  web.print (EnviaDatos);
  delay (10);
  Serial.print (EnviaDatos);                            //Muestra por monitor serie los datos enviados
}

 
void loop()
 {
 int lonComando;
   if (mySerial.available() > 0) {
    mySerial.readBytesUntil('T', buffer, lonbuffer);       
    temperatura = mySerial.parseFloat();
   
    mySerial.readBytesUntil('H', buffer, lonbuffer);     
    humedad = mySerial.parseFloat();
   
    mySerial.readBytesUntil('L', buffer, lonbuffer);
    luminosidad = mySerial.parseFloat();
   
    mostrar = true;
  }

  if (mostrar)
  {
    // Recibimos los dos parámetros. Si el número de parámetros varía dependiendo del comando, deberemos primero ver qué comando es para saber qué y cuántos parámetros recibiremos
    Serial.println("Comando recibido: ");
    Serial.println(buffer);
    Serial.print("temp: ");
    Serial.println(temperatura);
    Serial.print("humedad: ");
    Serial.println(humedad);
    Serial.print("luminosidad: ");
    Serial.println(luminosidad);
    mostrar = false;
  }
    actualizaDatos(String(temperatura),String(humedad), String(luminosidad));
    delay (10000);
 }

la cual muestra lo siguiente

T25.00
H54.00
L79.67
T25.00
H54.00
L79.67
T25.00
H54.00
L79.57
T25.00
H55.00
L79.67
T25.00
H55.00
L79.67

y no logro salir de ahi, intente la solucion que el puso que fue mandarlos en cadena pero aun asi sigue sin funcionar… algun consejo?

Hola Surbyte Gracias!!!
Lo que corresponde al punto numero 1 y 2 ya viene en la programacion que viene recomendada por la pagina dfrobot que es la marca de mis sensores, yo unicamente uni los dos codigos para que funcionaran ya que se necesita todo el codigo asi si no no funcionan

el punto numero 3, tambien es el codigo propuesto por dfrobot, para leer turbidez.

4.me imagino te refieres al de void setup? no loop? gracias lo probare con eliminarlo

punto 6 y 7 igual eso viene de la mezcla de ambos sensores si quito esos delay dejan de funcionar correctamente las medidas

... igual me gustaria mas un consejo de como poder enviar los datos del arduino uno al nodemcu! gracias

Qué diferencia hay con este hilo?

leer datos en arduino y enviarlos a nodemcu para subirlos a pagina php

intente eliminar ese hilo porque creo no me di a entender pero no supe como hacerlo! lo siento... es que la vd llevo dias sin dormir intentando hacer funcionar mi proyecto que me encuentro totalmente cerrada!

Ahora esta todo junto.
Ordena tus respuestas y nosotros haremos lo mismo.
No vuelvas a abrir hilos semejantes en cualquier parte del foro

Ok, entendido. Gracias!