lunes, 14 de agosto de 2017

[ACTUALIZADO] Nodemcu + App Inventor + Firebase



Que tal queridos Arduineros, seguimos haciendo practicas con el maravilloso NODEMCU!!!

En esta ocasion haremos un pequeño sistema para monitorear 2 sensores conectados a la placa por medio de una aplicacion echa en APP INVENTOR y utilizaremos un servicio de Google de Base de Datos en tiempo real llamado FIREBASE, conforme pasa el post les dejare los enlaces necesarios para seguirla.

Cabe señalar que en este post no detallare la forma de usar el App Inventor solo comentare algunas cosas importantes. La verdad no soy ningun experto en el uso de esta plataforma, los conocimientos que tengo de ella son gracias a videotutoriales que sigo en el canal de un amigo MIRXTREM APPS en el cual habla detalladamente de el uso de App Inventor de una forma muy bien explicada, al final tambien dejare el enlace a su canal.

Bien vamos de lleno con la practica.

Materiales necesarios:
1 NODEMCU (yo en concreto uso la version 1.0).
1 LDR (fotoresistencia).
1 Resistencia de 220 ohms.
1 Sensor magnetico. (como este!)
Conexion WIFI.

Primero tenemos que ir a FIREBASE y loguearnos con una cuenta de gmail, en caso de no tenerla hay que crearla. Oprimimos el boton "Ira a la Consola".

Seguido de esto vamos a crear un proyecto nuevo oprimiendo "Add project"

En el cuadro que se despliega debemos elegir un nombre para nuestro proyecto y seleccionar la region en la que nos encontramos y oprimir el boton "Create Project".

 Ahora tenemos que cambiar las "reglas" de la Base de Datos ya que por default estan restringidas a solo usuarios autenticados, pero para efectos de esta practica no es necesario que sea asi. Para esto entramos a la BD (Base de Datos) oprimiendo el boton correspondiente.

 En la pestaña de reglas (rules) debemos cambiar lo que esta dentro de el recuadro negro por lo siguiente:
{
  "rules": {
    ".read": "true",
    ".write": "true"
  }
}
Al momento de cambiar las reglas tenemos que oprimir el boton "Publish" para que los cambios surtan efecto. En caso de que nos aparezca una leyenda advirtiendo que cualquiera podra leer y escribir en la BD solo damos clic al boton "Dismiss" y listo.

Hecho esto ya podemos leer y escribir en nuestra BD.
Por ultimo tenemos que copiar la URL de la BD para despues usarla en App Inventor y en el codigo de el Nodemcu, para esto regresamos a la pestaña "Data" y damos clic a la URL, copiamos con CTRL+C y pegamos en algun Archivo de texto para utilizarla posteriormente.

Listo, ya terminamos con la parte de Firebase, ahora continuemos con App Inventor.

Vamos a App Inventor siguiendo este ENLACE, igual que en Firebase tenemos que loguearnos con una cuenta de Google. Al momento de entrar nos mostrara la pantalla principal que es la de nuestros proyecto, damos clic a "Start new project"...
  Y escribimos el nombre de nuestro proyecto, tener en cuenta que no acepta espacios ni simbolos especiales.

A continuacion dejare una tabla con los objetos que agregaremos y las propiedades que hay que modificar(las propiedades que no se mencionen se quedan tal como estan).

Objeto Propiedades a modificar Valor
Screen1 AlignHorizontal Center:3
AlignVertical Center:2
BackgroundColor Black
Label1 FontSize 36
Text Luminosidad
TextColor White
Label2 FontSize 32
Text %
TextColor Cyan
Label3 FontSize 36
Text Estado del Sensor
TextColor White
Label4 FontSize 24
Text Desactivado
TextColor Orange
FirebaseDB1 FirebaseToken Se deja vacio
FirebaseURL Pegamos la URL de nuestra BD
ProjectBucket Se deja vacio
Button1 FontSize 46
Height y Width 100 pixeles
Shape oval
Text Se deja vacio

Este sera el aspecto final de la App antes de ejecutarla en el dispositivo movil.

Y estos son los bloques que utilizaremos. Son muy pocos ya que esta es una practica muy sencilla.
Hasta aqui terminamos con App Inventor, ahora seguiremos con el Nodemcu.

Diagrama de conexion.


Primero tenemos que descargarnos la libreria de Firebase, para eso pulsa sobre este ENLACE, una vez descargada la guardaremos en cualquier carpeta para despues ir al IDE de Arduino.

