¡IoT por todas partes! (o probando el módulo ESP8266, parte 1)
Esta vez damos un salto en nuestros proyectos y trasteos. Nos invade el Internet de las Cosas. El módulo ESP8266 del fabricante chino Espressif nos permite dar conectividad WIFI 802.11b/g/n a cualquier trasto que hagamos. Sí, y todo por 2,5€ puesto en casa. El módulo en sí puede funcionar como una simple pasarela serie-wifi si lo usamos con un Arduino, o como sistema independiente ya que se puede programar directamente, o mediante scripts en Lua.
De lo primero que nos damos cuenta cuando buscamos información sobre este módulo es la cantidad de versiones que existen del mismo:
Los más usados son el ESP-01 y el ESP-12 (que es el que usa la placa NodeMCU). La diferencia entre unos y otros es básicamente el número de GPIOs (hasta 16) que están disponibles para su uso. Las características del chip las podéis ver aquí, y dejan al Arduino UNO o al Mega como un chiste malo: funciona a 80Mhz, tiene una memoria SPI de 512kB (hay versiones con 4MB), soporte IPv4, WPA y WPA2, SPI, I2C, PWM…
Las pegas: funciona a 3.3v y consume 200mA a pleno funcionamiento. ¿Qué significa esto? Pues que no se puede alimentar con un Arduino (necesitaremos alimentarlo separadamente) y también necesitaremos un conversor de niveles de 5v a 3.3v. No son problemas muy graves, ya que existen conversores de 5v a 3.3v como el AMS1117:

Y también tenemos conversores de niveles como este de 4 canales:

Además para programarlo necesitaremos un conversor serie-usb como en el caso de los Arduinos más básicos que use señales TX y RX a 3.3v. Vamos, que si queremos reducir el tamaño del proyecto necesitaremos el modulo y varios conversores o… el NodeMCU. ¿Qué es el NodeMCU? Pues es una de las versiones todo en uno que hay en el mercado que incluye el ESP8266-12 con el conversor serie-micro usb y el conversor de 3.3v para alimentar la placa (que sale por unos 7€ en ebay):

Llegados a este punto yo me decantaría por la versión NodeMCU, que es conectar y listo. Con la versión ESP-01 tendríamos que montar algo así para empezar:
Con el NodeMCU tendremos el mismo montaje pero ocupando una tercera parte de la protoboard de la imagen anterior. A pesar de todo le veo una ventaja indiscutible al modulo ESP-01: para meterlo en una caja es ideal ya que ocupa muy poco (menos que un modulo nrf24l01+). Imaginaos un sensor de temperatura wifi: con un ESP-01 es prácticamente trivial el montaje. O un enchufe radiocontrolado como veíamos en una entrada anterior reconvertido a enchufe wifi-controlado (alguien ya lo ha hecho, lo podéis ver aquí). Las posibilidades son ilimitadas. En mi caso me gustaría probarlo para controlar una electroválvula vía wifi en lugar de tener que usar un Arduino con un modulo ENC28J60 conectado a un PLC para que la señal llegue desde el ordenador hasta el lugar donde está instalada la electroválvula, pasaría de un coste de unos 28€ (Arduino+ENC28J60+PLC) a 7€ (NodeMCU) que es ¡cuatro veces menos! y ¡el montaje ocuparía muchísimo menos! Todo son ventajas (si tienes cobertura wifi :)).
Vale, todo esto está muy bien pero ¿cómo se le meten programas al ESP8266? No estamos en un blog que te venden el aparato y ya está, ¡queremos saber como funciona! ¡queremos conectarle cosas y ver lucecitas parpadeando! Si sí, a ello vamos. Con el NodeMCU es todo igual, y como lo complicado es conectar los módulos por separado vamos a hacerlo así: complicado.
Los materiales que necesitaremos son lo siguientes:
Cantidad | Descripción | Coste | Tienda |
---|---|---|---|
1 | Modulo Wifi ESP8266 01 | 2,38€ | Ebay |
1 | Conversor DC-DC 5v a 3.3v | 0,60€ | Ebay |
1 | Fuente de Alimentacion 5v | 2,96€ | Ebay |
Varios | Cables para puentear | 1€ | |
1 (opcional) | Adaptador DC a protoboard | 3€ | Ebay |
1 | Protoboard | 2,05€ | |
11,99€ |
Hacemos el siguiente montaje:

