Archivo por meses: agosto 2018

Wifi y Arduino: Explicación del proceso completo con personalización de app móvil.

Piensa en alguna de las decenas y decenas de sensores y actuadores que existen para Arduino. Vale, pues ya puedes monitorizarlos y controlarlos desde tu móvil simplemente añadiendo un pequeño módulo Wifi. Para programarlo, con tan solo 3 bloques puedes configurar la comunicación, enviar órdenes y recibir datos para interactuar con estos elementos desde cualquier parte del mundo. Como no necesitamos llevar cable de datos, la versatilidad y facilidad de instalación aumenta exponencialmente.

Esto nos permite controlar la calefacción y el aire acondicionado, monitorizar y gestionar un control de accesos, alarmas, riego, la iluminación de casa y una infinidad de posibilidades más. Es un salto fundamental en la expansión y democratización de la domótica del siglo XXI y el IOT, ya que permite comunicar cientos de procesos con una metodología de programación gráfica sencilla e intuitiva, pero que lleva sobre sus hombros un inmenso trabajo de páginas y páginas de código.

En el siguiente videotutorial nos metemos a fondo con la comunicación bidireccional por Wifi, es decir, aprendemos a enviar órdenes a Arduino y a recibir datos en el móvil, tablet, ordenador, etc… Esta información, además, la sintetizamos tras la presentación del vídeo, en la segunda parte de este artículo.  

1_Wifi y Arduino SIN CÓDIGO! Programado con bloques. Explicación del proceso completo con app móvil.

En este videotutorial se detallan las nociones básicas necesarias para llevar a cabo una comunicación bidireccional por Wifi con ArduinoBlocks:

  1. Guía rápida sobre el módulo Wifi ESP8266.
  2. Diferentes opciones de conexión del ESP8266.
  3. Configuración del ESP8266.
  4. Protocolo de comunicación por internet MQTT.
  5. Ejemplo de control WIFI con Arduino en servidor gratuito sin clave ni contraseña mediante la app móvil gratuita Linear MQTT Dashboard.

 

En el ejemplo del punto 5, aprendemos a recibir órdenes en Arduino para activar o apagar salidas digitales (por ejemplo, encender un led), y a envíar a un teléfono móvil el estado de activación de un interruptor. Es un ejemplo conceptual, que puede ser aplicado, como decimos, a infinidad de casos prácticos, simplemente cambiando el sensor o el actuador.

El proceso se realiza utilizando un servidor MQTT gratuito que no exige usuario ni contraseña, por tanto, no es necesario configurar ningún elemento en internet, solamente hay que personalizar una app móvil, como se explica.

A continuación vamos a desglosar el vídeo en forma de artículo.

Arduino + Wifi programado con lenguaje gráfico por bloques: Guía básica y ejemplo práctico

1. Materiales y funcionamiento del programa

Esquema de conexión

  • App móvil gratuita: Linear MQTT Dashboard
  • Módulo Wifi ESP8266
  • Adaptador para ESP8266
  • Led
  • Interruptor
  • Resistencia 10 kOhm

Cuando enviemos desde el móvil un 1 (accionando un interruptor virtual en una app), el pin 13 de Arduino se activará, encendiendo el led asociado al mismo. Cuando volvamos a accionar ese mismo interruptor, se enviará un 0 que hará que el led se apague.

Por otro lado, tenemos un interruptor conectado al pin 7 de Arduino. Cada 2 segundos, si el interruptor está encendido, mandará el texto “P_Encendido” al móvil. Si el interruptor está apagado, se enviará el texto “P_Apagado”.

Antes de ver el programa que ejecuta el proceso descrito, vamos a dedicar varios apartados a explicar como conectar y configurar el ESP8266 correctamente.

2. Alimentación y conexión del ESP8266

  • ESP8266 se alimenta a 3,3 V
  • La comunicación con Arduino también debe hacerla a 3,3 voltios.

La información anterior es fundamental al combinar estos dos componentes, ya que Arduino UNO se alimenta y comunica a 5 V.

En el artículo Arduino + MQTT + WiFi con módulo ESP8266 se puede encontrar información sobre las principales opciones que existen a la hora de alimentar y conectar este módulo Wifi (ESP8266) con Arduino.

Además, si bien profundizaremos en métodos de conexión y formatos en los que podemos encontrar este módulo Wifi en tutoriales futuros, para este artículo vamos a usar un adaptador, porque permite aprovechar ESP8266 que ya tengamos por casa, porque funciona de forma fiable y porque es muy económico.

Adaptador para ESP8266

3. Configuración del ESP8266

La comunicación con Arduino la vamos a hacer por el puerto serie (comunicación serial), de la misma forma que nos comunicamos con el ordenador o el bluetooth, por ejemplo.

Igual que hacíamos con el bluetooth, vamos a configurar los pines 2 y 3 (por ejemplo) para realizar la comunicación. De esta forma, dejamos libres los pines 0 y 1 de Arduino para su comunicación con el ordenador. Si conectáis el módulo Wifi a los pines 0 y 1, imposibilitáis la carga de programas en Arduino porque ocupáis el canal de comunicación serie, y esto es bastante incómodo porque obliga a desconectar físicamente el ESP8266 de Arduino cada vez que quieras cargarle un programa.

