Revista 100% Verde

Primeros pasos con NodeMCU y Firebase

Por Soloelectronicos @soloelectronico

Hoy en día muchos dispositivos que usamos día a día se conectan a internet como la televisión, altavoces inteligentes, refrigeradores, Aires Acondicionados , etc ..., dispositivos que extienden sus funciones primarias permitiéndoles interactuar con otros dispositivos en internet siendo de este modo posible controlar estos remotamente.

Como podemos ver en este blog en numeras entradas que hablamos de dispositivos de IoT, es relativamente sencillo construir nuestros propios dispositivos de IoT con algunos sensores y microcontroladores como Arduino, NodeMCU, Raspberry Pi, etcétera , lo cual le permitirán automatizar su hogar apoyándose en estos dispositivos como por ejemplo usando e l servicio de Cayenne .

Como ejemplo de lo sencillo que puede ser la construcción de dispositivos IoT desde un punto de vista más empírico , vamos a ver como usando NodeMCU ESP-12E podemos acceder a Firebase para encender y apagar un LED remoto.

Primeros pasos  con NodeMCU y Firebase

NodeMCU ESP-12E es muy barato (unos 6€) , y al tener wifi incorporado para conectarse a internet, ya tenemos los elementos suficientes para conectarnos a bases de datos avanzadas gracias a un hardware tan eficiente y por supuesto los servicios de Firebase.

En esta ocasión aunque NodeMCU ESP-12E cuenta con un puerto analogico denominado A0 y 13 pines digitales numerados del D0 al D12, vamos a usar un puerto interno al que esta conectado el led interno denominado LED_BUILTIN y de este modo no hace falta usar ningún componte externo

Primeros pasos  con NodeMCU y Firebase

Respecto al firmware necesitará subir el código a NodeMCU, pera el cual debería programar el NodeMCU con el IDE de Arduino,

Veamos con mas detalles como conseguimos configurar entorno de desarrollo tanto de Arduino como Firebase para que ambos puedan interaccionar entre si

Configuracion IDE de Arduino

1. Vamos a usar Arduino IDE para escribir el código . Si no lo tiene instalado puede descargar la última versión del IDE aquí.

2. Puesto que estamos usando NodeMCU que no es oficialmente compatible con IDE de Arduino, tenemos que agregar el archivo JSON del dispositivo. En el IDE de Arduino añadir esta URL en :

Archivo > Preferencias >Gestor de URL's Adicionales de Tarjetas : http://arduino.esp8266.com/stable/package_esp8266com_index.json

Primeros pasos NodeMCU Firebase

4. Seleccione la placa pulsando en

Herramientas > Placa >NodeMCU 1.0

4. Para utilizar la base de datos bases avanzadas en NodeMCU puede descargar la biblioteca de bases avanzadas-arduino que abstrae la API REST de las bases avanzadas por los qeu necesitamos descargar la librería de Firebase desde github aquí.

5. Incluir el archivo zip descargado (firebase-arduino-master.zip) en el IDE de Arduino.

Programa > Incluir Libreria > Añadir .zip > Seleccionar archivo .zip descargado en el paso anterior

6. También necesitará instalar la biblioteca de ArduinoJson que puede descargarse desde el IDE de Arduino así mismo. Tenga en cuenta que la versión de la biblioteca no debe 6.x.x por lo que debe utilizar la última 5.x.x

Programa > Incluir Libreria > Añadir biblioteca .zip >Buscar ArduinoJson por Benoit Blanchon

Creación de una base de datos Firebase

7. Cree un nuevo proyecto de Firebase desde la consola (necesitará tener cuenta de google para crear proyecto de FireBase) y diríjase hacia la sección de base de datos. Seleccione la base de datos en tiempo real de bases avanzadas (firebase real-time database).

8. Necesitamos copiarnos el código secreto de la base de datos para la autenticación desde el Panel de configuración > Cuentas de servicio.>Mostrar

