Tutorial del Internet de las Cosas y Bluetooth con el ESP32
Juan Antonio Villalpando
Volver al índice del tutorial
____________________________
117.- ESP32. 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 ESP32 pondremos un código que generará un número aleatorio cada 3 segundos, enviará ese número a FireBaseDB y de ahí a App Inventor, de manera que veremos cómo ese número cambia 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 ESP32 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 ESP32.
- Instalamos la librería Firebase ESP32 Client.
https://github.com/mobizt/Firebase-ESP32/blob/master/src/FirebaseESP32.h
http://www.lib4dev.in/info/mobizt/Firebase-ESP32/144101498
|
// Juan A. Villalpando
// http://kio4.com/arduino/117_Wemos_Firebase.htm
#include <FirebaseESP32.h>
#include <WiFi.h>
FirebaseData firebaseData;
const char* ssid = "Nombre_de_tu_Red_Wifi";
const char* password = "Clave_Red_Wifi";
String numero = "";
String texto = "";
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());
Firebase.begin("https://kio4b-3c240.firebaseio.com/", "1lzi12VLgSecreto_de_la_base_de_datos");
}
void loop() {
if (Firebase.getString(firebaseData, "/ESP32/numero")) {
String numero_fb = firebaseData.stringData();
if (numero_fb != numero) {
numero = numero_fb;
Serial.println(numero);
}
}
if (Firebase.getString(firebaseData, "/ESP32/texto")) {
String texto_fb = firebaseData.stringData();
if (texto_fb != texto) {
texto = texto_fb;
Serial.println(texto);
}
}
// Send a random number every 3 seconds.
if((millis()-tiempo_actual)>= 3000){
String alea = (String) random(0,100);
tiempo_actual = millis();
Serial.println(alea);
Firebase.setString(firebaseData, "/ESP32/aleatorio", alea);
}
}
|
__________________________________________________
1.- App Inventor. App envía número y texto. Recibe aleatorio.
p117_wemos_firebase.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 ESP32.
____________________________________________
- Bloques.
_________________________________________________
- Resultado.
__________________________________________________
__________________________________________________
2.- App Inventor enciende/apaga LED12 y LED14 en ESP32 mediante Firebase.
p117_firebase_led.aia
____________________________________________
- Diseño.
- FirebaseURL: https://kio4-3c240.firebaseio.com/
- ProjectBucket: ESP32
____________________________________________
- Bloques.
____________________________________________
- Código ESP32.
|
// Juan A. Villalpando
// http://kio4.com/arduino/117_Wemos_Firebase.htm
#include <FirebaseESP32.h>
#include <WiFi.h>
FirebaseData firebaseData;
const char* ssid = "Nombre_de_tu_Red_Wifi";
const char* password = "Clave_Wifi";
#define LED12 12
#define LED14 14
String message12 = "";
String message14 = "";
void setup() {
pinMode(LED12, OUTPUT);
pinMode(LED14, OUTPUT);
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());
Firebase.begin("https://kio4-3c240.firebaseio.com/", "1lzi12VLgSecreto_de_la_base_de_datos");
}
void loop() {
if (Firebase.getString(firebaseData, "/ESP32/LED12")) {
String message12_fb = firebaseData.stringData();
if (message12_fb != message12) {
message12 = message12_fb;
Serial.println(message12);
if(message12.indexOf("Set LED12 ON") != -1){digitalWrite(LED12, HIGH);}
if(message12.indexOf("Set LED12 OFF") != -1){digitalWrite(LED12, LOW);}
}
}
if (Firebase.getString(firebaseData, "/ESP32/LED14")) {
String message14_fb = firebaseData.stringData();
if (message14_fb != message14) {
message14 = message14_fb;
Serial.println(message14);
if(message14.indexOf("Set LED14 ON") != -1){digitalWrite(LED14, HIGH);}
if(message14.indexOf("Set LED14 OFF") != -1){digitalWrite(LED14, LOW);}
}
}
}
|
__________________________________________________
__________________________________________________
3.- ESP32 envía el estado de dos pulsadores a App Inventor mediante Firebase.
p117_firebase_pulsador.aia
____________________________________________
- Diseño.
____________________________________________
- Bloques.
____________________________________________
- Código ESP32.
|
// Juan A. Villalpando
// http://kio4.com/arduino/117_Wemos_Firebase.htm
#include <FirebaseESP32.h>
#include <WiFi.h>
FirebaseData firebaseData;
const char* ssid = "Nombre_de_tu_Red_Wifi";
const char* password = "Clave_Red_Wifi";
#define LED12 12
#define LED14 14
#define Pulsa16 16
#define Pulsa17 17
String message12 = "";
String message14 = "";
String message16 = "";
String message17 = "";
boolean P16;
boolean P17;
boolean P16_old;
boolean P17_old;
void setup() {
pinMode(LED12, OUTPUT);
pinMode(LED14, OUTPUT);
pinMode(Pulsa16, INPUT_PULLUP); // Pin16 and Gnd.
pinMode(Pulsa17, INPUT_PULLUP); // Pin17 and Gnd.
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());
Firebase.begin("https://kio4-3c240.firebaseio.com/", "1lzi12VLgSecreto_de_la_base_de_datos");
}
void loop() {
if (Firebase.getString(firebaseData, "/ESP32/LED12")) {
String message12_fb = firebaseData.stringData();
if (message12_fb != message12) {
message12 = message12_fb;
Serial.println(message12);
if(message12.indexOf("Set LED12 ON") != -1){digitalWrite(LED12, HIGH);}
if(message12.indexOf("Set LED12 OFF") != -1){digitalWrite(LED12, LOW);}
}
}
if (Firebase.getString(firebaseData, "/ESP32/LED14")) {
String message14_fb = firebaseData.stringData();
if (message14_fb != message14) {
message14 = message14_fb;
Serial.println(message14);
if(message14.indexOf("Set LED14 ON") != -1){digitalWrite(LED14, HIGH);}
if(message14.indexOf("Set LED14 OFF") != -1){digitalWrite(LED14, LOW);}
}
}
// Send messages PushButtons
P16 = digitalRead(Pulsa16);
if (P16 != P16_old) {
P16_old = P16;
if (P16 == HIGH){message16 = "'NO Pulsado 16'";} else {message16 = "'Pulsado 16'";}
Serial.println(message16);
Firebase.setString(firebaseData, "/ESP32/P16", message16);
}
P17 = digitalRead(Pulsa17);
if (P17 != P17_old) {
P17_old = P17;
if (P17 == HIGH){message17 = "'NO Pulsado 17'";} else {message17 = "'Pulsado 17'";}
Serial.println(message17);
Firebase.setString(firebaseData, "/ESP32/P17", message17);
}
}
|
_______________________________
|