Archivo de la categoría: Nivel intermedio

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

Emisor IR

Con el bloque Emisor IR de ArduinoBlocks podemos enviar fácilmente códigos de control remoto por infrarrojos. Sólo necesitamos saber el código que queremos enviar y el protocolo utilizado.

El bloque de emisor IR soporta los protocolos más utilizados (casi todas las marcas utilizan uno de estos protocolos)

De esta forma podemos controlar remotamente dispositivos desde nuestro Arduino simulando un mando a distancia:  control del aire acondicionado, control de la TV, …

Ejemplo:  Simular tecla de mando ON/OFF para TV Samsung

Código ON/OFF:  0xE0E040BF

Lo convertimos de Hexadecimal a Decimal:

https://www.binaryhexconverter.com/hex-to-decimal-converter

Hex: E0E040BF   ->  Dec: 3772793023

El protocolo es Samsung y utiliza 32 bits, por tanto el bloque se usaría así:

Proyecto de ejemplo:

Crear un mando a distancia con un Keypad y un emisor de IR

 

¿Cómo conseguir los códigos de los mandos a distancia?

Para simular la pulsación de la tecla de un mando debemos saber: protocolo utilizado, código enviado, número de bits (longitud en bits del código)

Para ello podemos utilizar un sensor IR (receptor conectado al pin 11 de Arduino) y un de ejemplo que viene con la librería IRemote. Este es algo más avanzado y debemos usar el Arduino IDE:

Librería: https://github.com/z3t0/Arduino-IRremote

Instalar en Arduino IDE (importar ZIP) y abrir el ejemplo “IRrecvDump

En el monitor serie podemos ver la información de las teclas detectadas:

En este caso se ha detectado el código HEX: 212FD02F (en decimal: 556781615)  / protocolo NEC / 32 bits

Podriamos luego enviarlo desde ArduinoBlocks de esta forma:

 

+Info

http://www.arduinoblocks.com

http://www.arduinoblocks.com/web/site/doc

 

Compartir

Bluetooth con Arduino MEGA

El módulo Bluetooth es uno de los más utilizados para poder enviar o recibir información remotamente a dispositivos como móviles, tablets, …

Módulo HC-06

Al igual que en Arduino UNO, en Arduino MEGA también podemos usar el módulo Bluetooth con dos pines cualesquiera. Para ello ArduinoBlocks implementa internamente un puerto serie emulado por software (el módulo HC-06 se comunica con Arduino por conexión serie igual que el Arduino con el PC con la consola)

Pero a diferencia de Arduino UNO, en el modelo MEGA tenemos más puertos serie integrados en el hardware Arduino MEGA. Si utilizamos estos pines en concreto internamente utilizaremos la conexión implementada por Hardware lo que reduce el tamaño del programa y esta conexión será más óptima que cuando se emula por software.

Pines donde conectar el Bluetooth para usar uno de los puertos serie extra en Arduino MEGA

Serie 1 -> Bluetooth RX al pin 18 de Arduino MEGA / Bluetooth TX al pin 19  de Arduino MEGA

Serie 2 -> Bluetooth RX al pin 16 de Arduino MEGA / Bluetooth TX al pin 17 de Arduino MEGA

Serie 3 -> Bluetooth RX al pin 14 de Arduino MEGA / Bluetooth TX al pin 15 de Arduino MEGA


Ejemplo 1

Conexión bluetooth en pines 2 y 3  (conexión serie emulada por software)

Desde el móvil con una aplicación tipo “Bluetooth terminal” o similar visualizamos los datos recibidos:


Ejemplo 2

Conexión en los pines 18 y 19 (puerto serie 1 implementado en el Hardware )

y el funcionamiento es exactamente el mismo


La diferencia en el código generado es que en el ejemplo 1 se utiliza la librería SoftwareSerial para implementar un puerto serie por software (esto utiliza más recursos y el programa ocupa más memoria)

#include <SoftwareSerial.h>
SoftwareSerial bt_serial(3,2);

En el caso del ejemplo 2 se implementa utilizando HardwareSerial y de esta forma se optimiza el funcionamiento interno.

#include <HardwareSerial.h>
HardwareSerial &bt_serial=Serial1;
Compartir

WS2812 / NeoPixel – Led Matrix

Una de las maneras más rápidas y sencillas de trabajar con leds ws2812 es con la shield 40 leds lista para conectar a nuestro Arduino.

O con una matriz de leds fácil de conectar a la placa Arduino:

Para manejar todos estos leds RGB gracias a la magia de los leds inteligentes ws2812 sólo necesitamos un pin

Utilizando la shield indicada al principio, utilizaremos el pin 13 y un tamaño de 40 leds (8×5):

ArduinoBlocks nos permite fijar el color de cada led RGB de una forma sencilla, ya sea indicando el número de píxel linealmente o de forma matricial indicando las coordenadas x,y

Además podemos definir los gráficos a visualizar con el editor y volcar los datos directamente en la matriz de leds:

Con todo esto realizamos un programa de demostración:

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

Video en funcionamiento:

+Info:

http://www.arduinoblocks.com

Documentación & Libros:

http://www.arduinoblocks.com/web/site/doc

Colaborador & Distribuidor oficial Keyestudio:

Innova Didactic

 

 

Compartir