Una vez copiado la clave secreta ( que colocaremos en el código de arduino en #define FIREBASE_AUTH "XXXXXXXXXXX"), nos iremos a la opción de DataBase, y Realtime Database

Usar la configuración predeterminada para compartir datos de Google Analytics for Firebase , lo cual tendrá las siguientes consecuencias :
  • Compartir tus datos de Analytics con todas las funciones de Firebase
  • Comparte tus datos de Analytics con nosotros para ayudarnos a mejorar nuestros productos y servicios.
  • Comparte tus datos de Analytics con nosotros para habilitar el servicio de asistencia técnica.
  • Comparte tus datos de Analytics con nosotros para habilitar las comparativas.
  • Comparte tus datos de Analytics con los especialistas en cuentas de Google.
  • Aceptar las condiciones entre responsables del tratamiento de datos. Es obligatorio marcar esta casilla si vas a compartir tus datos de Analytics para mejorar los productos y servicios de Google. Más información

Asimismo tenemos dos opciones de modo de uso de la BBDD:en modo bloqueo o en modo de prueba para el caso que nos corresponde para probar la funcionalidad
Primeros pasos NodeMCU Firebase

Configurar el IDE de Arduino y base de datos de Firebase a trabajar juntos

Ahora que hemos realizado todos los procedimientos de configuración, vamos a comenzar la codificación del código que ejecutaremos en nuestro módulo NodeMCU

Para simplificar, vamos a escribir un código sencillo para encender y apagar el LED interno del NodeMCU aunque realmente seria exactamente el mismo código si decidimos usar alguno de los 17 pines de entrada y salida GPIO (de propósito general), pues simplemente tendremos que conectar un led entre masa y uno de los pines , cambiando la constante LED_BUILTIN por un valor entero del 0 al 16 correspondiente al número del puerto al que hayamos conectado el led.

El código empleado es el siguiente:

// By CRN mayo-2019

#include <ArduinoJson.h>

#include <ESP8266WiFi.h>

#include <FirebaseArduino.h>

#define FIREBASE_HOST "xxxxxxxxxxxxxxx.firebaseio.com"

#define FIREBASE_AUTH "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

#define WIFI_SSID "wwwwwwwwwwwww"

#define WIFI_PASSWORD "pppppppppppppppppppp"

{

Serial.begin(115200); //inicializa el puerto de salida a 115200

pinMode(LED_BUILTIN, OUTPUT); //configurar el puerto interno como salida
digitalWrite(LED_BUILTIN, HIGH); //enciende el led interno
// conectando a la red wifi.

WiFi.begin(WIFI_SSID, WIFI_PASSWORD); //conexión a la red wifi
delay(2000); //espera la conexión

Serial.println("Conectando...");

while (WiFi.status() != WL_CONNECTED) //bucle para esperar la conexión

{

Serial.println("."); //mientras pintamos un puntito que sacamos por consola

delay(3000);

}

Serial.println("Conectado"); // ya hemos conseguido conectar por wifi

Serial.println(WiFi.localIP()); // pintamos la ip asignada

// Configurando conexión a firebase

Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); //intentamos conectarnos a la base de datos Firebase con nuestras credenciales

} void loop() //bucle principal

{

//leer estado en Firebase el valor del registro led y observar que el valor recuperado al ser booleano se asigna directamente a la variables es booleana
bool isLedOn = Firebase.getBool("led"); // recuperamos el valor del objeto led de la sesión firebase

if (isLedOn) // condicional para decidir en función del valor recuperado de firebase si se enciende o no el led

{

digitalWrite(LED_BUILTIN, HIGH); //encendemos el led
Serial.println("LED ON ");
delay(2000);

}

else

{

digitalWrite(LED_BUILTIN, LOW); //apagamos el led
Serial.println("LED OFF");
delay(2000);

}

}

En el código anterior en primer lugar se incluyen las librerías necesarias para hacer toda gestión de conexión con Fireabase, así como las comunes de arduino para gestionar json y las propias del ESP8266

Después se definen cuatro variables de tipo constante para almacenar:

  • #define WIFI_SSID "Nombre de Router Wifi" Cambiaremos en esa a línea la red del router WiFi al que nos vayamos a conectar
  • #define WIFI_PASSWORD "Contraseña del Router" Cambiaremos en esa línea contraseña de su router WiFi
  • #define FIREBASE_HOST "xxxxxxxxx.firebaseio.com" Insertaremos quie elnombre de la instancia de Firebase asociada a su usuario, para ello haremos clic en base de datos ahora se verá el nombre de host .Pulsamos Mostrar en imagen.Copiar el nombre sin el" http://" en el código de Arduino
  • #define FIREBASE_AUTH "xxxxxxxxxxxxxxxxxxxxxxxxxxx"Insertaremos la palabra secreta de Forebase ,para ello iremos a Configuración > configuración del proyecto > cuentas de servicio > base de datos secreta .Copiar y pegar la palabra secreta en el código

Ahora toca inicializa el puerto de salida a 115200, ,configurar el puerto interno como salida enciende el led interno
Asimismo es necesario conectar la red wifi, que hacemos con un bucle para esperar la conexión mientras pintamos un puntito que sacamos por consola

La última parte del bloque de configuración es la conexión a firebase donde intentamos conectarnos a la base de datos Firebase con nuestras credenciales

LLegamos ahora al cuerpo principal (loop ) donde leeremos el estado en Firebase el valor del objeto led y actuaremos según su valor en el estado lógico de un pin del GPIO donde es interesante observar que el valor recuperado al ser booleano se asigna directamente a la variables que también es booleana.
La magia se hace justo con esta línea "bool isLedOn = Firebase.getBool("led"); " donde recuperamos el valor del objeto led de la sesión firebase

Finalmente mediante condicional decidiremos en función del valor recuperado de firebase si se enciende o no el led

Primeros pasos  con NodeMCU y Firebase

Este código , donde incluiremos nuestras credenciales del Firebase y de nuestra red wifi, lo subiremos desde el IDE de Arduino Programas > Subir y en seguida deberíamos ver el led interno luciendo o apagado en función del estado del objeto led en su base de datos Febase

Ahora intente cambiar el valor del objeto led en la base de datos a verdadero y falso. El led debería encenderse o apagarse en función del valor que hayamos seleccionado en el objeto led en Firebase .

Primeros pasos NodeMCU Firebase

Por supuesto puede ampliar este proyecto si decidimos cualquiera de los 17 pines de entrada y salida GPIO (de propósito general) asi como manejar estos mediante la creación de una aplicación web o móvil que accionará los puertos en lugar de cambiar manualmente el valor de la base de datos Firebase.

Además en este articulo hemos hablado de leer un objeto de Firebase desde un NodeMCU pero también es posible enviar datos desde la placa para salvarlos en Firebase y luego leer estos mediante una aplicación móvil o web, Sin duda el limite esta en nuestra imaginación ...


Volver a la Portada de Logo Paperblog