Problema con arduino Etherner Shield + PHP + MySQL

Hola amigos, estoy intentando hacer un proyecto en el cual lea desde el arduino los datos desde el PulseSensor y un sensor de temperatura y los mismos se alojen en una base de datos remota.

Pude desarrollar mi codigo Arduino y PHP pero hay algun error y no puedo ver donde, los datos no se envían a la base de datos pero si los muestro perfectamente por el Monitor Serial y pruebo mi archivo PHP ingresando desde Postman el GET correspondiente y se sube sin problemas a la base de datos.

Mi codigo arduino es el siguiente:

#include <Ethernet.h>
#include <DallasTemperature.h>

#define Pin 2 //Se declara el pin donde se conectará la DATA


OneWire ourWire(Pin); //Se establece el pin declarado como bus para la comunicación OneWire
 
DallasTemperature sensors(&ourWire); //Se instancia la librería DallasTemperature


//  Variables
int i=0;
int pulsePin = 0;                 // Pulse Sensor purple wire connected to analog pin 0
int blinkPin = 13;                // pin to blink led at each beat
int fadePin = 5;                  // pin to do fancy classy fading blink at each beat
int fadeRate = 0;                 // used to fade LED on with PWM on fadePin

// Volatile Variables, used in the interrupt service routine!
volatile int BPM;                   // int that holds raw Analog in 0. updated every 2mS
volatile int Signal;                // holds the incoming raw data
volatile int IBI = 600;             // int that holds the time interval between beats! Must be seeded! 
volatile boolean Pulse = false;     // "True" when User's live heartbeat is detected. "False" when not a "live beat". 
volatile boolean QS = false;        // becomes true when Arduoino finds a beat.

// Regards Serial OutPut  -- Set This Up to your needs
static boolean serialVisual = true;   // Set to 'false' by Default.  Re-set to 'true' to see Arduino Serial Monitor ASCII Visual Pulse 
float t=0;
int idpaciente=0;

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "teleucab.esy.es"; // IP Address (or name) of server to dump data to

EthernetClient client;


void setup(){
  pinMode(blinkPin,OUTPUT);         // pin that will blink to your heartbeat!
  pinMode(fadePin,OUTPUT);          // pin that will fade to your heartbeat!
  Serial.begin(115200);             // we agree to talk fast!
  interruptSetup();                 // sets up to read Pulse Sensor signal every 2mS 
   // IF YOU ARE POWERING The Pulse Sensor AT VOLTAGE LESS THAN THE BOARD VOLTAGE, 
   // UN-COMMENT THE NEXT LINE AND APPLY THAT VOLTAGE TO THE A-REF PIN
//   analogReference(EXTERNAL); 
  sensors.begin(); //Se inician los sensores 

  delay(2000); 
}


//  Where the Magic Happens
void loop(){


  t = (float) sensors.getTempCByIndex(0);
    serialOutput() ;       
    
  if (QS == true){     // A Heartbeat Was Found
                       // BPM and IBI have been Determined
                       // Quantified Self "QS" true when arduino finds a heartbeat
        fadeRate = 255;         // Makes the LED Fade Effect Happen
                                // Set 'fadeRate' Variable to 255 to fade LED with pulse
        serialOutputWhenBeatHappens();   // A Beat Happened, Output that to serial.     
        QS = false;                      // reset the Quantified Self flag for next time    
  }
     
  ledFadeToBeat();                      // Makes the LED Fade Effect Happen


  
  delay(2000);                             //  take a break

  if (client.connect(server, 80)) {
    
    Serial.print("Temperatura="); 
    Serial.print(t); 
    Serial.print(" BPM =");
    Serial.println(BPM);
    // Envia el requerimiento al servidor via GET
    Serial.println("Iniciando conexion...");
    client.print( "GET /add_data.php?temp=");
    client.print(t);
    client.print("&");
    client.print("bpm=");
    client.print(BPM);
    client.print("&id=");
    client.print(idpaciente);
    client.println( " HTTP/1.1");
    client.println("Host: teleucab.esy.es");
    client.println("Cache-Control: no-cache");
    client.println("Postman-Token: aeb24f82-72a9-c643-728b-fc9ebc2acfc7");
    client.println(" ");     
    }
    
  else {
    // you didn't get a connection to the server:
    Serial.println("--> connection failed/n");
  }
}


void ledFadeToBeat(){
    fadeRate -= 15;                         //  set LED fade value
    fadeRate = constrain(fadeRate,0,255);   //  keep LED fade value from going into negative numbers!
    analogWrite(fadePin,fadeRate);          //  fade LED
  }

add_data.php

<?php
    // Connect to MySQL
 $con=mysqli_connect("localhost","*********","******","******");

        // Prepare the SQL statement
        $SQL = "INSERT INTO test (temperature,frequency,idpaciente) VALUES ('".$_GET["temp".$counter]."','".$_GET["bpm".$counter]."','".$_GET["id".$counter]."')";

        // Execute SQL statement
       mysqli_query($con, $SQL);

mysqli_close($con);

?>

Les dejo una captura de pantalla desde el Monitor Serial para que vean que los datos se muestran sin problemas

Aqui una captura de pantalla con el GET que inserto desde Postman y se inserta a la base de datos perfectamente

Dejo adjunto todos los codigos usados.

AllSerialHandling.ino (2.08 KB)

Interrupt.ino (5.61 KB)

PulseSensorAmped_Arduino_1dot4.ino (3.88 KB)

Timer_Interrupt_Notes.ino (7.5 KB)

Muy interesante tu proyecto amigo. Primero descarta que el problema sea la forma como estas enviando los datos desde tu arduino al servidor php. Para ello debes crearte en un servidor wamp server un formulario php para que puedas conectar con la base de datos y enviar los datos por el método GET.

Si todo sale bien hasta este punto, debes ahora ver que estas enviando con el ESP8266 porque tengo la idea de que no estas conectándote a la base de datos correctamente, y si en realidad te estas conectando bien, entonces el problema puede estar en el formato que le estas dando a los datos que envías.

Atento a tus comentarios.

prueba cambiando localhost, por 127.0.0.1

Hola.
Te recomiendo que eches un vistazo detallado a este hilo. Igual es sencillamente que te falta un salto de línea (¿Has probado a no poner el espacio en el último println?) o que es necesario proporcionar al servidor algún header adicional. En todo caso, lo primero sería intentar hacer tu get "a pelo" con telnet, y cuando lo consigas, no debería ser difícil portar la petición a arduino.

Al parecer tiene un problema de conexión a Internet con su módulo ethernet. Va a revisar la configuración y cuando este seguro que tenga conexión a Internet va a empezar a hacer las pruebas que dice noter.