Archivo de la etiqueta: mqtt

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

Arduino + MQTT + WiFi con módulo ESP8266

¡Por fin, ya podemos conectar nuestro Arduino via conexión WiFi y programarlo con bloques desde ArduinoBlocks!

Para la conexión WiFi utilizaremos el módulo ESP8266 serie como periférico para dotar a nuestro Arduino de una comunicación WiFi

Tenemos varias opciones para conectar el módulo WiFi a nuestra placa Arduino, voy a explicar las principales:

Opción 1: WiFi Shield basada en ESP8266  (by wangTongze)

Es la opción más sencilla y rápida, pero la conexión del módulo ESP es fija en los pines 0 y 1, por lo que hay que quitarla o desactivar la conexión moviendo los microswitchs para poder programar la placa Arduino (si no dará un error al subir el programa) y no podremos utilizar el puerto serie para comunicarnos con el PC.

Para programar Arduino: micro-switches 0 y 1 -> Off

Funcionamiento autónomo de Arduino: micro-switches 0 y 1 -> On

Normalmente viene preconfigurada con velocidad de conexión serie de 115200 baudios.

Ejemplo Arduino UNO + Shield WiFi:

 

Opción 2: Módulo ESP8266 listo para conectar!

Este módulo nos permite conectarlo fácilmente a Arduino, sólo necesitamos 4 cables: VCC, GND, RX, TX

Problema:  este módulo viene normalmente también preconfigurado a una velocidad de comunicación de 115200 baudios:

-Si lo conectamos a los pines 0,1 Arduino utilizará el puerto serie por hardware y no dará problemas, pero como en la opción 1 deberemos desconectarlo para poder subir el progama a la placa Arduino y tampoco podremos usar el puerto serie para comunicarnos con el PC

-Si lo conectamos a otros pines, se simulará una conexión serie por software y este tipo de conexión serie simulada no permite velocidades de 115200 baudios por lo que tendríamos que reconfigurar el módulo para trabajar a velocidades más bajas (9600 – 57600)

(en Arduino Mega podemos utilizar los puertos hardware 1,2 y 3 y evitamos el problema),

Ejemplo Arduino MEGA  + Módulo:

 

Opción 3: ESP-01 + Adaptador

Si ya tienes algún ESP8266 en formato ESP-01 por ahí puedes comprar este adaptador y estaríamos en un caso idéntico a la opción 2.

Ejemplo: Arduino UNO + ESP01 con adaptador

 

Opción 4: (DESACONSEJADA)

Si tienes un ESP-01 se puede adaptar manualmente para conectarlo a Arduino siguiendo este esquema:

 

Reconfiguración de la velocidad de conexión del módulo ESP8266:

Si compramos un módulo ESP8266 y queremos utilizarlo en pines distintos al 0 y 1 de Arduino UNO o Nano , podemos reconfigurar la velocidad de conexión del módulo para así evitar el problema de la comunicación de 115200  baudios.

Podemos hacerlo conectandolo con un adaptador USB-TTL al ordenador,  por ejemplo:

Desde una aplicación de consola (por ejemplo la de Arduino IDE) conectar a la velocidad actual (115200) y enviar el comando AT siguiente:

AT+UART_DEF=9600,8,1,0,0

Aparecerá la respuesta “ok” y a partir de ese momento el módulo ya funcionará siempre a 9600 baudios

 

Bueno… y una vez conectado el módulo o la shield ¿cómo funciona?

ArduinoBlocks implementa el protocolo MQTT para conectar nuestro Arduino al Internet de las cosas (IoT) de la forma más sencilla. Podemos utilizar la conexión Ethernet (con shield Ethernet standard) o la conexión WiFi

Si necesitas más información sobre MQTT consulta las siguientes entradas del blog:

http://blog.arduinoblocks.com/2018/04/30/arduino-e-internet-mediante-cable-ethernet-y-protocolo-mqtt-con-videotutorial/

http://blog.arduinoblocks.com/2017/04/28/conecta-tu-arduino-al-internet-de-las-cosas-iot/

EJEMPLO: Estación meteorológica vía WiFi

Visualización de los datos en una aplicación móvil MQTT (MQTT Dashboard):

Próximamente más ejemplos e información sobre la conectividad WiFi con ArduinoBlocks!

Compartir

¡Conecta tu Arduino al Internet de las cosas! (IoT)

Ya podemos conectar nuestros proyectos de ArduinoBlocks a Internet y controlar y monitorizar remotamente cualquier sensor / actuador que conectemos. Únete al Internet de las Cosas (IoT) con ArduinoBlocks gracias a los bloques que implementan la comunicación MQTT.

Sólo necesitamos una Shield Ethernet (muy económicas) y conectarla a un router para darle conexión a Internet a nuestra placa Arduino.

La red donde conectemos Arduino debe tener un servidor DHCP para asignar automáticamente la dirección IP

IMPORTANTE: La shield Ethernet utiliza los pines: 10, 11,12,13 y el pin 4 si utilizamos la SD que lleva también incorporada la shield.

  • ¿Qué es MQTT?

