Arduino con Esp8266 / Esp-01 Cliente Web

El ESP8266 es un chip de bajo costo Wi-Fi con una pila TCP/IP completa y un microcontrolador, fabricado por Espressif, una empresa afincada en Shanghai, China.

El primer chip se hace conocido en los mercados alrededor de agosto de 2014 con el módulo ESP-01, desarrollado por la empresa AI-Thinker. Este pequeño módulo permite a otros microcontroladores conectarse a un red inalámbrica Wi-Fi y realizar conexiones simples con TCP/IP usando comandos al estilo Hayes.1

Es importante recalcar que el ESP8266 es un microcontrolador que puede incluso reemplazar al Arduino dependiendo la aplicación, pudiendo cargar lógica de programación en su memoria, incluso, utilizando el Arduino IDE. La programación no es tan sencilla como en el Arduino, pero es una utilidad muy eficiente y de bajo costo. En otras entradas estaremos viendo como utilizar el ESP8266 sin el Arduino.

En esta ocasión vamos a configurar un módulo ESP-01 para que dote a nuestro Arduino de funcionalidad Wifi.

Inicialmente, debemos diferenciar el módulo ESP-01 y establecer comunicación con el. Estos módulos vienen con comunicación a 9600bps (azul) y 115200bps (negro).

Vamos a armar un circuito en el que el Arduino sirva de pasarela de comunicación (passthrough) para comunicarnos directamente con el ESP-01 a través del Puerto Serial del Arduino (Pin 0 y 1) usando el terminal. En mi caso, tengo un modulo de 115200 (negro).

Nótese que conecté el TX con TX y el RX con RX. De ese modo hacemos la pasarela. También es importante dejar en RESET el Arduino, para que no ejecute lógica. A continuación el diagrama:

Vamos a conectar el USB en el Arduino y abrir el Terminal, reiniciar el módulo y deberíamos obtener la respuesta “ready”. Ignorar los caracteres aleatorios que salen al inicio de la respuesta, forman parte del firmware del módulo. Nota que mi terminal esta en 115200bps.

Ingresé el comando “AT”, obteniendo la respuesta “OK”. Una lista de todos los comandos AT disponibles está aquí. Básicamente lo mas importante es entender lo siguiente:

En el programa, podemos usar el módulo ESP-01 en el puerto Serial del Arduino, pero perderíamos la comunicación. Si usamos un Arduino Mega no hay problemas, porque tenemos Serial1, Serial2 y Serial3 disponibles. Sin embargo, si vamos a utilizar Arduino UNO, lo hacemos a través de la libreria SoftwareSerial, por lo que es importante bajar la velocidad de comunicación del ESP-01 a 9600bps, ya que sencillamente el SoftwareSerial a 115200bps no funciona.

 

Para el fin mencionado anteriormente entonces utilizamos el siguiente comando: “AT+UART_DEF=9600,8,1,0,0”

Obtenemos la respuesta “OK” y es básicamente el único comando que vamos a utilizar antes de proceder a configurar el Arduino con el ESP-01 Wifi. Movemos el terminal a 9600bps, y con el comando “AT”, obtenemos “OK”.

Ahora hacemos las conexiones para el Cliente Web:

Existen diversos métodos de configuración del ESP-01 con el Arduino: usando los mismos comandos AT, o utilizando algunas librerías para tal efecto. Entre las librerías que existen, vamos a usar WiFiEsp. Esta librería provee una funcionalidad casi idéntica al Shield Arduino Wifi.

Abrimos el ejemplo de la librería: “WebClientRepeating”

Cambiamos:

char ssid[] = “wifiSSID”; // your network SSID (name)
char pass[] = “wifiPassword”; // your network password

Y nota que ahora RX y TX están cruzados:

SoftwareSerial Serial1(6, 7); // RX, TX

Recuerda quitar el jumper RESET del Arduino. Cargamos el programa y si todo sale bien en el terminal deberíamos obtener esta respuesta:

Cambié el Server de Conexión a mi servidor local (Apache) y creé un HTML sencillo que me mostrara un mensaje, para probar la funcionalidad. Aquí está el código y la respuesta.

 

 

Por último, las conexiones vistas son en ambiente de laboratorio. ES IMPORTANTE señalar lo siguiente:

  • La alimentación 3.3v del ESP8266 en condiciones de alto trabajo llega a consumir 200ma. El pin de 3.3v del Arduino en sus especificaciones maneja 50mA. Es por esto, que en condiciones de trabajo podemos dañar el pin. Lo cual hace que sea necesario el uso de una fuente externa para la alimentación del ESP-01.
  • Por el mismo motivo de diferencias de voltaje, se recomienda utilizar un divisor de voltaje entre el pin TX del Arduino y el RX del ESP-01, para ajustar los niveles de voltaje y evitar daños.
  • Estas recomendaciones son para un montaje final, sin embargo, como comentado, en el laboratorio, sin tiempos de trabajo prolongados, todo funciona perfectamente sin daños.
  • Esta serían las conexiones mencionadas.

 

Estación de Temperatura y Humedad con Arduino Wifi, API Laravel y Highcharts

Para reforzar todo el aprendizaje que se ha adquirido, se nos vino a la mente crear una estación, cuya aplicación principal será la de monitorear la temperatura y humedad en cuartos con equipos electrónicos y transmitir dicha información vía wifi a nuestro servidor, donde podremos observar las tendencias y generar alertas cuando se necesario.

El diagrama principal va así:

Estaremos desarrollando el sistema en modo local hasta el último paso, donde lo subiremos al servidor.

Vamos a dividir el proyecto en varias etapas e iremos actualizando esta entrada hasta completarlas todas, de la siguiente manera:

  • Arduino: Sensor de Temperatura y Humedad con LCD.
  • Arduino: Comunicación wifi con módulo esp8266.
  • Backend: Base de Datos, API Laravel.
  • Integrando el Arduino con el Backend.
  • Frontend: petición API & Hightcharts
  • Subiendo al servidor y pruebas finales.