Sensor de TDS no funciona con Ubidots

Buenas tardes, alguien me puede ayudar? estoy intentando conectar un sensor de TDS a Ubidots, pero al momento que pongo estas lineas de codigo :

ubidots.connectToWifi(WIFI_SSID, WIFI_PASS); //conexion a ubidots atraves de la red wifi

  Serial.println("Ready");    //Indica que el puerto serial se ha conectado

  //Verifica la conexion al esp32

  ubidots.setup();

  ubidots.reconnect();

  ubidots.setCallback(callback);/

He inmediatamente, el sensor deja de leer valores y me marca siempre cero, tambien he conectado un sensor de temperatura y me funciona muy bien, he trabajado con sensores de PH, color, turbidez y perfecto. Cabe recalcar que el sensor funciona bien, lee bien, solo en el momento que conecto a ubidots deja de hacerlo, ayuda!

Este es el codigo completo:

//**********************Librerias*************************//

#include <UbidotsEsp32Mqtt.h> // incluir libreria para utilizar ubidots con la esp32

#include <WiFi.h>

#include <PubSubClient.h>

#include <OneWire.h> //Libreria para el sensor de temperatura

#include <DallasTemperature.h> //Libreria para el sensor de temperatura

#include <EEPROM.h> //Libreria para la calibracion del sensor de TDS/EC

#include <DFRobot_ESP_EC.h> // Libreria TDS/EC

//****************Declaracion de los pines de los sensores**********//

const byte pinDatosDQ = 13;

/****** Conexion a ubidots************/

#define UBIDOTS_TOKEN "BBFF-fBwzwCdwdypwfOoO6bRaXPLNoDZTCy"     // Ubidots TOKEN

#define WIFI_SSID "ENGINEERING"                         //Nombre de la red Wi-Fi

#define WIFI_PASS "V3107197621061974R"     //Contraseña de la red  Wi-Fi

/****** Definicion de constantes**********/

#define DEVICE_LABEL_TO_RETRIEVE_VALUES_FROM "esp32"  // Nombre del dispositivo

#define VARIABLE_LABEL "TEMPERATURA" //Nombre de la variable para el sensor de TEMP

#define VARIABLE_LABEL "TDS" //Nombre de la variable para el sensor de TDS

#define VARIABLE_LABEL "EC" //Nombre de la variable para el sensor de EC

/*** Definicion de la frecuencia de publicacion de datos ****/

const int PUBLISH_FREQUENCY = 5000;

/*Definicion de variables extra, que incluye la librería*/

unsigned long timer;

uint8_t analogPin = 34;

/****************Objetos***************************************************************/

Ubidots ubidots(UBIDOTS_TOKEN); //Creacion del objeto del token al que se conecta ubidots

// Instancia a las clase OneWire y DallasTemperature

OneWire oneWireObjeto(pinDatosDQ);

DallasTemperature sensorDS18B20(&oneWireObjeto);

DFRobot_ESP_EC ec; //Declaracion de sensor TDS

/******Definicion de variables***********/

float voltage;

float ecValue;

float temperatura = 0;

float TDS;

float EC;

void setup() {

  // put your setup code here, to run once:

  Serial.begin(9600);

//Conexion a ubidots

  ubidots.connectToWifi(WIFI_SSID, WIFI_PASS); //conexion a ubidots atraves de la red wifi

  Serial.println("Ready");    //Indica que el puerto serial se ha conectado

  //Verifica la conexion al esp32

  ubidots.setup();

  ubidots.reconnect();

  ubidots.setCallback(callback);// Se inicia la función de subscripción para los mensajes

  //ubidots.setDebug(true); // uncomment this to make debug messages available

  timer = millis();

  EEPROM.begin(32);//Para calibrar el K del TDS

  ec.begin();   //Inicializa el sensor de TDS

  sensorDS18B20.begin(); //Inicializa el bus 1-Wire

}

void loop() {

 

  // Si no se conecta a la plataforma Ubidots, se pasa la función Reconnect() para volver a establecer la conexión

  if (!ubidots.connected())

  {

    ubidots.reconnect();

  }

/***** medición de los sensores para que la información será enviada a la Plataforma ******/

if(millis() - timer > PUBLISH_FREQUENCY)

  {

/********* Medicion de sensores **************************************/

voltage = analogRead(A0)/10; //Mide el voltaje analogico del sensor de TDS y lo divide por 10

  //Serial.println("Mandando comandos al sensor de temp");

  sensorDS18B20.requestTemperatures(); //Manda el comando al sensor temp

  //Leemos y mostramos los datos de los sensores DS18BS0

  //Serial.print("Temperatura sensor: ");

  temperatura = sensorDS18B20.getTempCByIndex(0); //Lee el sensor Temp

  ecValue = ec.readEC(voltage, temperatura); // Convierte el volltaje a EC con la temperatura de compensacion

  EC = ecValue * 1000; // Convierte el EC mS/cm a uS/cm

  TDS = ((ecValue * 1000) / 2); //Calcula el valor de tds en ppm

// Imprime los datos en el Monitor serial

  Serial.print("Temperatura:");

  Serial.print(temperatura, 2);

  Serial.println("ºC");

 

  Serial.print("TDS:");

  Serial.print(TDS,0);

  Serial.println(" PPM");

 

  Serial.print("EC:");

  Serial.print(EC,0);

  Serial.println(" uS/cm");

  /*****Manda los valores a ubidots*****/

  ubidots.add("TEMPERATURA",temperatura); //manda la variable de PH al ubidots

  ubidots.add("TDS",TDS); //manda la variable de PH al ubidots

  ubidots.add("EC",EC); //manda la variable de PH al ubidots

  ubidots.publish(DEVICE_LABEL_TO_RETRIEVE_VALUES_FROM); // publica los datos en el dispositivo definido

  ec.calibration(voltage, temperatura); // Calibra el sensor de TDS con la temperatura

  delay(1000);

  }

 

  ubidots.loop();

}

/**** función de Subscripción para mensajes de regreso desde la plataforma Ubidots hacia el circuito ***/

void callback(char *topic, byte *payload, unsigned int length)

{

  Serial.print("Mensaje Recibido [");

  Serial.print(topic);

  Serial.print("] ");

  for (int i = 0; i < length; i++)

  {

    Serial.print((char)payload[i]);

  }

  Serial.println();

}

Saludos @Darkchic, espero que este muy bien.

Personalmente he probado el ejemplo que esta en el GitHub de nuestra libreria, no precisamente usando el mismo sensor que usted , pero aun asi el flujo funciona adecuadamente, es decir, puedo visualizar el valor de la variable a traves de la consola serial asi como enviarlo a Ubidots.

Dicho eso, le sugiero dos cosas para poder debugear esta mejor:

1- Por favor siga el ejemplo que cite arriba, pues he visto en su codigo un par de discrepancias que pueden llevar al error. Una de ellas, por ejemplo, es que usted registra el callback sin haber antes definido la funcion callback, o al menos declarar su prototipo.

  ubidots.setCallback(callback);// Se inicia la función de subscripción para los mensajes

2-Por favor adjunte aca un pantallazo del valor del sensor impreso en la consola serial.

Espero que esto pueda servir.

–Juan David