|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

Tutorial del Internet de las Cosas y Bluetooth con el ESP32
Juan Antonio Villalpando

Volver al índice del tutorial

____________________________

117B.- ESP8266. FirebaseDB y App Inventor.

https://community.appinventor.mit.edu/t/esp32-mqtt-broker-publish-subscribe-thingspeak/10490

- En el tutorial anterior vimos cómo podiamos cambiar los valores casi en tiempo real mediante el protocolo MQTT y varios Brokers.

- Ahora vamos a crear una aplicación con App Inventor y FirebaseDB. Cuando cambie algún valor, casi automáticamente, sin necesidad de refrescar llegará al cliente.

- En el ESP8266 pondremos un código que generará dos números aleatorios cada 5 segundos, enviará esos números a FireBaseDB y de ahí a App Inventor, de manera que veremos cómo esos números cambian su valor según vaya llegando a la aplicación.

- Además desde App Inventor podremos enviar un número y un texto a FireBaseDB, de ahí llegará a ESP8266 y lo podremos visualizar en el Monitor Serie.

_________________________________________________________

- Registro de FireBaseDB y creación de la base de datos.

- Previamente debemos registrarnos en FireBaseDB y crear una base de datos.

https://firebase.google.com/

-

- Database. Crear base de datos.

- Empezar con el modo de prueba.

- Nos situamos en Realtime Database. Esta es nuestra base de datos.
- Observa la dirección: https://kio4-3c240.firebaseio.com/ la necesitaremos en el código del ESP32.

- Más adelante entraremos en esta pantalla para ver los datos almacenados.

- Nos situamos en Realtime Database. Reglas y ponemos read y write en true. Pulsamos en Publicar.

- Vamos a obtener el código Secreto de la base de datos.

- Aquí tenemos el código secreto de la base de datos que necesitaremos para el ESP32.

_________________________________

- Código del ESP8266.

- Instalamos esta librería de ESP8266 Firebase

https://github.com/Rupakpoddar/ESP8266Firebase/blob/master/examples/FirebaseDemo/FirebaseDemo.ino

- Esta librería no necesita la clave secret.

- Es un poco lenta.

aleatorios.ino


// Juan A. Villalpando
// http://kio4.com/arduino/117_ESP8266_Firebase.htm

#include <ESP8266Firebase.h>
#include <ESP8266WiFi.h>

// SLOW BUT HASTLE-FREE METHOD FOR LONG TERM USAGE. 
// DOES NOT REQUIRE PERIODIC UPDATE OF FINGERPRINT
Firebase firebase("kio4b-3C240");

const char* ssid = "Nombre_Red_WiFi";
const char* password = "Clave_WiFi";

float temperatura = 25.0;
float humedad = 87.0;  
String texto = "Hola";
String numero = "123";

unsigned long tiempo_actual = 0;

void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.print("Connecting with ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
  }
  
  Serial.println("");
  Serial.print("WiFi conected. IP: ");
  Serial.println(WiFi.localIP());
}


void loop() {
// RECEIVE from App
    if (firebase.getString("ESP8266/numero")) {
      String numero_fb = firebase.getString("ESP8266/numero");
      if (numero_fb != numero) {
        numero = numero_fb;
        Serial.println(numero);
      }
    }

    if (firebase.getString("ESP8266/texto")) {
      String texto_fb = firebase.getString("ESP8266/texto");
      if (texto_fb != texto) {
        texto = texto_fb;
        Serial.println(texto);
      }
    }

///////////////////////////////////////
// SEND to App 2 random numbers every 5 seconds.
    if((millis()- tiempo_actual)>= 5000){
      temperatura = random(0,10000)/100.0;
      humedad =  random(0,10000)/100.0;
      String datos = (String) temperatura + "|" + (String) humedad;
      Serial.println(datos);
      //firebase.setFloat("ESP8266/temperatura", temperatura);
      //firebase.setFloat("ESP8266/humedad", humedad);
      firebase.setString("ESP8266/datos", datos);
      tiempo_actual = millis();
    }
}

__________________________________________________

1.- App Inventor. App envía número y texto. Recibe aleatorio.

p117_wemos_firebase_ESP8266.aia

__________________________________________

- Diseño.

- En FirebaseURL, debemos poner la dirección de la base de datos, en mi caso:

https://kio4-3c240.firebaseio.com/

- En ProjectBucket, cualquier nombre, por ejemplo ESP8266.

____________________________________________

- Bloques.

_________________________________________________

- Resultado.

__________________________________________________

2.- Con otra librería. FirebaseArduino.

- Vamos a descargar la librería FirebaseArduino de... https://docs.particle.io/reference/device-os/libraries/f/FirebaseArduino/

- La copiamos en la subcarpeta libraries de Arduino con el nombre de FirebaseArduino.

- Con esta librería es necesario la dirección del proyecto de Firebase y el código secret.

- Esta librería es más rápida que la anterior.

- Cargamos este código en el ESP8266

aleatorios_2.ino


#include <ESP8266WiFi.h>                 
#include <FirebaseArduino.h>

const char* ssid = "Nombre_Red_WiFi";
const char* password = "Clave_WiFi";

float temperatura = 25.0;
float humedad = 87.0;  
String texto = "Hola";
String numero = "123";

unsigned long tiempo_actual = 0;

#define Firebase_direccion "kio4b-60981.firebaseio.com"      
#define Firebase_secret "C5PQ6-secret_Firebase_I22U3OpBx"  