Abrimos el menu Programa - Incluir Libreria - Añadir librerias .ZIP...
Hecho esto nos abrira una ventana en donde tenemos que buscar el archivo .ZIP que descargamos anteriormente, lo seleccionamos y listo, ya tenemos agregada la libreria Firebase.

Para agregar la otra libreria (ESP8266WiFi.h), basta con seguir este sencillo TUTORIAL .

Seguido de esto vamos a agregar la placa Nodemcu para que aparezca en la lista de tarjetas del IDE de Arduino.

Vamos a el menu Archivo->Preferencias y veremos esta ventana:
En el cuadro te texto de la opción "Gestor de URLs Adicionales de Tarjetas" pondremos esta URL
http://arduino.esp8266.com/stable/package_esp8266com_index.json

Damos clic en Ok, y vamos a el menu Herramientas->Placa->Gestor de Tarjetas.

Para llegar a la siguiente ventana en la cual vamos a escribir en el cuadro de búsqueda "ESP8266" e instalaremos la placa que nos aparezca(en mi caso ya la tengo instalada es por eso que el boton me sale des-habilitado).

Después de que termine de instalarse podemos cerrar la ventana e ir a el menú Herramientas->Placa y al desplazarnos hacia abajo veremos que ya tenemos disponibles las placas de la familia ESP.

Y LISTO!!!. Ahora solo resta cargar el codigo que dejo a continuacion explicado linea por linea, para que surja la "magia".
int LDR = A0;

#include 
#include 

#define FIREBASE_HOST "nodemcu-5e733.firebaseio.com" //definimos el HOST al que se conectara el Nodemcu
                                                     //debemos quitar el "https://" y el ultimo "/" de la URL
#define WIFI_SSID "TU_WIFI" //Cambiar por el nombre de tu WIFI
#define WIFI_PASSWORD "TU_PASSWORD" //Cambiar por el Password de tu WIFI

void setup() {
  Serial.begin(9600);
  // conectamos el wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Conectado!");
  Firebase.begin(FIREBASE_HOST); //inicializamos la comunicacion con firebase

  pinMode(4, INPUT_PULLUP); //declaramos el pin de el Sensor como una entrada
}

void loop() {
  int luz = analogRead(A0); //Guardamos el valor de la LDR en la variable luz
  Firebase.setInt("luz", luz); //Mandamos el valor de la variable Luz a firebase como un entero.

  //Con este if decimos que si el sensor se activa nos mande un "1" a Firebase y si no nos mande un "0"
  if (digitalRead(4) == 0) {
    Firebase.setInt("Sensor", 0);
  } else {
    Firebase.setInt("Sensor", 1);
  }
  delay(500);
}

Abrimos el monitor serial y si todo ha salido bien veremos algo como esto:

Cuando se nos muestre "WiFi Conectado!" iremos a la consola de Firebase en la pestaña de Database y veremos algunos cambios.

Esto nos indica que ya hay comunicacion entre el Nodemcu y Firebase, ahora vamos a la aplicacion que emularemos en nuestro dispositivo por medio del "Companion" de App Inventor y veremos tambien los cambios.

Hasta aqui llega este post. Espero sea de su agrado y si tienen alguna duda comentenla para poder resolverla juntos.

Les dejo tambien el Videotutorial!!!


Descargas...
Proyecto App Inventor
Codigo Nodemcu
Companion APK 
Libreria Firebase ACTUALIZADA.