Una vez lo tenemos todo conectado, recomiendo volver a comprobar todas las conexiones:
- La alimentación del módulo ESP va a 3,3v,
- Los pines RX y TX del módulo ESP van cruzados a los pines TX y RX del conversor serie USB,
- Todas las conexiones GND están unidas.
- Muy importante: El conversor serie-USB debe funcionar a 3,3v y no a 5v como lo hacen la mayoría. Si no tenéis uno así compradlo, los hay bastante baratos. Incluso los hay que funcionan con los dos voltajes, cambiando un interruptor de posición, como es el caso del UartSBee que es el que yo suelo usar, y podeis ver en la imagen de arriba.
Una vez tenemos todo conectado, comprobado, y vuelto a comprobar, conectamos la fuente de alimentación de 5v y el cable USB al equipo. Ahora necesitamos un programa para interactuar con el puerto serie, se puede usar el que viene con el entorno de Arduino, putty, ESPlorer, o como me gusta a mi (difícil y espartano) el picocom:
Ejecutamos el siguiente comando y abrimos el terminal ttyUSB0:
picocom --omap crcrlf --emap crcrlf /dev/ttyUSB0 -b 115200
La velocidad de funcionamiento suele ser 115200 o 9600, deberéis probar con las dos para ver a que velocidad esta configurado vuestro módulo.
No sale nada, ¿qué pasa? El módulo está a la espera de recibir comandos. ¿qué comandos? Pues comandos AT. Sí, retrocedemos 20 años y volvemos a configurar aparatos con comandos AT. El primero comando que podemos usar es AT+RST para resetear el módulo y ver que todo esta funcionando correctamente:
No os preocupéis si os aparece un montón de basura, es normal, y depende de la versión del firmware que tenga grabada el módulo. Para ello usamos el comando AT+GMR:
Vamos ahora con algo un poco más interesante: vamos a conectar nuestro módulo a una red wifi. Los comandos que usaremos son AT+CWMODE=1 para poner el módulo en modo cliente de un AP, AT+CWLAP para que el módulo nos muestre la lista de APs que están a su alcance, AT+CWJAP=»ssid»,»password» para unirlo a la wifi, AT+CIPSTATUS para comprobar el estado de la conexión, y AT+CIFSR para que nos muestre la dirección IP y MAC del módulo:
Probamos a hacerle ping…
Y ahí lo tenemos, nuestro módulo respondiendo a los pings que le hacemos desde un PC en la red… En las siguientes entradas configuraremos el módulo para actualizarle el firmware y haremos un pequeño programa para controlar una placa de reles que active y desactive un dispositivo conectado a 220v…
Espero que os haya gustado el ESP8266 y os animéis a echarle un vistazo, porque ¡tiene montones de posibilidades!
Muy bueno el post!!. Por lo que veo hace un tiempo que no hay nuevas entradas, ojalá no este abandonado por que tienes entradas bastantes útiles. Saludos
¡Gracias Felipe! No esta abandonado, solo que por motivos personales me he tomado un descanso, pero sigo teniendo abiertos varios ‘temas’ con el blog…
La vida a veces te lo pone todo patas arriba y hace falta un tiempo para volver a poner cada cosa en su sitio, jejejeje, en ello estoy, y el blog seguirá adelante muuuuuuucho tiempo 🙂
Recomiendo que mireis el proyecto ESPeasy http://www.letscontrolit.com/wiki/index.php/ESPEasy A mi me ha venido genial para integralo con openhab mediante mqtt
Un saludo
Parece muy muy interesante, muchisimas gracias por el apunte 0scar! 🙂