void setup() {
  Firebase.begin(Firebase_direccion, Firebase_secret);
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.print("Connecting with ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
  }
  
  Serial.println("");
  Serial.print("WiFi conected. IP: ");
  Serial.println(WiFi.localIP());                            
}


void loop() {
// RECEIVE from App
    if (firebase.getString("ESP8266/numero")) {
      String numero_fb = firebase.getString("ESP8266/numero");
      if (numero_fb != numero) {
        numero = numero_fb;
        Serial.println(numero);
      }
    }

    if (firebase.getString("ESP8266/texto")) {
      String texto_fb = firebase.getString("ESP8266/texto");
      if (texto_fb != texto) {
        texto = texto_fb;
        Serial.println(texto);
      }
    }
///////////////////////////////////////
// SEND to App 2 random numbers every 5 seconds.
    if((millis()- tiempo_actual)>= 5000){
      temperatura = random(0,10000)/100.0;
      humedad =  random(0,10000)/100.0;
      String datos = (String) temperatura + "|" + (String) humedad;
      Serial.println(datos);
      //firebase.setFloat("ESP8266/temperatura", temperatura);
      //firebase.setFloat("ESP8266/humedad", humedad);
     // firebase.setString("ESP8266/datos", datos);
        Firebase.setString("ESP8266/datos", datos); 
      // Firebase.setFloat ("ESP8266/temperatura", temperatura);  
      tiempo_actual = millis();
    }
}

- Esta librería puede tener un problema de actualización. Si no te funciona debes abrir con un editor de texto el archivo de la librería de Arduino:

library/FirebaseArduino/src/FirebaseHttpClient.h, al final de ese archivo verás...

static const char kFirebaseFingerprint[] =
"04 E0 BD B0 F8 63 22 3C 3A 19 7D 92 B6 79 2A 44 BF 77 FC DA";

ese Fingerprint debe ser actualizado, para ello ve a https://www.grc.com/fingerprints.htm y en la dirección, escribe la dirección del proyecto de Firebase, en mi caso sería kio4b-60981.firebaseio.com

Obtienes un número, lo pones en la línea indicada anteriormente, cambiando los dos puntos por espacio.

https://github.com/FirebaseExtended/firebase-arduino/issues/236

__________________________________________________

3.- Con otra librería. FirebaseESP8266

- Esta es la librería más recomendable.

https://github.com/mobizt/Firebase-ESP8266

- La copiamos en la carpeta libraries/Firebase-ESP8266

- Esta librería vale para el ESP8266 y para el ESP32.

- Es rápida.

- Necesita la dirección del proyecto y su clave secret.

aleatorios_3.ino


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

#define WIFI_SSID "Nombre_Red_WiFi"
#define WIFI_PASSWORD "Clave_WiFi"
#define DATABASE_URL "kio4b-60981.firebaseio.com"

FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;

unsigned long sendDataPrevMillis = 0;
unsigned long count = 0;

void setup(){
  Serial.begin(115200);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  config.signer.test_mode = true;
  config.database_url = DATABASE_URL;
  config.signer.tokens.legacy_token = "C5PQ6Ie_clave_secret_de_Firebase_n5I22U3OpBx";

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

void loop(){
  if (Firebase.ready() && (millis() - sendDataPrevMillis > 5000 || sendDataPrevMillis == 0)){
    sendDataPrevMillis = millis();
    Serial.printf("Set bool... %s\n", Firebase.setBool(fbdo, F("/test/bool"), count % 2 == 0) ? "ok" : fbdo.errorReason().c_str());
    Serial.printf("Get bool... %s\n", Firebase.getBool(fbdo, FPSTR("/test/bool")) ? fbdo.to<bool>() ? "true" : "false" : fbdo.errorReason().c_str());
    bool bVal;
    Serial.printf("Get bool ref... %s\n", Firebase.getBool(fbdo, F("/test/bool"), &bVal) ? bVal ? "true" : "false" : fbdo.errorReason().c_str());
    Serial.printf("Set int... %s\n", Firebase.setInt(fbdo, F("/test/int"), count) ? "ok" : fbdo.errorReason().c_str());
    Serial.printf("Get int... %s\n", Firebase.getInt(fbdo, F("/test/int")) ? String(fbdo.to<int>()).c_str() : fbdo.errorReason().c_str());
    int iVal = 0;
    Serial.printf("Get int ref... %s\n", Firebase.getInt(fbdo, F("/test/int"), &iVal) ? String(iVal).c_str() : fbdo.errorReason().c_str());
    Serial.printf("Set float... %s\n", Firebase.setFloat(fbdo, F("/test/float"), count + 10.2) ? "ok" : fbdo.errorReason().c_str());
    Serial.printf("Get float... %s\n", Firebase.getFloat(fbdo, F("/test/float")) ? String(fbdo.to<float>()).c_str() : fbdo.errorReason().c_str());
    Serial.printf("Set double... %s\n", Firebase.setDouble(fbdo, F("/test/double"), count + 35.517549723765) ? "ok" : fbdo.errorReason().c_str());
    Serial.printf("Get double... %s\n", Firebase.getDouble(fbdo, F("/test/double")) ? String(fbdo.to<double>()).c_str() : fbdo.errorReason().c_str());
    Serial.printf("Set string... %s\n", Firebase.setString(fbdo, F("/test/string"), "Hello World!") ? "ok" : fbdo.errorReason().c_str());
    Serial.printf("Get string... %s\n", Firebase.getString(fbdo, F("/test/string")) ? fbdo.to<const char *>() : fbdo.errorReason().c_str());
    Serial.println();
    count++;
  }
}

 

_______________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información