Conectando Arduino a la WiFi (II)

En el post anterior me quedé en el conexionado del prototipo de lo que va a ser mi futura estación remota. Una vez completada la parte de conexión le toca el turno al software. Voy a empezar con un sketch muy sencillo que adapté mínimamemte de uno obtenido de Internet. La idea es ir probando los comandos AT.

El sketch es el siguiente:

image

Inicialmente establezco la velocidad de comunicación con la consola y con el módulo ESP8266 a 115200 baudios, inicializo la consola serie y el módulo. El proceso es sencillo, si hay caracteres disponibles en uno de los dispositivos (consola o módulo WiFi) los leo y los escribo en el otro módulo.

Lo primero que hago es buscar la documentación del módulo y veo que se encuentra disponible online en GitHub, en concreto aquí.

Conecto el arduino con el cable USB

Imagen3

Aparecen caracteres extraños, los comandos AT funcionan (aparentemente) pero la salida que se ve en la consola, en algunos casos, no se entiende.

Investigo un poco más y encuentro varias pistas para resolver el problema. Al parecer hay dos problemas:

  1. El módulo ESP8266 utiliza niveles de 3,3V y el Arduino los niveles lógicos que emplea son de 5V por lo que es necesario adaptarlos. Probé poniendo un potenciómetro de 10K Ohmios en la línea de transmisión de Arduino al ESP para reducir la tensión a 3,3V y, aparentemente funciona pero, lo que no se puede hacer con resistencias es aumentar la tensión de 3,3 a 5V. Al final, lo que hice fue comprar un convertidor de niveles lógicos (menos de 3€) y me quito el problema de encima.
  2. La segunda parte del problema tiene que ver con el módulo SoftwareSerial de Arduino. Al parecer, no soporta velocidades de transmisión elevadas así que lo que voy a hacer es reducir la velocidad de transferencia hasta que funcione correctamente.

Aprovechando que me acerqué a la tienda de electrónica para comprar el convertidor de niveles lógicos, me compré un Arduino Nano. El esquema del nuevo circuito es:

ESP8266-2_bb

ESP8266-2_schem

Y el aspecto que tiene en la realidad es:

image

Una vez verificadas las conexiones estoy listo para comenzar a tirar comandos AT para probar las capacidades del módulo ESP. La documentación del ESP8266 se encuentra aquí y el manual con el conjunto de comandos AT soportados se puede descargar de aquí (documento pdf).

Tras repasar someramente el manual (leerme el índice) voy a empezar a probar algunos comandos AT. Lo primero que voy a hacer es restaurar la unidad a los parámetros de fábrica (comando AT+RESTORE). El resultado es, obviamente, que deja de funcionar. Probablemente, al restaurar los parámetros de fábrica la velocidad de comunicación se resetea a 115.200 baudios. Por lo tanto, lo que hago es retocar el sketch de Arduino y volverlo a arrancar.

Aparecen caracteres raros en el display así que voy a reducir la velocidad de transmisión a 57.600 baudios. Para ello, lanzo el comando:

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

Los parámetros son 57.600 baudios, 8 bits de datos, 1 bit de parada, sin paridad (0) y sin control de flujo (0). Tengo que volver a cambiar el sketch para la nueva velocidad.

image

Cargo el nuevo sketch, y una vez descargado al Nano desconecto y conecto la fuente de alimentación a la que tengo conectado el ESP. El resultado es el siguiente:

image

Lo que voy a hacer a continuación es comprobar la versión, conectarme a la WIFI doméstica y verificar que estoy conectado:

  • AT+CWMODE=1. Para establecer el modo estación.
  • AT+CWJAP=”essid”,”passwd” para conectarme a la WiFi doméstica.
  • AT+CIFSR para averiguar la dirección IP asignada.

imageimageImagen8

Al parecer estoy conectado. Voy a comprobar si hay ping tanto dentro de mi red doméstica como en Internet:

image

Parece que hay ping, vamos a ver si responde a ping …

image

Hasta ahora todo correcto, en el siguiente post seguiré avanzando en el setup de comunicaciones.

Conectando Arduino a la WiFi (I)

Una vez decidido a arrancar mi proyecto IoT y, habiendo decidido que la interconexión entre los distintos dispositivos va a implementarse sobre WiFi, necesito ver la forma de conectar los microcontroladores Arduino a la red inalámbrica.

Explorando un poco por Internet descubro que uno de los módulos WiFi más empleados y con más referencias es el ESP8266. El ESP8266 es un sistema en chip (SOC) que tiene integrada la pila de protocolos TCP/IP y que proporciona acceso a la WiFi a los controladores. Este módulo permite, al microcontrolador, externalizar toda la carga de la comunicación. Sin más investigación previa, me decidí a comprar una unidad en mi proveedor habitual (Amazon) su precio (8€ puesto en casa) me pareció adecuado y su funcionalidad, de acuerdo a lo leído, más que apropiada.

image

Lo que más me sorprendió al recibirlo fue su pequeño tamaño. Quitando el espacio dedicado a las conexiones, no es más grande que la uña del dedo pulgar:

image

Una vez recibido, me propongo conectarlo para empezar a hacer pruebas pero, leyendo más en internet, descubro que recomiendan que la unidad no se alimente desde el pin del Arduino UNO ya que, al parecer, si se hace de este modo, se producen cortes en la comunicación con el microcontrolador. Por lo tanto, decido comprar una placa para una fuente de alimentación externa. En este caso se trata de una WINGONEER MB102 3.3V/5V (6,99€ puesta en casa en Amazon).

image

Configuro los jumpers para que dé una salida de 3,3V, la conecto a una fuente de alimentación y compruebo la salida con un polímetro verificando que el voltaje de salida es adecuado. Todo está OK y tengo los materiales necesarios para montar la placa del prototipo. Aquí están en una foto de familia:

image

Voy a proceder a realizar las conexiones. El esquema de pines del módulo ESP8266 es como sigue:

image

Las conexiones a realizar son:

ESP8266 Breadboard/Arduino
GND GND
TXD Pin 3 Arduino
CH_PD 3,3V
VCC 3,3V
RXD Pin 2 Arduino

En algunos sitios recomiendan no conectar directamente TXD y RXD a los correspondientes pines de Arduino. Las salidas de Arduino son de 5V y el ESP8266 funciona a 3,3V. Inicialmente, voy a emplear dos potenciómetros de 10KOhmios para hacer de divisores de tensión. La prueba no funciona y la unidad, como funciona es conectada directamente a los pines del Arduino.

Lo que sí es importante es que todas las masas estén conectadas para tener una referencia común del voltaje.

El esquema queda como sigue:

ESP8266_bb

ESP8266_schem

Reviso las conexiones una vez más y procedo a conectar un cable USB al Arduino y la fuente de alimentación a la placa de alimentación de la placa del prototipo.

image

En el siguiente post entraré con el software.