ESP8266 y Arduino

El microcontrolador ESP8266 puede usarse con Arduino de dos formas:

  • Usando el firmware propio, de forma que el ESP8266 es una pasarela de puerto serie 3.3V a wifi. De hecho, originalmente el módulo ESP8266 fue creado con este objetivo por la empresa espressif: http://espressif.com/. Para usarlo de esta forma es necesario tener un arduino que programaremos y al que conectamos el módulo ESP8266 por puerto serie para darle capacidad wifi a nuestro Arduino. En este caso el ESP8266 no es programado.
  • Programar ESP8266, en este caso en lugar de usar el firmware que trae por defecto el módulo ESP8266, lo programamos nosotros y para ello usamos el IDE de Arduino y el lenguaje de programación de Arduino junto con alguna librería adicional para manejar el wifi.

Firmware propio

El módulo WIFI ESP8266, que es algo muy parecido a los módulos Bluetooth y que al igual que ellos incluye toda la electrónica necesaria para la comunicación Radio Frecuencia en la banda WiFi, así como la pila TCP/IP y que se comunica con nosotros a través de un puerto serie. De hecho, exactamente igual que los modos HC-06 y HC-05 se gobierna mediante comandos AT (comandos hayes https://es.wikipedia.org/wiki/Conjunto_de_comandos_Hayes) y todo por un precio similar al de los Bluetooth.

El ESP8266 con su firmware de fábrica nos permite conectarnos a Internet desde Arduino conectando ambos módulos mediante el puerto serie y ejecutar comandos AT sobre el ESP8266 y recibiendo la respuesta en Arduino.

Tutorial uso ESP con comandos AT: https://create.arduino.cc/projecthub/user16726/configuring-the-esp8266-using-an-arduino-0ab2e6?ref=similar&ref_id=27809&offset=5

Cheatsheet ESP8266 comandos AT: https://cdn.sparkfun.com/datasheets/Wireless/WiFi/ESP8266ModuleV1.pdf

Programación ESP8266 con IDE Arduino

El ESP8266 dispone internamente de un pequeño procesador, prácticamente es capaz de replicar casi cualquier cosa los Arduinos puedan hacer. Así que los proyectos con sensores más Arduinos que envían los datos a la WIFI mediante un ESP8266, es muy probable que podamos ahorrarnos el Arduino en el proceso, gracias a un firmware basado en C ++. Este permite que la CPU ESP8266 y sus componentes Wi-Fi sean programados como cualquier otro dispositivo Arduino.

  • Puedes desarrollar con el mismo IDE que ya conoces
  • Han hecho un Cross compiler, de forma que prácticamente utilizas los mismos comandos que utilizas con Arduino, con lo que te ahorras aprender nada nuevo
  • Dependiendo del modelo de ESP8266 que tengas, dispones de más o menos pines disponibles con PWM y otras cosas más como I2C y SPI, pero para el modelo ESP8266-01 solo tienes dos pines disponibles GPIO0 y GPIO2
  • Puedes programar el procesador de tu ESP8266 exactamente como si fuera un Arduino con los mismos comandos, y en lo que se refiere a la WIFI, puedes olvidarte de los comandos AT, porque incluye una serie de librerías, que imitan la librería WIFI de Arduino con lo que se pueden reutilizar muchos programas.  

El Arduino Core ESP8266 está disponible a través de GitHub: https://github.com/esp8266/Arduino

Reference de Arduino core para el ESP8266:

Listado de URLs para soporte de tarjetas no oficiales: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

Podemos instalar el soporte a terceros en nuestro IDE simplemente añadiendo el texto “http://arduino.esp8266.com/stable/package_esp8266com_index.json” en propiedades:

Y luego desde el gestor de tarjetas dar a instalar al soporte para ESP8266.

Para programar el microcontrolador del ESP8266 necesitamos un adaptador de USB a puerto serie, pero podemos usar el propio ATmega16U2 que viene en Arduino UNO para programarlo.

IMPORTANTE:

  • El ESP8266 va alimentado a 3,3V, ¡no alimentarlo con 5 voltios!
  • El ESP8266 necesita comunicarse vía serie a 3.3V y no tiene entradas tolerantes 5V, por lo que necesita la conversión de nivel para comunicarse con un microcontrolador 5V como la mayoría de los Arduinos

En este caso para poder programar el ESP8266, en el Arduino no puede haber ningún sketch con el puerto serie funcionando ya que interferiría con el puerto serie del ESP8266. Por ejemplo podemos cargar el blink.

IMPORTANTE: Cuando cargas un sketch en el ESP8266 con el IDE Arduino estamos cargando en la flash de ESP8266 un nuevo firmware borrando el que viene por defecto visto anteriormente para manejar el módulo con comando hayes.

Módulo:

Pines:

  • TX (goes to the 3.3V Rx of the UART USB adapter to the PC)
  • CH_PD (enable/power down, must be pulled to 3.3v directly or via resistor)
  • RESET
  • VCC (3.3v power supply)
  • GND (connect to power ground)
  • GPIO 2
  • GPIO 0 (leave open or pull up for normal, pull down to upload new firmware)
  • RX (goes to the 3.3V Tx of the UART USB adapter to the PC)

Vamos a programar el ESP8266 cargando los ejemplos de ESP8266 que vienen en el soporte para el IDE de Arduino, usando la librería ESP8266WiFi.h:

  • ESP8266Wifi/Wifiscan: Scan networks
  • ESP8266Wifi/WifiClient Conectar a wifi
  • ESP8266WebSerber/HelloServer: Servidor web wifi

Paso 1 – Cargar el programa blink en Arduino par que no haya interferencias por el puerto serie.

Paso 2 – Conexión:

Paso 3 – Con el IDE de arduino cargar cualquiera de estos tres programas de ejemplos y comprobar que funcionan:

  • ESP8266Wifi/Wifiscan: Scan networks
  • ESP8266Wifi/WifiClient Conectar a wifi
  • ESP8266WebSerber/HelloServer: Servidor web wifi

También se podría programar el blink de Arduino en la patilla GPIO2, que es la que nos queda libre y hacer parpadear el led:

 
void setup()
   { pinMode(2, OUTPUT); }

void loop()
   { digitalWrite(2, HIGH);  
     delay(1000);  
     digitalWrite(2, LOW);
     delay(1000);   
   }

Para probarlo, conectar independiente el ESP8266 del Arduino.

Probar a enviar mensajes a la plataforma http://www.aprendiendoarduino.com/servicios/mensajes/index.html con el ESP8266 de forma que pasando los datos por el monitor serie, se envían y almacenan en la plataforma.

Solución: https://github.com/jecrespo/aprendiendoarduino-servicios/tree/master/arduino_code/graba_mensaje_ESP

Comparar cómo se haría con el shield de Ethernet: https://github.com/jecrespo/aprendiendoarduino-servicios/tree/master/arduino_code/graba_mensaje_DHCP

Anuncios

Un pensamiento en “ESP8266 y Arduino

  1. Pingback: Saber Más Avanzado 2017 | Aprendiendo Arduino

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s