En esta ocasión quiero compartir un tutorial sobre como conectar ESP8266 (nodeMCU) con firebase para controlar un led desde una aplicación para android de forma remota (online).
Firebase es una plataforma para el desarrollo de aplicaciones web y aplicaciones móviles desarrollada por James Tamplin y Andrew Lee en 2011 y adquirida por Google en 2014.
Esto es la base para el desarrollo de muchos proyectos de IOT, ya que nos permite tener acceso en tiempo real a una base de datos online desde nuestros ESP8266 y desde aplicaciones WEB o aplicaciones móviles ya sea para el control de las entradas y salidas de nuestro NODEMCU, cómo para monitorear datos.
En este tutorial lo que vamos a hacer es algo muy básico, se trata de encender o apagar un led desde una aplicación creada en Appinventor, que actualizará los datos de un tag, en la base de datos cuándo presionemos un botón. Estos datos serán leídos por el nodeMCU que también estará conectado a esta base de datos.
Y de esta forma dependiendo del valor que tenga el tag encender o apagar el led.
El led que vamos a usar es el led que trae nodeMcu incorporado para evitar de tener que conectar un led externo o tener que montar un circuito.
Para esto vamos a necesitar algunas cosas como por ejemplo la librería para firebase con ESP8266.
Descargamos la librería para conectar con firebase desde el github del autor:
Ademas en mi ejemplo yo uso la librería WifiManager para poder configurar la conexión wifi desde el celular o desde el portal web creado para tal fin. (esto ultimo es opcional).
Esta librería se instala desde el gestor de librerías de arduino ide.
También vamos a necesitar crear una base de datos en firebase, para esto vamos al sitio web de firebase y nos creamos una cuenta.
Una vez que tengamos una cuenta, nos vamos a nuestra consola y podremos ver un botón para crear un nuevo proyecto.
Le damos click a agregar proyecto ponemos el nombre del proyecto y aceptamos los términos.
Se creara nuestro proyecto y nos lleva a la consola de administración donde, nos vamos a base de datos, y aquí creamos una nueva base de datos.
En las reglas de seguridad, vamos a seleccionar comenzar en modo de prueba. Esto nos permite escribir y consultar la base de datos sin restricciones.
Una vez creada la base de datos, podremos crear el tag desde el signo +, le ponemos el nombre “EstadoLed” y le asignamos el valor “0”.
Ya tenemos creada nuesta base de datos y ahora necesitaremos anotar el nombre de la base de datos o la url y el secreto de la base de datos que es como una especie de clave para poder acceder a ésta desde afuera.
Al url de la base de datos lo podemos copiar desde la pantalla como se ve en la imagen y la copiamos en un bloc de notas.
También tendremos que irnos al icono de ajustes.
Seleccionamos configuración del proyecto y nos vamos a cuentas de servicio. Allí podremos copiar el secreto de la base de datos de y pegarla en nuestro bloc de notas.
Con esto terminamos la parte de la creación de la base de datos ahora pasamos a trabajar en el nodemcu desde arduino ide.
Copiamos este código, en el cual deberán reemplazar los datos de la base de datos según la que ustedes crearon.
// Texolab.net Firebase db Wifi
#include <Firebase.h> // Librerias para conectar con firebase
#include <FirebaseArduino.h>
#include <FirebaseCloudMessaging.h>
#include <FirebaseError.h>
#include <FirebaseHttpClient.h>
#include <FirebaseObject.h>
#include <ESP8266WebServer.h> // librerias para portal confoiguracion wifi
#include <DNSServer.h>
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
#include <ESP8266TimeAlarms.h> //librerias para el Control de las alarmas
#include <ESP8266WiFi.h>
#define FIREBASE_HOST "miprimerproyrcto.firebaseio.com" // tu base de datos en firebase
#define FIREBASE_AUTH "rEbPnn2XdkAWrudM2tjqfdXjLsMvrMj5wkcr77sX" // tu secreto de firebase
#define PORTAL_WIFI_PIN 0 // el pin donde esta conectado el led de estado
void setup() {
Serial.begin(115200); // preparamos el puerto serie
WiFiManager wifiManager; // Cargamos WifiManager Intenta la conexion al ultimo AP
wifiManager.setTimeout(180); // Si no se puede conectar abre el portal de configuracion
if(!wifiManager.autoConnect("DogFeederAP")) {
Serial.println("Fallo la conexion, TimeOut");
delay(3000);
ESP.reset();
delay(5000);
}
//Si llega aqui ya esta conectado al Wifi
Serial.println("Conectado...Siiii :)");
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); //inicializamos la comunicacion con firebase
Serial.println("\n Iniciando");
Serial.println();
pinMode(16, OUTPUT); // ponemos pin 16 como salida
pinMode(PORTAL_WIFI_PIN, INPUT); // Ponemos el pin del boton Flash como entrada
configTime(0, 0, "0.se.pool.ntp.org"); //Configuramos el cliente NTP y su servidor
// Buenos Aires Argentina Zona Horaria: <-03>3
//Get JSON of Olson to TZ string using this code https://github.com/pgurenko/tzinfo
setenv("TZ", "<-03>3", 1);
tzset();
}
void loop() {
// Comprobamos si se presiono el boton de configuracion
if ( digitalRead(PORTAL_WIFI_PIN) == LOW ) {
//WiFiManager
WiFiManager wifiManager;
//Descomentar para resetear los datos de conexion
//wifiManager.resetSettings();
wifiManager.setTimeout(180);
//Se inicia un accesPoint
//Y queda en espera de configuracion
if (!wifiManager.startConfigPortal("FirebaseAP")) {
Serial.println("Fallo la conexion, timeout");
delay(3000);
ESP.reset();
delay(5000);
}
Serial.println("Conectado ...Siiii :)");
}
// Se lee desde la base de datos el valor entero del teg EstadoLed
String estado_led = Firebase.getString("EstadoLed");
if(estado_led == "0"){Serial.println(estado_led); digitalWrite(16,0);}
if(estado_led == "1"){Serial.println(estado_led); digitalWrite(16,1);}
delay(500);
}
compilamos y subimos a nuestro nodeMCU, tener en cuenta que el programa cuenta con el WifiManager de modo que si no tienen configurada la conexión wifi se les creara un AP con el nombre FirebaseAP en el que deberán conectarse y luego les pedirá la configuración de su red WIFI.
Para mas informacion ver este POST
Ahora ya podemos abrir la consola serial de ArduinoIde y podremos ver el valor 0 que es el valor que esta cargado en la base de datos para el TAG (EstadoLed).
El led del nodeMCU debería estar encendido y si nos vamos a la base de datos y modificamos el valor del TAG a “1” veremos como el led se apaga. Esto lo podemos ver en el siguiente video.
APP android
Para la creación de la app para android vamos a irnos a la pagina de MITAPPINVENTOR2, vamos a iniciar sesión con nuestra cuenta y vamos a crear un nuevo proyecto.
En este nuevo proyecto vamos a agregar un Label y 2 botones. Vamos a configurar las pantallas y los nombres com se ve en la imagen y ademas vamos a agregar el componente de firebase.
Dentro del componente de firebase vamos a configurar el token que es el mismo que pusimos en la app (el Secreto) y la url de la base de datos, solo que en este caso incluimos la dirección completa con el http://.
Ademas deberemos dejar vacio el campo ProjectBucket.
ahora nos pasamos a la pantalla de bloques y creamos todo como se ve enla siguiente imagen.
Lo que hace el programa es muy simple, escribe el estado del tag en el label para que podamos ver en que estado se encuentra, ademas cada vez que presionamos el boton apagar o encender envía un valor 1 o 0 al tag EstadoLed.
Estos valores serán leídos por el programa en el nodemcu y apagará o encenderá el led dependiendo del estado de ésta .
Muy bien, eso seria todo, tengo que recordarles que ésta base de datos se puede acceder desde Internet en cualquier momento por lo tanto nos podría servir para controlar el encendido de algún artefacto a distancia o para poder ver el estado de algún sensor.
Espero que les sea de mucha utilidad para sus proyectos, no olviden compartir el blog con sus amigos y conocidos.
Hasta la proxima.
Una respuesta a «ESP8266 + FIREBASE+APP ANDROID + LED»
Hola gracias por esta muy buena publicacion! estoy recien empezando con esto y me encuntro con un problema cuando quiero compilar este codigo el mismo wemos me compila perfecto con otros codigos pero con este me sale este problema “Error compilando para la tarjeta NodeMCU 1.0 (ESP-12E Module).”
me podes ayudar. Mi nombre es Alejandro de Cordoba Argentina.