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();
}