Cómo crear un sensor de lluvia DIY (Parte II)
- Tutorial paso a paso para crear desde cero un sensor de lluvia DIY integrable en un sistema domótico. Segunda entrega: Preparación de la tarjeta ESP8266.
Segunda entrega de nuestra serie de artículos sobre cómo crear desde cero un sensor de lluvia integrable en sistemas domóticos (concretamente en el Home Center 2 de Fibaro). Si te perdiste la primera entrega, aquí la tienes.
Hoy abordamos el capítulo 2 de nuestro índice de contenido, referente a la preparación de la ESP8266.
Este capítulo será más largo que el primero de introducción. ¿Preparad@s? Vamos allá…
Recordad que si tenéis consultas o preguntas, podéis plantearlas en los comentarios de cada post y/o en nuestro foro.
2. Preparación de ESP8266
Comencemos por los más complicado, así luego todo será mas fácil. 😉
Para conseguir que nuestro chip quede en suspenso la mayor parte del tiempo, éste tiene que entrar en un estado conocido como DEEP_SLEEP y luego despertar cuando sea conveniente. Para esto necesitamos que dos terminales estén conectados: EXT_RSTB y D0. El problema es que uno de estos terminales no se encuentra cableado al conector al que tenemos acceso y tendremos que hacerlo nosotros soldando un puente.
Os recomiendo que leáis este tutorial.
Ahora os explico cómo lo he hecho yo:
De un cable multihilo, debéis sacar un único hilo. Es importante encontrar un hilo de cobre no demasiado fino ni demasiado grueso.
Dar un toque de estaño en la punta (casi nada), lupa, pinzas de relojero, pulso y paciencia, nunca sale a la primera.
Comenzad por el integrado, acercando la punta del hilo con ayuda de las pinzas. Nunca debéis acercar la punta del soldador directamente al integrado. Hay que soldar calentando el hilo cuando la punta esté tocando el pin.
Notaréis cuando queda sujeto al tacto. Con cuidado id doblando con la pinza hasta llevar al pin marcado del conector y cortad el sobrante. Con cuidado fijad con pegamento tipo super-glue y terminad soldando al terminal EXT_RSTB.
Tres imágenes valen más que cien palabras:
2.1 Cargando el firmware
Éste es un buen momento para cargar el firmware que gestionará nuestro sistema de detección de lluvia, así podremos comprobar si la preparación de la ESP ha sido correcta.
Este programa se encargará de poner nuestra tarjeta en modo DEEP_SLEEP y despertar únicamente cuando detecte lluvia, manteniendo un chequeo cada cierto tiempo hasta que deje de llover enviando de nuevo a dormir al sistema hasta el próximo chaparón. Asímismo, será el encargado de enviar al controlador domótico los valores que indican el cambio de estado lluvia/seco y la medición de carga de batería, además de disparar una escena, lo que permitirá desde el controlador realizar acciones en relación con la información recibida.
Para cargar el firmware, nos hará falta utilizar un adaptador USB a FTDI.
El chip ESP tiene dos modos de funcionamiento: UART y FLASH. Usaremos el modo UART para la carga del programa en la memoria del ESP.
Cuando queremos cargar un programa en el ESP, debemos encenderlo teniendo el pin GPIO0 a nivel bajo (LOW = 0V = GND) y el GPIO2 a nivel alto (HIGH = 3,3V =Vcc). El pin GPIO2 está por defecto a HIGH, ya que tiene un pull-up interno, por lo que podemos dejarlo simplemente desconectado, pero el pin GPIO0 tendremos que puentearlo a GND para poder cargar el frmmare.
Modo FLASH: ejecución de programa en el ESP.
Una vez cargado el programa, hay que ejecutarlo: esto lo conseguimos teniendo el GPIO0 y el GPIO2 a nivel alto (3,3V).Tanto el GPIO0 como el GPIO2 están por defecto a HIGH, ya que ambos tienen un pull-up interno, por lo que podemos dejarlos simplemente desconectados.
He puenteado GPIO0 y GND en el adaptador FTDI usando un puente que se puede retirar, de forma que se pueda poner y quitar para pasar de modo UART a modo FLASH según nos convenga.
2.1.1 Arduino IDE
Para cargar el programa necesitaremos un entorno de desarrollo capaz de compilar el firmware para nuestra tarjera ESP. Usaremos Arduino IDE. Seguid las indicaciones de la pagina para descargar e instalad dependiendo del sistema operativo que tengáis.
Una vez instalado, necesitaremos asegurarnos de que tenemos el driver adecuado para nuestro interfaz serie “usbserial1430”. A continuación, arrancamos el IDE Arduino.
En el menú “Preferencias”, añadiremos la URL para la carga de librerías adicionales para nuestra tarjeta ESP.
Cortamos y pegamos esta URL en la opción “Gestor de URLs Adicionales de Tarjetas”:
http://arduino.esp8266.com/stable/package_esp8266com_index.json.
Ok para grabar, y listo.
Pinchamos nuestra ESP en el adaptador y éste al puerto USB del ordenador.
Si todo es correcto, en el menú “Herramientas->Puerto” podremos escoger el puerto al que hemos conectado la ESP.
Y en “Herramientas->Placa”, escogemos la tarjeta adecuada.
El código correspondiente al programa se indica un poco más adelante, pero antes de copiarlo dentro de la IDE de Arduino, debemos hacer alguna tarea.
Como comentamos al principio, en este tutorial haremos la integración con Fibaro HC2. Éste es el momento de crear una escena usando la opción “Agregar escena en LUA” en el HC2.
Por el momento, dejaremos sin modificar el espacio destinado al código LUA y procederemos a guardar la escena vacía (podemos ponerle un nombre). Lo importante es anotar el ID que se le ha asignado a la escena.
Tendremos que adecuar el código que usaremos como firmware de la tarjeta ESP modifcando las líneas siguientes adaptándolas a nuestra instalación.
Para calcular la HCBasicAuth, hay que usar la cadena “usuario:contraseña” y cifrarlo en base64.
La apiURL en la dirección de la API REST del HC2, sustituye la ip por la de tu controlador Home Center.
HCVarName, indica el nombre de la variable que se creará automáticamente en el controlador para almacenar la información del sensor de lluvia.
Debemos indicar en sceneID el iD de la escena que acabamos de crear en el controlador, que se lanzará cuando se produzcan cambios en el estado del sensor.
El nombre de nuestro SID WiFi en mif_ssid y la contraseña en mif_passmd.
Ahora sí, una vez sustituidos los valores de las variables, hay que copiar y sustituir el código dentro del IDE de Arduino. A continuación, podemos ir al menú “Archivo -> Salvar” y guardar nuestro programa.
Para cargar el firmware en la tarjeta ESP, hay que ir a “Programa -> Subir”. Esto compilará y subirá el firmware a la memoria de nuestra tarjeta ESP.
Aquí tenéis el archivo para cargar en la tarjeta ESP (para descargar el archivo, debes ser usuario de nuestro foro. Si no lo eres, ¡súmate!)
Si todo ha ido bien, veremos algo así en la interfaz Arduino:
Si falla tendremos mensajes del tipo:
En ese caso desconectad el adaptador, aseguraos de que está bien el puente y volved a conectar. Puede que tengamos que desconectar/conectar alguna vez hasta que funcione. Si no funciona, probad a salir y entrar a la IDE de Arduino.
Con el 100% cargado, podemos chequear si el cable que soldamos en la preparación de la tarjeta es correcto.
Desconectamos el adaptador del ordenador y soltamos el puente entre GPIO0 y GND. Volvemos a conectar el adaptador con la ESP al ordenador y en el menú de IDE de Arduino vamos a la opción “Herramientas->monitor serie”.
Se abrirá un monitor por el que aparecerán los mensajes enviados desde la tarjeta ESP por el puerto serie USB. Dejamos un par de minutos ejecutando y deberemos observar cómo cada minuto aparecen mensajes indicando que la tarjeta se está reiniciando.
Puede ser que en alguno de los mensajes aparezcan mensajes de error que no debemos tener en cuenta. Se deben a que la tarjeta está intentando crear la variable en el controlador HC2 y ésta ya se encuentra creada. Es el funcionamiento normal, los nuevos valores para almacenar en la variable se envían cuando desde el firmware se detecta este código de error.
Lo importante es comprobar que la tarjeta se reinicia cada minuto. Eso es señal de que el cable que soldamos en el proceso de preparación está correctamente conectado.
Tendremos que volver a cargar el firmware modifcando el parámetro que hace que la tarjeta se esté reiniciando cada minuto. Para ello, en el editor del IDE de Arduino, modifcamos la línea 27:
sustituyendo 60e6 por 0.
De forma análoga a como cargamos el firmware la primera vez, procedemos a volver a cargar, ahora con la modifcación efectuada. Cuando hayamos conseguido cargar el nuevo frmmare, podemos desconectar el adaptador USB y quitar la tarjeta ESP, que habrá quedado totalmente configurada.
La próxima semana publicaremos la tercera entrega del tutorial. No os lo perdáis.
Y para jeedom podría ser??
Podría ser, habría que cambiar el código para que enviara los comando adecuados a la API JSON de Jeedom y preparar una escena o dispositivo virtual para ejecutar las acciones deseadas.
Un ejemplo de algo parecido en jeedom
https://projetsdiy.fr/envoyer-donnees-jeedom-api-json-http-esp8266/#Recuperer_votre_cle_API_Jeedom
La placas basadas en ESP8266 se pueden integrar en Cayenne. Cayenne es una plataforma de IoT que permite integrar en un mismo entorno distintos dispositivos y una vez integrados ofrece “Triggers” para integrarlos en otros sistemas mediante HTTP Request. Es muy sencillo. Sería una buena vía de integración en Jeedom/eedomus u otros controladores sin picar código, aunque dependiendo de una plataforma externa. Pero Cayenne ofrece muchas cosas interesantes, creo que puede merecer la pena: https://cayenne.mydevices.com/