32 comentarios:

  1. Felicidades! muy bueno, aplica con arduino uno?

    ResponderBorrar
    Respuestas
    1. Gracias bro, Si aplica. Arduino UNO y un Etherneth Shield o el Esp8266-1

      Borrar
    2. Hola, yo he tratado de hacer un programa parecido con el Arduino Uno y el Ethernet Shield pero cuando trato de compilar me aparece el error no such file or directory y para probar cambié la placa en la ide por una 8266 genérica y la compila sin problema alguno, estás seguro de que el firebase funciona con la placa de Arduino Uno ? Ya lo has probado ? Gracias de antemano y espero tu respuesta

      Borrar
    3. Hola, si funciona con arduino uno y el esp8266-01, ya que se utiliza la misma libreria para firebase, con el ethernet shield no he visto nada

      Borrar
  2. Hola te felicioto por este tutorial, esta muy bueno... lastima que ha mi no me conecto nada con nada.... pero la sola idea de saber que se pueden hacer cosas como estas ya para mi es suficiente... LO FELICITO

    ResponderBorrar
    Respuestas
    1. Gracias.
      Si pudieras detallar el problema con gusto lo resolvemos.

      Borrar
    2. Buenas tardes, de nuevo retome este proyecto, ya entiendo un poco mas acerca del tema. ya la base de datos me reconoce el sensor de luz, pero el magnetico (INPUT_PULLUP) no. pero de todas formas gracias por compartir su conocimiento y tiempo con nosotros

      Borrar
  3. Saludos, he seguido al pie de la letra las indicaciones, en cuanto al sketch de arduino, loguearme en mi Wifi local, pero la pagina de DATOS del FIREBASE no tiene comunicación con el NODEMCU y no adquiere ningún dato. No entiendo cual es el problema.

    ResponderBorrar
    Respuestas
    1. Fijate en las reglas... Tienen que ser Read: true y Write: true sin comillas

      Borrar
  4. He encontrado la solución después de mucho buscar... está solucionada en https://forum.arduino.cc/index.php?topic=495817.0
    ;-)

    ResponderBorrar
  5. buenas, a mi no me aparecieron los cambios en firebase despues de que apareciera contectado, y la app de companion no funciona al 100, que puede ser?

    ResponderBorrar
    Respuestas
    1. Hola, gracias por comentar!!
      El problema es que la libreria de Firebase que subi al momento de hacer el post ya esta desactualizada.
      Acabo de actualizar el link que podras encontrar al final del post.
      Y respecto a lo del companion te recomiendo bajarlo directo del PlayStore ya que tambien hace poco tuvo una actualizacion.
      Saludos!!

      Borrar
  6. hola he actualizado la libreria firebaseArduino.h pero no hay respuesta no conecta NODEMCU con FIREBASE

    ResponderBorrar
    Respuestas
    1. Hola
      Puedes compartir el codigo para descartar problemas

      Borrar
    2. Para los que no le conecta el DataBase. Lo que tiene que hacer es actualizar la linea de codigo de la libreira FirebaseHttpClient.h, por este:

      static const char kFirebaseFingerprint[] = "B8 4F 40 70 0C 63 90 E0 07 E8 7D BD B4 11 D0 4A EA 9C 90 F6";

      Al parecer hubo cambios en Firebase.

      Borrar
  7. Para los que no le conecta el DataBase. Lo que tiene que hacer es actualizar la linea de codigo de la libreira FirebaseHttpClient.h, por este:

    static const char kFirebaseFingerprint[] = "B8 4F 40 70 0C 63 90 E0 07 E8 7D BD B4 11 D0 4A EA 9C 90 F6";

    Al parecer hubo cambios en Firebase.

    ResponderBorrar
  8. Buenas, tengo un problema a la hora de conectar el arduino y es que me da un error:

    warning: espcomm_sync failed
    error: espcomm_open failed
    error: espcomm_upload_mem failed
    error: espcomm_upload_mem failed

    Me podrías decir a qué se debe?
    Un saludo

    ResponderBorrar
    Respuestas
    1. Hola. Gracias por comentar.
      Ese error parece de comunicacion con la placa.
      Si tienes los drivers instalados?

      Borrar
  9. Excelente tu vídeo y toda tu información, te felicito, a ese código que subiste como le puedo agregar un botón de encendido y apagado para un led, espero y me puedas apoyar


    saludos

    ResponderBorrar
    Respuestas
    1. Hola. Gracias por comentar!!
      En el lado de App Inventor hay un bloque de firebase que se llama store value. Es cuestion de que agregues un boton que sl hacer click guarde un valor en firebase con este bloque. Del lado de Arduino la libreria tiene la instruccion getInt o getString, esta sirve para leer un valor de firebase.
      Esto lo metes dentro del loop y que cads cierto tiempo este checando el dato. Y ahi programas lo que quieras como encender el led.
      Saludos!!

      Borrar
  10. Conseguí solucionar mi error. Ahora estoy probando a usar un sensor de vibración sw-420 nc en vez del sensor de iluminación. Pero el sensor me falla y siempre me marca 0. Estoy usando el código:

    int ledPin = 13;
    int EP =2;

    void setup(){
    pinMode(ledPin, OUTPUT);
    pinMode(EP, INPUT);
    Serial.begin(9600);
    }
    void loop(){
    long measurement =TP_init();
    delay(50);
    Serial.println(measurement);
    if (measurement > 1000){
    digitalWrite(ledPin, HIGH);
    }
    else{
    digitalWrite(ledPin, LOW);
    }
    }

    long TP_init(){
    delay(10);
    long measurement=pulseIn (EP, HIGH);
    return measurement;
    }


    Me podrías ayudar a solucionarlo?
    Un saludo

    ResponderBorrar
  11. ME FUNCIONA A LA PERFECCION, EXELENTE APORTE PARA MIS PROYECTOS FELICITACIONES Y GRACIAS X COMPARTIR..!!!

    ResponderBorrar
  12. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  13. WiFi Conectado! ok ama fakat frebase baglantı yok hata

    ResponderBorrar
  14. Hola buenas tardes!!! Hay que cambiar el "FirebaseToken" dentro de app inventor para que enlace con firebase??? Saludos

    ResponderBorrar
  15. hola buenos dias un saludo muy especial y primero darte las gracias por tomarte el tiempo para realizar estos tutoriales tan completos
    quiciera hacerte una pregunta estoy utilizando el esp32 y me envia este error


    Arduino:1.8.7 (Windows 10), Tarjeta:"ESP32 Dev Module, Disabled, Default, QIO, 80MHz, 4MB (32Mb), 115200, None"

    C:\Users\User\Documents\Arduino\hardware\espressif\esp32\libraries\firebase-arduino-master\src\FirebaseHttpClient_Esp8266.cpp:8:25: fatal error: ESP8266WiFi.h: No such file or directory

    Se encontraron múltiples librerías para "WiFi.h"
    compilation terminated.

    Usado: C:\Users\User\Documents\Arduino\hardware\espressif\esp32\libraries\WiFi
    No usado: C:\Program Files\Arduino\libraries\WiFi
    exit status 1
    Error compilando para la tarjeta ESP32 Dev Module.

    Este reporte podría tener más información con
    "Mostrar salida detallada durante la compilación"
    opción habilitada en Archivo -> Preferencias.


    cualquier información te lo agradecería
    att: fernando sanchez
    fernandosanchez248@outlook.es

    ResponderBorrar
    Respuestas
    1. Buen Día, encontraste la solución a este problema? tengo el mismo error. Gracias.

      Borrar
  16. Excelente tutorial felicidades, ayuda por favor, si quisiera unsae mi NodeMCU con 2 pulsadores, firebase y app inventor, como mandaría un string o(Me llamo NodeMCU) y el otro botón un (bienvenido), con y sin firebase? Te agradecería mucho

    ResponderBorrar
  17. Excelente tutorial felicidades, ayuda por favor, si quisiera unsae mi NodeMCU con 2 pulsadores, firebase y app inventor, como mandaría un string o(Me llamo NodeMCU) y el otro botón un (bienvenido), con y sin firebase? Te agradecería mucho

    ResponderBorrar
  18. Muy buen aporte, tengo un problema cuando cargo el programa a la tarjeta nodemcu me aparece el siguiente error en el monitor serie del programa Arduino.
    .............
    WiFi Conectado!!!

    Exception (29):
    epc1=0x4000e1b2 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000004 depc=0x00000000

    ctx: cont
    sp: 3fff0b40 end: 3fff1130 offset: 01a0

    >>>stack>>>
    3fff0ce0: 3fff00b8 00001441 00001441 40224d2f
    3fff0cf0: 00000208 3fff5d6c 3fff8304 40224ec8
    3fff0d00: 00000104 00009ff8 000013ff 3fff5d6c
    3fff0d10: 00000040 00000082 3fff82ec 4022517a
    3fff0d20: 00800000 00000080 00000000 00000041
    3fff0d30: 00000040 0000003f 40206f2c 00000041
    3fff0d40: 3fffb634 3fff5d6c 3fff233c 3fff22dc
    3fff0d50: 3fffbb48 ffffffff 3fff5d6c 3fff5d6c
    3fff0d60: 00000040 3fff5d6c 3fff82ec 3fff5d6c
    3fff0d70: 00000040 3fff5d6c 3fff82ec 40225cd6
    3fff0d80: 3fff24fc 0000003f cfd1ad48 00000001
    3fff0d90: 3fff5d6c 3fff82d4 3fff82ec 00000001
    3fff0da0: 00000010 3fff5d6c 0000000f 40225f31
    3fff0db0: 3fff233c 3fff252c 0000000f 00000001
    3fff0dc0: 00000001 3fff230c 3fff89c7 40224d94
    3fff0dd0: 00000100 3fff200c 3fff8907 00000000
    3fff0de0: 00000100 3fff200c 3fff8907 40226fbd
    3fff0df0: 3fff0e20 00000000 000000d0 00000030
    3fff0e00: e33e1d61 2352453d 3e61befc 00000004
    3fff0e10: 00000004 3fff317c 3fff8901 402230c8
    3fff0e20: 3b8b0203 81c46f55 50e535e8 6a8d3ca2
    3fff0e30: 6fdb9563 8c0c6102 30659788 ca2cef97
    3fff0e40: a38c110e 612b731e 866657b8 1d61d6fe
    3fff0e50: 00000004 3fff8901 3fff317c 402234c9
    3fff0e60: a81040ea 743e5abe e277bd7a 3fff5b04
    3fff0e70: 00000000 00000004 00000004 402044df
    3fff0e80: 3fff8905 3fff8901 3fff324c 00000880
    3fff0e90: 00000905 3fff91db 0000002a 00000004
    3fff0ea0: 3fff317c 3fff8901 00000004 00000004
    3fff0eb0: 00000004 3fff8901 3fff317c 40222ec0
    3fff0ec0: 00000000 3fff8901 3fff317c 40223268
    3fff0ed0: 0000001b 3fff24d4 0000001c 401004d8
    3fff0ee0: 3fff0f30 0000000e 00000010 00000000
    3fff0ef0: 3fff219c 3fff24d4 3fff317c 01000000
    3fff0f00: 3fff0f30 3fff1ad4 3fff317c 40223018
    3fff0f10: 402042f0 00000000 3fff0110 00001387
    3fff0f20: 00020dce 3fff1ad4 3fff57d4 40204981
    3fff0f30: 000001bb 3fff30c4 3fff1ad4 40203d6e
    3fff0f40: 5561c923 00000000 3fff1af4 3fff7ab0
    3fff0f50: 000001bb 3fff1ad4 3fff24d4 40204cd5
    3fff0f60: 3ffe95b8 5561c923 3ffe95b8 5561c923
    3fff0f70: 3fff1f0c 00000000 3fff1f10 40205414
    3fff0f80: 00000000 00000533 00000533 40206d2c
    3fff0f90: fffffffd 00000001 3fff1f10 40205be4
    3fff0fa0: 3ffe9158 0000000c 3ffe8f33 40202dff
    3fff0fb0: 3fff43ec 3fff1020 3fff1f0c 40202e58
    3fff0fc0: 3fff43f8 00000000 00000000 3ffe8f30
    3fff0fd0: 3fff1f0c 3fff1000 3ffe8f30 3ffe8f30
    3fff0fe0: 3fff1f0c 3ffeffa8 3fff1090 402036e2
    3fff0ff0: 3ffeff8c 3ffeffa8 3fff1090 402025ab
    3fff1000: 3fff43f8 3fff57ec 00000001 401004d8
    3fff1010: 3fff00b8 3fff1100 00000000 40206d2c
    3fff1020: 3fff1ac0 3fff0031 3fff1f10 40202ceb
    3fff1030: 00000000 3fff109c 3fff10c4 3fff10c8
    3fff1040: 402036cc 3fff10e0 3fff106c 40202b94
    3fff1050: 3fff00b8 3fff1100 3ffeff88 3fff0104
    3fff1060: 3fff10e0 3fff1100 3fff1090 40202772
    3fff1070: 3fff1f0c 3fff1100 00000000 4010053d
    3fff1080: 4023dbc9 3fff1100 3ffeff88 402034c7
    3fff1090: 3ffe8f88 3fff1f0c 00000000 3ffeffa8
    3fff10a0: 3ffeffa8 3ffe8f60 3fff1100 00000000
    3fff10b0: 00000100 00000006 3fff57ec 0000000f
    3fff10c0: 00000001 3fff7ab0 3fff2330 40206419
    3fff10d0: 3fffdad0 00000001 3ffeff88 40203521
    3fff10e0: 00000004 00000001 000001f4 4020633c
    3fff10f0: 00000000 00000001 3ffeff88 402022de
    3fff1100: 3fff44bc 0000000f 00000006 40206f4d
    3fff1110: 3fffdad0 00000000 3fff00fc 40206f78
    3fff1120: feefeffe feefeffe 3fff0110 40100718
    <<<stack<<<

    ResponderBorrar