Módulo WiFi ESP8266 por 3€ para Arduino

Hasta hace no mucho incluir conectividad WiFi en Arduino salia bastante caro, entorno a los 40€, además de haber pocas opciones para escoger. Sin embargo en la actualidad los módulos WiFi han bajado de precio enormemente, como vimos hace un tiempo con el TLG10uA03 que salia por unos 10€, o desde hace unos meses mediante la familia de módulos ESP8266 que salen por unos 3€ dependiendo del modelo que escojamos.

Y es que desde la aparición del ESP8266 hace como medio año, ha sido espectacular la cantidad de proyectos con conectividad WiFi que han aparecido, ha sido tanto el revuelo que incluso extraoficialmente se le ha dado soporte para poder programar este módulo desde el IDE de Arduino, sin necesidad de un Arduino!

El modulo podemos encontrarlo con diferentes formatos, según lo queramos con pines o soldar directo en el PCB, o si lo queremos con antena integrada, externa o con ambas.

QQ图片20141016153028
Lista de módulos aquí

Características técnicas

Técnicamente todos tienen las mismas características, salvo porque algunos modelos pueden incluir pines GPIO o no, estos pines pueden sernos útiles si queremos programar el modulo para que realice tareas sin necesidad del Arduino.

Como se puede verse en la siguiente imagen, el primer módulo solo tiene los pines de alimentación y datos, sin embargo el segundo tiene muchos más pines (pads), estos son los pines GPIO.

ESP8266_2
WiFi ESP8266-05 / WiFi ESP8266-03 / RF NRF24L01

En cuanto sus características resumidas son las siguientes (aquí las completas):

  • Wi-Fi 2.4 GHz, 802.11 b/g/n, WPA/WPA2
  • Integra pila de protocolos TCP/IP v4
  • Potencia de salida de +20dBm en modo 802.11b
  • Conexiones SDIO 2.0, SPI, UART, I2C
  • Modulo sueño <10uA, Modo sueño leakage < 5uA
  • Despierta y transmitir paquetes en <2 ms
  • Consumo de energía de <1.0mW (DTIM3)
  • Rango de temperatura de funcionamiento -40C ~ 125C

Alimentación

El modulo funciona con una tensión de 3.3V tanto para su alimentación como en sus pines de datos, usar una tensión mayor puede quemar o estropear el modulo. Además el consumo del módulo puede ser bastante elevado, sobre todo al arranque llegando a picos de 300mA, esto hace que no podamos alimentar el modulo directamente desde el pin de 3.3V de Arduino o corremos el riesgo de que no nos funcione bien el modulo o en el peor de los casos estropear la electrónica del Arduino.

Conexión con Arduino

Por lo general para hacer funcionar los módulos con un Arduino es necesario conectarlos de la siguiente manera:

El pin marcado con * no se puede conectar directamente, hay que usar un divisor de tensión como se muestra en la siguiente imagen:

esp8266-circuit
Imagen de electronut.in

Comunicación con Arduino

Para la comunicación entre Arduino y el ESP8266 se usa una conexión Serial/UART, por lo que podemos usar el modulo sin necesidad de librerías, aunque con ellas nuestro código quedara más limpio.

Antes de ponerlos a intentar mandar algo a internet, recomiendo trastear con el modulo. Para ello podemos usar un adaptador Serial-USB o el propio Arduino con un scketh especial que lo único que hace es de pasarela entre el Monitor Serial y el modulo, así todos los comandos que escribamos le llegaran al módulo, y todas sus respuestas a nosotros.

Si usamos un Arduino Uno, deberemos usar la parte de código superior, si usamos un Arduino Leonardo podemos usar la parte de código inferior.

Comandos AT

Para indicarle qué queremos hacer al ESP8266 debemos usar comandos AT, con ellos podemos saber si el conexionado es correcto, podemos saber la versión del firmware, podemos configurar el modulo, podemos realizar conexiones y enviar y recibir datos… con los comandos AT se hace todo.

Los comandos AT usables por nuestro modulo pueden variar según su versión del firmware, por lo general la siguiente lista suele funcionar, recomiendo ver la lista completa aquí.

Como se puede ver a continuación es muy sencillo comunicarse con el modulo:

 

Enviar datos a Thingspeak

Thingspeak es una página que nos permite enviar los datos de nuestros sensores para posteriormente visualizarlos mediante gráficas. Esto o algo incluso mejor podríamos montárnoslo en nuestro propio servidor, pero simplemente como prueba del módulo esta página nos viene perfecta.

El siguiente código se encarga de enviar los valores que queramos a Thingspeak, para ello comprueba si la conexión con el modulo está realizada, configura el WiFi e intenta enviar los datos. En realidad el código nos serviría para cualquier servidor, solo debemos indicarle la IP, el puerto, el servicio que recoge los valores y por último los valores que queramos enviar.

El resultado por pantalla que tendremos de la ejecución del código sería algo así:

En este caso la información se envía cada 10000 milisegundos, que son 10 segundos, podemos elegir el tiempo a nuestro antojo.

El cogido no comprueba si la información ha llegado correctamente o no… Thingspeak devuelve un 1 si la información se guardó, o un 0 en caso contrario, pero como digo en este ejemplo no se comprueba si los datos se guardaron o no, solo si la llamada se pudo realizar o no.

Y este seria el resultado en la web:

thingspeak_test

Y por ahora eso es todo, en próximas entradas explicare como cambiar el firmware o como guardar datos en nuestro propio servidor. Tambien me gustaría probar a usarlo de forma autónoma, pero eso solo si saco tiempo 😉

9 comentarios en “Módulo WiFi ESP8266 por 3€ para Arduino”

    1. Hola,

      Programalo con el IDE de Arduino, deberías de poder usar el I2C sin tener que configurar nada.
      Aunque no lo he probado aún, lo he usado siempre junto Arduino.

      Saludos.

    2. En Arduino no se especifica en el sketch, ya que al haber tantas placas seria imposible que un código fuera compatible para todas ellas, lo hace el IDE de Arduino de forma transparente incluyendo las especificaciones de cada micro.

      Al agregar el nuevo tipo de placa «ESP8266» como board en el IDE debería de ir igual.

      Ten en cuenta que todo lo que puedas o no hacer también dependerá del ESP8266 que uses, algunos tienen 2 o 3 pines GPIO y otros tienen hasta 12 pines, si tu ESP8266 no tiene los GPIO para I2C no podrás aprovecharlos.

    3. Vale,

      He visto algún programa en .lua que le indican que GPIO usar para un ESP8266-1, así que creo que puede funcionar con cualquiera.
      Probare lo que dices en los diferentes ESP8266 que tengo, incluso tengo un Wemos D1 y un Lolin pero quisiera hacerlo funciona con un ESP8266-1
      Ya diré si funciona.

      Saludos y gracias.

    4. Solucionado!!!

      Tan facil como añadir en el setup
      Wire.begin(0,2);
      De este modo el GPIO 0 es SDA y el 2 SCL

    5. El D1? yo tengo uno y es una pasada.
      La nueva versión además lleva los pines del I2C en el mismo sitio que los UNO normales y creo que será aun mejor.

Escriba aquí su comentario