En esta sencilla práctica, vamos a integrar tres componentes ( firebase, app inventor y NodeMcu ) para encender una bombilla en remoto.
Recordemos que en redes se habla de local cuando los dispositivos están todos en la misma red ( por tanto no necesitamos salir fuera y no necesitamos conexión a internet ) y en remoto cuando los dispositivos están en diferentes redes ( es necesario Internet para comunicarse )
Lo haremos desde los conocimientos básicos de los alumnos de grado medio del ciclo de Instalaciones de teleco
Será una práctica tutorada donde el alumno debe seguir los pasos indicados, pero además, indagar en los problemas que vayamos encontrando
Vamos a los pasos necesarios
1º Creamos la base de datos. Firebase es una aplicación en línea que funciona como base de datos en tiempo real y que además es muy fácil de crear y configurar. Tan sólo tenemos que ir a su página web ->https://firebase.google.com/ , luego ir a consola ( arriba a la derecha ) y crear proyecto.
Nos pide el nombre del proyecto, por ejemplo bombilla, y luego en continuar.
En el siguiente paso, nos pegunta por Google Analytics para tu proyecto de Firebase. Desactivamos esta opción
Al continuar, empezará la creación de la base de datos. Una vez dentro, pinchamos en Realtime Database y luego en el botón Crear una base de datos. NO va a pedir la ubicación, y seleccionamos Belgica. Luego el modo, donde está seleccionado el modo bloqueo.
Modo bloqueo significa que De forma predeterminada, tus datos son privados. Lo seleccionamos.
Una vez dentro, pinchamos en Reglas y cambiamos false por true, como se indica en imagen inferior
En la pestaña Datos, encontraremos la url de nuestra base de datos. Por ahora es suficiente. Pasaremos ahora a crear la App
2º Como siempre, abrimos nuetro app inventor y crearemos el proyecto Bombilla
Tenemos que incluir dos botones, que harán la tarea de encender y apagar la bombilla. Para que resulte más vistoso y nos recuerde cómo está la bombilla, al hacer click en el botón encender, el fondo del la pantalla cambiará a verde y en caso de activar el botón apagar, el fondo cambiará a apagado.
Cada uno de los botones los tenemos que renombrar. Por ejemplo, cuando aparece el botón 1 , con su texto, hay que cambiarlos a Encender y el texto también encender. Lo mismo para apagar
Una segunda tarea que vamos a incorporar es cambiar el valor del campo LUZ de la base de datos para que , según el botón que se active, se ponga a 0 o a 1
Para actuar sobre la base de datos tenemos que incorporarla a nuestra app. Para ello, seguimos los pasos que se indican en la siguiente imagen
la base de datos la tenemos que arrastrar al móvil y luego configurarla como se indica. En url ponemos nuestra base de datos y lo demás quedará tal como se muestra
Los bloque que tenemos que poner quedará de la forma:
Ya sabemos la primera parte. Lo que añadimos ahora es llamar a la base de datos y guardar un valor. La etiqueta la hemos llamado luz y el valor 1 para encendido y 0 para apagado
Procedemos como se indica todos los pasos y vamos a nuestra firebase a ver si con nuestra app se cambian los valores del campo luz.
Qué ocurre ?.
Funciona, pero hay algún cambio nuevo ?.
Tener en cuenta que en firebase, tenemos que pinchar en la base de datos para que se abra los campos que tiene en su interior
3º El tercer paso es conectar nuestro NodeMcu para que lea los datos de la base de datos y active un puerto de los muchos que tiene. Ese puerto tendrá una salida alta, que activará un relé cuyos contactos dejará pasar la corriente para alimentar una bombilla de 220 Voltios.
Vamos a ello.
Hay tres bloques importantes, que podemos resumir brevemente en:
Antes de seguir veamos el Error de conexión de firebase
De modo resumido, conectamos a la base de datos con protocolo la base de datos https y en el mismo tenemos un certificado de seguridad que se llama Fingerprint ( huella dactilar )
Para entrar en la base de datos necesitamos esa huella, huella que tenemos que incluir en el archivo FirebaseHttpClient que lo encontramos en la ruta -> Documents\Arduino\libraries\firebase-arduino-master\src
Abrimos ese archivo y en la parte inferior tenemos algo como :
static const char kFirebaseFingerprint[] = "54:11:BF:7D:0C:82:E0:9C:C7:B2:F5:74:29:D5:91:B5:10:1B:30:DE";
Esa es la fingerprint que tenemos que cambiar. Para ello, copiamos la url de la base de datos y la ponemos en la casilla Custom Site Fingerprinting dentro de la página ->https://www.grc.com/fingerprints.htm
El valor hexadecimal que resuelva es el que tenemos que poner en la líne anteriorstatic const char kFirebaseFingerprint[] . Luego guardamos, cerramos arduino y volvemos a cargar nuestro programa. Mas info en ->https://www.youtube.com/watch?v=ZZ5JvSA-Ed8
Vemos ahora el programa para entrar en NodeMcu
// Entramos las librerías necesarias
#include <ESP8266WiFi.h> // Incluimos la librería para la conexión WIFI
#include <FirebaseArduino.h> // Librería para la conexión de la base de datos de firebase. Tenemos que hacer los cambios antes explicados
#define WIFI_SSID "Nombre de la red" // nombre del wifi
#define WIFI_PASSWORD "clave de la res" // password del wifi
#define FIREBASE_HOST "bombilla-ace15358-default-rtdb.europe-west15.firebasedatabase.app" //poner direccion de la database de Firebase sin https:// ni el ultimo /
#define FIREBASE_AUTH "2DpFeLMf7KA0trsdfsdfRMzfJIGpQlhoe9okg8lDP"// poner código secreto. Este código lo tenemos en Configuración -> proyecto-cuentas -> servicio-secretos de la base de datos
int ledPin = 13; // Definimos el puerto 13 con la variable ledPin.
String encendido; // creamos la variable de tipo string ( cadena ) con el nombre encendido
// ahora empieza la parte de setup
void setup() {
Serial.begin(9600); // activamos el puerto serie a 9600 bits por segundo.
Velocidades superiores pueden dar problemas a la hora de leer la consola
pinMode(LED_BUILTIN, OUTPUT); // LED_BUILTIN es el led de la placa. Lo
ponemos como salida
pinMode(ledPin, OUTPUT); Nuestro puerto 13 también lo
ponemos como salida
// Ahora vamos con la conexión a la red WIFI
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // se inicia la conexión con la ssid y
la clave
Serial.print("Conectando a la red"); // imprimimos por consola
la frase "Conectando a la red".
while (WiFi.status() != WL_CONNECTED) {
// Mientras no se conecta, mostramos un punto y se espera 500 milisegundos
Serial.print(".");
delay(500); // en esta línea es donde se pone el
tiempo de espera entre cada intento de conexión a la red
}
Serial.println(); // Se imprime línea en blanco
Serial.print("Conectado: ");// se imprime Conectado
Serial.println(WiFi.localIP()); // Se imprime la dirección IP que nos ha
dado el router en la conexión
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); //
Ahora toca la conexión a la base de datos, con la dirección url y clave que
hemos añadido antes
}
void loop() {
// La siguiente parte nos mostrará un error si no
conseguimos conectar a la base de datos
if (Firebase.failed()) {
Serial.print("Hay problema en la conexión de firebase");
Serial.println(Firebase.error());
delay(500);
return;
}
encendido = Firebase.getString("Bombilla/luz");
// asignamos a la variable encendido, el valor del campo luz que
tomamos al conectar con la base de datos dentro de Bombilla
// podemos simplificar esto como encendido = Firebase.getString("luz"), pero en el campo "ProjectBucket" de firebaseDB1 de app inventor, tendríamos que dejar ese campo en blanco
delay(1000); // demoramos el programa 1000 milisegundos
if (encendido =="1" ) // Comprobamos si el valor encendido está a 1
{ Serial.println("Se debe encender la luz: "); // imprimimos por consola
ese texto de encender la luz
digitalWrite(LED_BUILTIN, LOW); // ponemos el valor de ese diodo de la
placa a low ( veremos que se enciende por el tipo de conexión que tiene.
NO entramos en detalles
digitalWrite(ledPin, HIGH); // ponemos a alto el valor de ledPin, por
tanto, tendremos la tensión que alimentará el relé. La luz se enciende
delay(200); // esperamos 200 milisegundos
}
else { // si no ocurre lo anterior, entonces tenemos que apagar la luz
Serial.println("Luz apagada: ");
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(ledPin, LOW); // aquí es donde ponemos en bajo el valor del
puerto 13, dejando de alimentar el relé y desactivando la bombilla
}
}
3º Comprobamos que todo está bien. Conectamos nuestra app en el móvil, cambiamos la base de datos de 0 a 1 y comprobamos que nuestro led de la placa se enciende. Conectamos nuestro relé para encender una bombilla de 220 voltios.
El relé es ampliamente usado para diversos fines, siempre con el fin de controlar grandes corrientes mediante pequeñas corrientes.
En la imagen de la izquierda, al presionar el pulsador, pasa una corriente por la bobina que genera un campo magnético que desplaza ( por un mecanismo que no aparece en la imagen ) el contacto C ( común ) al contacto NO ( normalmente abierto) y de esa forma, pasar una gran corriente que permite alimentar a la bombilla.
El esquema de conexión y más detalles sobre el relé lo podemos encontrar en esta página->https://programarfacil.com/blog/rele-y-arduino-mkr1000/
Si llegamos a éste punto y bajamos los archivos, significa que ha pasado el tiempo de hacer la tarea y tomamos la base que dejo en los link.
Solución, o casi, porque el proyecto sigue y hay que mejorar o modificar acorde a las diferentes exigencias.
Diseño PCB Principios básicos de antenas