sábado, 26 de octubre de 2024

No 10 Envio de Datos a Firebase Realtime Database por internet Tutorial...




codigo

// Proyecto basado en: https://randomnerdtutorials.com/esp32-firebase-realtime-database/
// Adaptado por Mg.ing Edison V, www.editronikx.com.co, 2024

#if defined(ESP32)
  #include <WiFi.h>
#elif defined(ESP8266)
  #include <ESP8266WiFi.h>
#endif

#include <Firebase_ESP_Client.h>

// Insertar credenciales de red
#define WIFI_SSID "el nombre de su red wifi"
#define WIFI_PASSWORD "su clave"en 

// Proporcionar la informacion del proceso de generacion del token.
#include "addons/TokenHelper.h"

// Proporcionar la informacion de impresion de la carga util de RTDB y otras funciones de ayuda.
#include "addons/RTDBHelper.h"

// Definir el pin digital del LED integrado
#define LED 2

// Insertar la API Key del proyecto Firebase
#define API_KEY " su clave api"

// Insertar la URL de la base de datos RTDB
#define DATABASE_URL "su URL de firebse/"

// Definir objeto de datos de Firebase
FirebaseData fbdo;

// Definir autenticacion de Firebase
FirebaseAuth auth;

// Definir configuracion de Firebase
FirebaseConfig config;

// Variable millis para enviar/almacenar datos en la base de datos Firebase
unsigned long sendDataPrevMillis = 0;
const long timerDelay = 5000; // Enviar/almacenar datos en la base de datos cada 5 segundos

// Variable booleana para el estado de registro
bool signupOK = false;
const int Pinadc = 34;

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
  pinMode(Pinadc, INPUT);

  // Conectar a la red WiFi
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.println("-------Conectando a wifi------");
  Serial.print("Conectando a: ");
  Serial.println(WIFI_SSID);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    digitalWrite(LED, HIGH);
    delay(250);
    digitalWrite(LED, LOW);
    delay(250);
  }
  digitalWrite(LED, LOW);
  Serial.println();
 // Verificar si la conexión fue exitosa
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("No se pudo conectar al WiFi.");
  } else {
    Serial.println(" Conectado a WiFi. Dirección IP: ");
    Serial.println(WIFI_SSID);
    Serial.print("IP asignada: ");
    Serial.println(WiFi.localIP());  // Imprimir la dirección IP obtenida
      Serial.println("---------------");
  }

  // Asignar la API Key (requerido)
  config.api_key = API_KEY;

  // Asignar la URL de la base de datos RTDB (requerido)
  config.database_url = DATABASE_URL;

  // Registrarse en Firebase
  Serial.println();
  Serial.println("--Registrandose ----");
  Serial.print("Nuevo usuario... ");
  if (Firebase.signUp(&config, &auth, "", "")) {
    Serial.println("ok");
    signupOK = true;
  } else {
    Serial.printf("%s\n", config.signer.signupError.message.c_str());
  }
  Serial.println("---------------");

  // Asignar la funcion de callback para el estado del token
  config.token_status_callback = tokenStatusCallback;

  Firebase.begin(&config, &auth);
  Firebase.reconnectWiFi(true);
}

void loop() {
  // Enviar datos a Firebase si esta listo, registrado y ha pasado el tiempo especificado
  if (Firebase.ready() && signupOK && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0)) {
    sendDataPrevMillis = millis();

    int bits = analogRead(Pinadc);  // Leer el valor analogico (0-4096)

    // Convertir el valor ADC (0-4096) a un valor de voltaje para enviar
    float voltaje = (bits / 4096.0) * 3.3;  // Asumiendo un voltaje de referencia de 3.3V

    Serial.println();
    Serial.println("-------Bits enteros:------");
    Serial.print("Bits enteros : ");
    Serial.println(bits);

    Serial.println();
    Serial.println("-------Voltaje:------");
    Serial.print("Voltaje : ");
    Serial.println(voltaje);

    // Almacenar datos en la base de datos Firebase
    Serial.println();
    Serial.println("---------------Almacenando Datos");
    digitalWrite(LED, HIGH);

    // Escribir un valor de voltaje tipo float en la base de datos
    if (Firebase.RTDB.setFloat(&fbdo, "voltaje", voltaje)) {
      Serial.println("PASSED");
      Serial.println("PATH: " + fbdo.dataPath());
      Serial.println("TYPE: " + fbdo.dataType());
    } else {
      Serial.println("FAILED");
      Serial.println("REASON: " + fbdo.errorReason());
    }

    // Escribir un valor de bits tipo int en la base de datos
    if (Firebase.RTDB.setInt(&fbdo, "bits_enteros", bits)) {
      Serial.println("PASSED");
      Serial.println("PATH: " + fbdo.dataPath());
      Serial.println("TYPE: " + fbdo.dataType());
    } else {
      Serial.println("FAILED");
      Serial.println("REASON: " + fbdo.errorReason());
    }

    digitalWrite(LED, LOW);
    Serial.println("---------------");
  }
}

No hay comentarios: