ESP8266 y Notify My Android. Una buena pareja (Parte I)

Una de las cosas preferidas por toda persona que está sumergido en el mundillo de la electrónica es ver como algo tan insignificante, como puede ser el cambio de estado de un interruptor, puede provocar una sucesión de acontecimientos que desemboquen, por ejemplo, en una notificación en nuestro teléfono móvil. Pensando en esto último son numerosas las aplicaciones que se me están ocurriendo mientras escribo este artículo, así que mostraré los pasos iniciales para poderlas llevar a cabo.

ESP866 NMA

Para empezar, los ingredientes:

  • Módulo ESP8266.
  • Tener una cuenta en NotifyMyAndriod. Si es Premium (5$), mejor que mejor, ya que en la versión Free sólo nos permite enviar 5 notificaciones al día.
  • Convertidor USB-RS232 (TTL) con niveles de salida a 3.3V
  • Cualquier monitor RS232. En mi caso utilizo el Termite

Empezaremos por crear una cuenta en Notify My Android. El registro es como el de cualquier web, así que no merece la pena ni explicarlo. Una vez registrado, nos logueamos con nuestro usuario y nos vamos a la pestaña de My account. Aquí generaremos la API que después se empleará para enviar la notificación. Se le puede poner un nombre cualquiera, ya que es sólo indicativo.

notify my android

Ahora nos descargamos en nuestro teléfono móvil la aplicación de Notify My Android. La instalamos y nos logueamos con el nombre de usuario que usamos al registrarnos en su web.

El siguiente paso es conectar el ESP8266 al PC, y para ello yo uso un convertidor USB a RS232 con niveles de salida a 3.3V (recordemos que el ESP8266 trabaja a 3.3V).

adaptador

Este convertidor en concreto se puede encontrar en Ebay a un precio bastante reducido. He de decir, que el circuito integrado que llevaba el que yo compré se rompió al poco uso ya que era una falsificación, por lo que compré uno original y se lo cambié. Algún día explicaré como identificarlos fácilmente.

La conexión del convertidor al ESP8266 es muy sencilla:

ESP8266_pinout

 

Para realizar la conexión yo empleo cables tipo Dupont.

cables dupont

A primera vista, parece raro el empleo de la línea DTR. Explico el por qué la he usado. En el ESP8266 es necesario que la entrada CH_PD esté a nivel alto (3.3V) para que el módulo esté habilitado y podamos hacer uso de él. Como el control de la comunicación RS232 que se emplea es por software (en lugar de hardware) los pines CTS, RTS y DTR del convertidor no se usarán, y como el pin DTR siempre está a nivel alto, es por ello por lo que lo uso para habilitar el CH_PD. Lo correcto es conectar el pin CH_PD directamente a VCC, pero ese día no tenía a mano el soldador, así que lo hice así y de momento así sigue. Y lo último y lo más importante antes de conectar el convertidor a un mini USB, colocar el jumper en la posición de 3.3V.

Una vez interconectados, ya se puede conectar a un puerto USB. Si es la primera vez que se conecta el convertidor se iniciará el proceso de instalación de los drivers (los suele instalar Windows sin problemas).

Para hacer pruebas con el ESP8266 yo uso como monitor RS232 el programa Termite. Existen muchos de estos programas, pero yo empecé con éste. Se puede descargar desde su página web, es gratuito, y existe una versión portable.

Una vez descargado y/o instalado, lo ejecutamos y nos vamos a la configuración (Settings), donde hay que hacer algunos cambios.

settings

  • En la configuración del puerto es imprescindible que el puerto elegido sea el que ha asignado Windows (o nosotros de manera manual) al convertidor USB-Rs232. En mi caso es el COM13. En cuanto a la velocidad, a no ser que se haya modificado la velocidad del ESP8266 cambiándole previamente el firmware, la que usa por defecto es 9600 baudios.
  • En el apartado de texto transmitido (Transmitted text) es importante hacer una parada. Cuando se envía un comando AT al ESP8266, éste debe terminar con los operandos CR (Carriage Return) y LF (Line Feed). Si queremos tener el control total de lo que enviamos, se elegiría la opción «Append nothing», pero habría que añadir al final del comando AT los operandos «\r» (CR) y «\n» (LF). Si no queremos tener que escribir siempre estos operandos, basta con elegir la opción «Append CR-LF» y el programa los enviará al final del comando AT una vez pulsado Enter. No hay que olvidar esto, ya que cuando se esté trabajando con un microcontrolador y se envíe un comando AT, siempre hay que añadir los operandos «\r\n».
  • En la parte de Opciones y Plug-ins se puede configurar al gusto de cada uno, ya que no interfiere en el funcionamiento del módulo.

Una vez configurado tendremos la ventana del Termite de esta manera. Ya estariamos listos para empezar.

termite1

Lo primero, y antes de nada, es preguntarle al ESP8266 si se encuentra correctamente conectado. Para ello se usa el comando AT. Para mandar cualquier comando, se introduce en la parte inferior de la ventana, en el campo de introducción de comandos y se pulsa Enter o bien la flecha que hay en el margen inferior derecho.

TERMITE AT

Una vez enviado el comando pueden suceder 3 cosas:

  • El módulo ESP8266 responde OK. Esta sería la mejor respuesta, ya que indica que todo va perfecto y podemos continuar.
  • Que responda caracteres extraños. Esto indica que la velocidad elegida en la configuración del puerto no es la correcta.
  • Que no responda nada. Existe un problema de comunicación o el módulo no está habilitado. Este caso se me dio una vez, y tuve que resetear el convertidor (desconectar o volver a conectar el cable USB) y desconectar y volver a conectar el pin de habilitación (CH_PD) en el ESP8266.

Existen numerosos comandos AT para realizar diversas configuraciones y operaciones, pero en este artículo sólo se usarán los imprescindibles para nuestro fin, el enviar una notificación a nuestro móvil.

Para enviar la notificación, hemos de conectar nuestro módulo a Internet, y para ello se ha de conectar a nuestra red Wifi. Si no recordamos el nombre exacto de la red, podemos mostrar todas las que se encuentran en nuestro alcance con el comando AT+CWLAP.

termite listado redes

En mi caso, mi red Wifi es «Juan», y para conectarme a ella se usa el comando AT+CWJAP. A diferencia de los comandos anteriores, éste lleva asociado una serie de parámetros, como son el nombre de la red Wifi a la que nos queremos conectar, y su clave. Para conectarme a mi red uso el comando de esta manera: AT+CWJAP=»Juan»,»123456″, donde 123456 sería la clave de mi red Wifi.

termite conexion wifi

Si todo ha ido bien,  y el ESP8266 se ha conectado a la red, devolverá un OK y ya estará listo para el envío de la notificación. El envío se divide en 3 fases:

  1. Selección del servidor donde se envía el paquete de datos.
  2. Longitud de la cadena de parámetros a enviar.
  3. Cadena de parámetros en la que se incluye la API generada en Notify My Android y el mensaje de la notificación.

Para seleccionar el servidor, en este caso Notify My Android, se usa el comando AT+CIPSTART. Este comando también lleva asociado una serie de parámetros, entre los que está el tipo de conexión a emplear (TCP o UDP), el nombre o dirección IP del servidor al que se conectará y el puerto de salida, en este caso el 80. El comando a enviar sería: AT+CIPSTART=»TCP»,»www.notifymyandroid.com»,80

termite linked

Si todo ha ido bien, además del OK, nos devolverá Linked, indicando que se ha conectado correctamente al servidor.

El siguiente paso es indicar el tamaño de la cadena de parámetros a enviar, pero para ello, hemos de formar la cadena y medirla. Para formar la cadena nos podemos ayudar de las indicaciones que nos ofrecen desde la web de Notify My Android. De entre todos los parámetros, sólo usaré los siguientes, ya que son obligatorios:

  • apikey. Este parámetro es imprescindible, ya que hace mención a la API generada anteriormente.
  • application. Nombre de la aplicación que genera la notificación.
  • event. Nombre del evento que se va a notificar.
  • description. Descripción de la notificación.

Una cadena genérica sería la siguiente, en la que basta con colocar la API generada, y en cada campo el texto deseado que aparezca en la notificación, pero sin usar los corchetes.

GET /publicapi/notify?apikey=[API generada en la web]&application=[Texto]&event=[Texto]&description=[Texto]

Para medir la longitud de la cadena, se puede hacer a mano (no lo recomiendo), o usar cualquier programa editor de código, como por ejemplo el Notepad++. Se puede descargar de manera gratuita desde su web y tiene una versión portable.

La cadena que yo enviaría sería:

GET /publicapi/notify?apikey=[Mi API]&application=Indaltronia&event=Notificacion&description=Prueba

Para medir su longitud uso el Notepad++

notepad

Para medir la longitud correctamente, hay que situar el cursor al final de la cadena, y en la parte inferior de la ventana del programa, nos indica la longitud (length) que en mi caso es 139. Hay que tener en cuenta lo que comenté en cuanto al envío de comandos AT, y es que han de terminar con un CR y un LF (que en este caso los envía el Termite de manera automática). Esto quiere decir que la longitud total de la cadena sería 139+2=141 caracteres.

Una vez generada la cadena y obtenido el número de caracteres, podemos seguir con el ESP8266. El último estado en el que lo dejamos fue conectado al servidor de Notify My Android. Para indicarle el número de caracteres a enviar se usa el comando AT+CIPSEND seguido del número de caracteres, en este caso: AT+CIPSEND=141.

termite cipsend

El ESP8266 devolverá el operando ‘>’, indicando que está listo para recibir la cadena, por lo que es el momento de enviársela:

termite envio cadena

Si todo ha ido bien, el servidor debe devolvernos el código «200», indicando que no ha habido ningún problema.

Llegado a este punto, y se tenías la aplicación de Notify My Android instalada en el móvil, deberías haber recibido una notificación como esta:

   Screenshot_2015-02-17-11-14-50 Screenshot_2015-02-17-11-15-24

Una vez recibida ya se puede dar por finalizado el proceso de envío de una notificación al teléfono móvil. Si se desea enviar otra, se ha de conectar de nuevo con el servidor (ya que después de cada envío se cierra la conexión), indicar el número de caracteres y enviar la cadena formada.

El siguiente paso sería realizar este proceso con un microcontrolador, pero antes vi necesario hacerlo mediante un terminal para comprender mejor su funcionamiento. Los comandos que enviará el microcontrolador al ESP8266 son los mismo que hemos empleado anteriormente, pero por ejemplo, no habrá que contar de manera manual el número de caracteres que forman la cadena, ya que existen instrucciones en todos los microcontroladores que realizan tal tarea.

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Connect with Facebook