• Skip to main content
  • Skip to primary sidebar

RNTLab.com

The Ultimate Shortcut to Learn Electronics and Programming with Open Source Hardware and Software

  • Courses
  • Forum
    • Forum
    • Ask Question
  • Shop
  • Account
  • Blog
  • Login

los leds se quedan congelados tutorial Controlar los GPIO de ESP32/ESP8266 desde cualquier lugar (Firebase Web App)

Q&A Forum › Category: ESP8266 › los leds se quedan congelados tutorial Controlar los GPIO de ESP32/ESP8266 desde cualquier lugar (Firebase Web App)
0 Vote Up Vote Down
Martin Mantelli asked 4 days ago

Segui el tutorial como indicaba y la placa tenia problemas para conectarle, logre una conexion mas rapida y estable asignandole una IP FIJA.
el problema es que luego de un tiempo si bien en la web app de Firebase el estado de los GPIO seguian actualizandose en la placa los leds quedaban congelados, solo respondian si reiniciaba la placa (esp8266) con el boton reset.

Trabaje el codigo con chatgpt pero no pude resolver el problema.

#define ENABLE_USER_AUTH
#define ENABLE_DATABASE
#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <FirebaseClient.h>
#include <ArduinoJson.h>
#include “ExampleFunctions.h”
// Credenciales WiFi y Firebase
#define WIFI_SSID “xxxxxxxxxxxx”
#define WIFI_PASSWORD “xxxxxxxxx”
#define Web_API_KEY “xxx”
#define DATABASE_URL “xxxxx”
#define USER_EMAIL “xxxxxxx”
#define USER_PASS “xxxxxxxxx”
// Objetos de autenticación y Firebase
UserAuth user_auth(Web_API_KEY, USER_EMAIL, USER_PASS);
SSL_CLIENT ssl_client, stream_ssl_client;
FirebaseApp app;
using AsyncClient = AsyncClientClass;
AsyncClient aClient(ssl_client), streamClient(stream_ssl_client);
RealtimeDatabase Database;
// Pines de salida
const int output1 = 12;
const int output2 = 13;
const int output3 = 14;
// Path en RTDB
String listenerPath = “board1/outputs/digital/”;
// Timer
unsigned long lastSendTime = 0;
const unsigned long sendInterval = 10000;
// IP fija
#include <IPAddress.h>
IPAddress local_IP(192, 168, 0, 200);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8);
IPAddress secondaryDNS(8, 8, 4, 4);
// Inicializar WiFi con IP fija
void initWiFi() {
if (!WiFi.config(local_IP, gateway, subnet, primaryDNS, secondaryDNS)) {
Serial.println(“Fallo al configurar IP estática”);
}
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print(“Conectando a WiFi ..”);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(‘.’);
delay(1000);
}
Serial.println(“”);
Serial.print(“Conectado con IP: “);
Serial.println(WiFi.localIP());
}
// Procesamiento de datos desde Firebase
void processData(AsyncResult &aResult) {
if (!aResult.isResult()) return;
if (aResult.isEvent()) {
Firebase.printf(“Event: %s, msg: %s, code: %d\n”, aResult.uid().c_str(), aResult.eventLog().message().c_str(), aResult.eventLog().code());
}
if (aResult.isDebug()) {
Firebase.printf(“Debug: %s, msg: %s\n”, aResult.uid().c_str(), aResult.debug().c_str());
}
if (aResult.isError()) {
Firebase.printf(“Error: %s, msg: %s, code: %d\n”, aResult.uid().c_str(), aResult.error().message().c_str(), aResult.error().code());
}
if (aResult.available()) {
RealtimeDatabaseResult &RTDB = aResult.to<RealtimeDatabaseResult>();
if (RTDB.isStream()) {
Serial.println(“—————————-“);
Firebase.printf(“Task: %s\n”, aResult.uid().c_str());
Firebase.printf(“Event: %s\n”, RTDB.event().c_str());
Firebase.printf(“Path: %s\n”, RTDB.dataPath().c_str());
Firebase.printf(“Data: %s\n”, RTDB.to<const char *>());
Firebase.printf(“Type: %d\n”, RTDB.type());
if (RTDB.type() == 6) { // JSON
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, RTDB.to<String>());
if (error) {
Serial.print(“deserializeJson() failed: “);
Serial.println(error.c_str());
return;
}
for (JsonPair kv : doc.as<JsonObject>()) {
int gpioPin = atoi(kv.key().c_str());
bool state = kv.value().as<bool>();
digitalWrite(gpioPin, state ? HIGH : LOW);
}
} else if (RTDB.type() == 1 || RTDB.type() == 4) { // int o bool
int GPIO_number = RTDB.dataPath().substring(1).toInt();
bool state = RTDB.to<bool>();
digitalWrite(GPIO_number, state);
Serial.println(“GPIO actualizado”);
}
} else {
Serial.println(“—————————-“);
Firebase.printf(“Tarea: %s, payload: %s\n”, aResult.uid().c_str(), aResult.c_str());
}
}
}
void setup() {
Serial.begin(115200);
pinMode(output1, OUTPUT);
pinMode(output2, OUTPUT);
pinMode(output3, OUTPUT);
initWiFi();
// Configuración SSL
ssl_client.setInsecure();
stream_ssl_client.setInsecure();
#if defined(ESP32)
ssl_client.setConnectionTimeout(1000);
ssl_client.setHandshakeTimeout(5);
stream_ssl_client.setConnectionTimeout(1000);
stream_ssl_client.setHandshakeTimeout(5);
#elif defined(ESP8266)
ssl_client.setTimeout(5000);
ssl_client.setBufferSizes(4096, 1024);
stream_ssl_client.setTimeout(5000);
stream_ssl_client.setBufferSizes(4096, 1024);
#endif
// Inicializar Firebase
initializeApp(aClient, app, getAuth(user_auth), processData, “🔐 authTask”);
app.getApp<RealtimeDatabase>(Database);
Database.url(DATABASE_URL);
// Escuchar cambios
streamClient.setSSEFilters(“get,put,patch,keep-alive,cancel,auth_revoked”);
Database.get(streamClient, listenerPath, processData, true, “streamTask”);
}
void loop() {
static bool wifiWasConnected = true;
static bool firebaseInitialized = true;
static unsigned long lastStreamReset = 0;
unsigned long currentTime = millis();
// Si se pierde la conexión WiFi
if (WiFi.status() != WL_CONNECTED) {
if (wifiWasConnected) {
Serial.println(“WiFi perdido. Intentando reconexión…”);
wifiWasConnected = false;
firebaseInitialized = false; // requiere reiniciar Firebase después
}
WiFi.disconnect();
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
unsigned long startAttemptTime = millis();
const unsigned long wifiTimeout = 10000; // 10 segundos máx para reconectar
while (WiFi.status() != WL_CONNECTED && millis() – startAttemptTime < wifiTimeout) {
Serial.print(“.”);
delay(500);
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println(“”);
Serial.println(“WiFi reconectado con éxito.”);
} else {
Serial.println(“”);
Serial.println(“No se pudo reconectar al WiFi.”);
}
return;
}
// Si se recuperó WiFi y aún no se reinició Firebase
if (!wifiWasConnected && WiFi.status() == WL_CONNECTED) {
Serial.println(“WiFi reconectado. Reiniciando Firebase…”);
wifiWasConnected = true;
// Reconfigurar Firebase
initializeApp(aClient, app, getAuth(user_auth), processData, “🔐 authTask”);
app.getApp<RealtimeDatabase>(Database);
Database.url(DATABASE_URL);
streamClient.setSSEFilters(“get,put,patch,keep-alive,cancel,auth_revoked”);
Database.get(streamClient, listenerPath, processData, true, “streamTask”);
firebaseInitialized = true;
lastStreamReset = millis();
}
// Mantener Firebase activo
app.loop();
if (app.ready()) {
// Mostrar cada 10 segundos
if (currentTime – lastSendTime >= sendInterval) {
lastSendTime = currentTime;
Serial.printf(“Tiempo transcurrido: %lu ms\n”, currentTime);
}
// Reforzar el stream cada 5 minutos por seguridad
if (currentTime – lastStreamReset > 300000) {
lastStreamReset = currentTime;
Serial.println(“Renovando stream Firebase por seguridad…”);
Database.get(streamClient, listenerPath, processData, true, “streamTask”);
}
}
}
 

Question Tags: Firebase app Web esp8266 leds congelados
1 Answers
0 Vote Up Vote Down
Sara Santos Staff answered 4 days ago

Hi.
ChatGPT doesn’t have the “knowledge” to use the latest version of the library.
 
Please execute our original code again and tell me what you get in the Serial Monitor.
Also, double-check that you’ve followed all the steps, copied the right API key, user credentials, database URL, etc.
 
All our Firebase projects were recently updated and working.
 
Regards,
Sara

Primary Sidebar

Login to Ask or Answer Questions

This Forum is private and it’s only available for members enrolled in our Courses.

Login »

Latest Course Updates

  • [eBook Updated] Learn LVGL: Build GUIs for ESP32 Projects – Version 1.5 July 7, 2025
  • [eBook Updated] Learn Raspberry Pi Pico/Pico W with MicroPython eBook – Version 1.2 May 26, 2025

You must be logged in to view this content.

Contact Support - Refunds - Privacy - Terms - MakerAdvisor.com - Member Login

Copyright © 2013-2025 · RandomNerdTutorials.com · All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.