MQTT es un protocolo de comunicación para redes TCP/IP muy sencillo y ligero en el que todos los dispositivos se conectan a un servidor (llamado “broker“). Los dispositivos pueden enviar (publicar) o recibir (suscribirse) mensajes asociándoles un “topic” (tema).

El “broker” se encarga de gestionar los mensajes y distribuirlos entre todos los dispositivos conectados.

Ejemplo de esquema MQTT con un dispositivo publicando un mensaje y el “broker” los difunde a todos los dispositivos suscritos a ese “topic”:

  • Bloques MQTT en ArduinoBlocks

Iniciar: permite configurar los datos de conexión con el “broker” a utilizar. Por defecto se utiliza el “broker” público y gratuito “iot.eclipse.org“. En caso de utilizar otro “broker” con seguridad debemos indicar el usuario / clave.

La dirección MAC debe ser única en nuestra red local, si no tenemos una facilitada en la EthernetShield podemos dejar la de ejemplo (generada aleatoriamente). El ID de cliente también se genera al azar.

Publicar: Permite enviar un mensaje con un “topic” (Tema) y un valor al “broker” para que difunda el mensaje a todos los suscriptores.

Suscribir: Permite suscribirse a un “Topic” (Tema) para recibirlo. ArduinoBlocks lo asocia a una variable, de forma que cuando se reciba el valor desde la conexión para ese “topic” se actualizará automáticamente el valor de la variable dentro del programa Arduino (sólo funciona con la suscripción a “topics” con valores numéricos)

Estado de la conexión: Permite obtener el estado de la conexión, si está conectado al “broker” o no.

  • ¿Qué “broker” MQTT utilizo para mis proyectos?

iot.eclipse.org (puerto: 1883, sin usuario ni clave)

Es un broker público. Tenemos que tener en cuenta que no es una opción segura pues nuestro mensajes son compartido con todos los dispositivos que utilicen este “broker“. Se utiliza para prueba o fines docentes. Los “topics” deben ser lo más personalizados posibles para evitar entrar en conflicto con otros dispositivos que pudieran utilizar el mismo “topic“:

Ejemplo de "topic": "AB/juanjo/p1/led"

Otro “broker” público muy utilizado para pruebas es:

broker.hivemq.com (puerto: 1883, sin usuario ni clave)

Podemos ver en tiempo real el funcionamiento de éste último:

http://www.mqtt-dashboard.com/

Por otro lado tenemos algunos “brokers” con acceso por usuario/clave que nos permiten un uso limitado con cuentas gratuitas y un uso más intensivo con cuentas de pago, como por ejemplo:

www.cloudmqtt.com

Después de registrarse se facilitan los datos de conexión (servidor, puerto, usuario, clave). Con la modalidad "Cute Cat" tenemos un límite de 10 dispositivos conectados y 10Kb/s de datos que será suficiente para nuestros proyectos.
  • EJEMPLOS

Ejemplo 1 – Envío de la temperatura y humedad cada 5 segundos

Arduino lee la temperatura y humedad del sensor DHT11 y la publica cada 5 segundos con el topic: “AB/temperatura” y “AB/humedad

Desde un dispositivo móvil (por ejemplo Android con la aplicación MQTT Dashboard) conectándonos al mismo “broker” y suscribiéndonos a los mismos  topics “AB/temperatura” y “AB/humedad” recibimos la información… ¡desde cualquier lugar del mundo!

Montaje y programación:

http://www.arduinoblocks.com/web/project/3504

Visualización en aplicación móvil “MQTT Dashboard” y “MQTT Dash” (Android)

 

Ejemplo 2 – Control de led RGB

Montaje y programación:

http://www.arduinoblocks.com/web/project/3505

Control desde aplicación móvil “MQTT Dashboard” (Android):

En funcionamiento:

Ejemplo 3 – Control de relé + monitorización del nivel de luz con LDR

Montaje y programación:

http://www.arduinoblocks.com/web/project/3506

Control y monitorización con aplicación móvil “MQTT Dashboard” (Android):

Video del último ejemplo en funcionamiento:

  • Clientes MQTT para dispositivos móviles:

MQTT Dashboard (Android)

MyMQTT (Android)

MQTT Dash (IoT, SmartHome)

MQTT Tester (iPhone)

  • Enlaces de interés:

https://github.com/mqtt/mqtt.github.io/wiki/public_brokers

https://geekytheory.com/que-es-mqtt

https://en.wikipedia.org/wiki/MQTT

https://github.com/mqtt/mqtt.github.io/wiki

https://es.wikipedia.org/wiki/Internet_de_las_cosas

https://es.aliexpress.com/store/product/1pcs-Arduino-Shield-Ethernet-Shield-W5100-R3-UNO-Mega-2560-1280-328-UNR-R3-W5100-Development/428351_32709442003.html

+Info, ejemplos y proyectos resueltos en el libro oficial:

Compartir