Hola a todos ,estoy teniendo problemas con un proyecto, la cual el proyecto consta de 3 sensores conectados a un Arduino uno , adicional tiene conectado una antena xbee (tx), la cual hace un enlace inalámbrico con otra antena xbee (rx), mi segunda antena xbee(rx) está conectado a un esp32, que la función del esp32 es leer los datos que le está llegando a mi antena receptora, además con la ayuda de firebase , pude realizar una página para mostrar los datos en tiempo real, el problema está en que no manda los datos a la página, e intentado múltiples cosas y no tengo resultados.
Además, sé que le está llegando los datos a mi antena receptora, porque lo monitoreo con su respectivo software, también conectando mi esp32 , puedo mandar datos ramdon a la página comprobando que no hay problema en ello, creo que el problema radica desde el principio, capaz estoy realizando una mala programación en el Arduino, que no mande la correcta información para que el esp32 lea bien los datos, o si tengo que programar con las mismas variables de la página en el Arduino.
Necesito ayuda respecto a esto, primero quería implementar con solo un sensor, en este caso el sensor ultrasónico estoy usando este codigo en el arduino:
// Configuración de pines del sensor ultrasónico
const int triggerPin = A0;
const int echoPin = A1;
const float maxHeight = 100.0;
float distance;
float fuelLevel;
void setup() {
Serial.begin(9600);
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
long duration = pulseIn(echoPin, HIGH);
distance = duration * 0.0343 / 2;
if (distance >= maxHeight) {
fuelLevel = 0.0;
} else if (distance <= 0) {
fuelLevel = 100.0;
} else {
// Cálculo proporcional: (maxHeight - distancia) como porcentaje
fuelLevel = (1 - (distance / maxHeight)) * 100.0;
}
Serial.print(fuelLevel, 2);
Serial.println();
delay(1000); // Esperar 1 segundo entre mediciones
}
Además, el código del esp32 que manda valores aleatorios a la página :
#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <Firebase_ESP_Client.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include "addons/TokenHelper.h"
#include "addons/RTDBHelper.h"
#define WIFI_SSID ""
#define WIFI_PASSWORD ""
#define API_KEY ""
#define USER_EMAIL ""
#define USER_PASSWORD ""
#define DATABASE_URL ""
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
String uid;
String databasePath;
String tempPath;
String humPath;
String presPath;
float temperature;
float humidity;
float pressure;
float contador =1.0;
unsigned long sendDataPrevMillis = 0;
unsigned long timerDelay = 5000;
void initWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
Serial.println();
}
void sendFloat(String path, float value){
if (Firebase.RTDB.setFloat(&fbdo, path.c_str(), value)){
Serial.print("Writing value: ");
Serial.print (value);
Serial.print(" on the following path: ");
Serial.println(path);
Serial.println("PASSED");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
}
else {
Serial.println("FAILED");
Serial.println("REASON: " + fbdo.errorReason());
}
}
void setup(){
Serial.begin(115200);
initWiFi();
config.api_key = API_KEY;
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
config.database_url = DATABASE_URL;
Firebase.reconnectWiFi(true);
fbdo.setResponseSize(4096);
config.token_status_callback = tokenStatusCallback;
config.max_token_generation_retry = 5;
Firebase.begin(&config, &auth);
Serial.println("Getting User UID");
while ((auth.token.uid) == "") {
Serial.print('.');
delay(1000);
}
uid = auth.token.uid.c_str();
Serial.print("User UID: ");
Serial.println(uid);
// Update database path
databasePath = "/UsersData/" + uid;
// Update database path for sensor readings
tempPath = databasePath + "/temperature"; // --> UsersData/<user_uid>/temperature
humPath = databasePath + "/humidity"; // --> UsersData/<user_uid>/humidity
presPath = databasePath + "/pressure"; // --> UsersData/<user_uid>/pressure
}
void loop(){
// Send new readings to database
if (Firebase.ready() && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0)){
sendDataPrevMillis = millis();
if(contador>20){contador = 1.0;}
contador=contador+1;
temperature = contador*0.1;
humidity = contador*0.2;
pressure = contador*0.3;
// Send readings to database:
sendFloat(tempPath, temperature);
sendFloat(humPath, humidity);
sendFloat(presPath, pressure);
}
}
Las credenciales si las tengo simplemente las borre, quisiera que el valor del sensor se guarde en la variable PATHUM, para subir a la pagina, Espero me puedan ayudar porfa.