Pero cuidado, configurar otras entradas de Arduino para esta comunicación conlleva un pequeño inconveniente que hay que solucionar para poder seguir con el proceso. Los únicos puertos de Arduino preparados para realizar la comunicación a una velocidad de transmisión de 115200 baudios son el 0 y el 1. El resto de pines deben comunicarse a una velocidad de 9600 baudios. Esto es importante porque la mayoría de ESP8266 traen de serie configurada la comunicación a 115200 baudios.

A continuación se explica el proceso para llevar a cabo este cambio. Tranquilos, con hacerlo una vez en un ESP8266, ya quedará memorizado para siempre en ese módulo.

Lo que tenemos que hacer es, comunicarnos directamente con el ESP8266 y enviarle un comando indicándole que cambie su velocidad de transmisión. Hay varios métodos para conectar directamente con el ESP8266. Lo más sencillo es hacerlo a través del entorno de programación oficial de Arduino, el IDE, y usar el propio Arduino como conector intermediario.

Pasos a seguir:

  • Alimenta y conecta el ESP8266 a los pines 0 y 1 de Arduino, y éste al ordenador.

  • Abre el IDE de Arduino, conecta tu Arduino y carga un programa vacío como el de la figura

  • Abre el monitor serie y configúralo para envío de Nueva Línea + Retorno de carro (Ambos NL & CR)

  • Configura el monitor serie a una velocidad de 115200 baudios (que es la que presumiblemente trae configurada el ESP8266). A continuación escribe el comando AT para ver si hay comunicación con el módulo. Si es correcta, recibirás un OK. Si recibes caracteres muy extraños, es que el ESP8266 no está configurado a una velocidad de 115200 baudios.
  • Para cambiar la velocidad de transmisión a 9600 baudios, tenemos que escribir el siguiente comando:
                                                    AT+UART_DEF=9600,8,1,0,0
    A continuación haz click en “Enviar” y recibirás un Ok confirmando el cambio de velocidad.

  • Ahora ya, si cambias la velocidad de comunicación del monitor serie a 9600 baudios, comprobarás que el proceso se ha realizado correctamente si, tras teclear el comando AT, recibes un OK.En lugar de utilizar la placa Arduino como conversor serie para realizar todo este proceso, puedes usar uno de los conversores que se comercializan para este uso específico, pero no es necesario, como decimos.

Alternativas para acceder al ESP8266 desde el ordenador

Algunos módulos ESP8266 antiguos pueden necesitar actualizar su firmware. Este proceso, que es algo mas laborioso, lo trataremos en tutoriales futuros, aunque se han probado hasta modelos del 2015 que funcionan sin necesidad de dicha actualización.

4. Comunicación

Se va a utilizar el protocolo MQTT. Ejemplos de uso de este protocolo son la aplicación Whatsapp y o Facebook Messenger. La arquitectura de MQTT sigue una topología de estrella, con un nodo central que hace de servidor o “broker“.

Esta comunicación se basa en unos “temas” (topics), que crea el cliente que publica (envía) el mensaje. En cada tema incluimos los datos que queremos transferir. Los nodos que deseen recibir la información incluida en un tema, deben subscribirse a él.

Ejemplo de funcionamiento del protocolo MQTT:

Vamos a enviar periódicamente la temperatura que hay en una sala a un teléfono móvil. Además, vamos a enviar diferentes órdenes que hagan que se active o apague una salida de Arduino. Vemos el proceso a continuación:

En el artículo ¡Conecta tu Arduino al Internet de las cosas! (IoT) se detalla en profundizad el funcionamiento de este protocolo junto con los bloques en Arduinoblocks utilizados en él.

5. Programa en ArduinoBlocks

Dado que vamos a usar un servidor sin usuario ni contraseña, es especialmente importante que los temas que se creen sean lo más personalizados posibles, para dificultar que dos personas puedan elegir el mismo tema e interferirse mutuamente.

  • Vamos a crear un programa que se suscriba al tema (topic) DID/LED. Como ya se ha mencionado, es importante que cada usuario cree un tema personalizado para que no coincida con otros usuarios. DID/LED es un ejemplo. Va a ser en este tema ejemplo en el que se publiquen valores desde un móvil. En función de esos valores Arduino actuará.
  • Los valores leídos en el tema DID/LED se guardarán en la variable EstadoLed.
  • Si EstadoLed = 1, entonces encendemos el pin 13. De lo contrario, se mantiene apagado.
  • Cada 2 segundos vamos a enviar a internet el estado del interruptor conectado al pin 7. Si está activo publicará en el tema DID/Interruptor, el texto P_Encendido, que podremos ver en el teléfono móvil o Tablet. Si el interruptor está apagado, se enviará el texto P_Apagado.

6. Configuración de la app móvil

Entramos en la app Linear MQTT Dashboard que hemos elegido para este ejemplo.

Primero configuramos la conexión al servidor. A continuación, tenemos que suscribirnos al tema que publica Arduino, y publicar en el tema al que se suscribe Arduino. Lo podemos ver en la siguiente imagen:

Con esto ya tendríamos todo el proceso completado. Ahora, ponemos en play la aplicación y empezaremos a recibir el estado del interruptor conectado a Arduino. Además, accionando el interruptor de la imagen, encenderemos y apagaremos el led conectado al pin 13 de Arduino.

 

Compartir