En principio, cualquiera de los módulos wifi ESP8266 puede programarse utilizando los lenguajes que hay disponibles para ellos (también cualquier IDE) así que la elección depende principalmente de la implementación hardware. El matiz más relevante que podría hacerse a esto sería, en todo caso, la cantidad de memoria disponible.
Aunque inicialmente algunos módulos estaban estrechamente vinculados con ciertos lenguajes o entornos de desarrollo, el ejemplo más claro de esto es NodeMCU y el lenguaje Lua, actualmente es relativamente sencillo usar cualquiera de los disponibles con cualquier módulo.
La normativa del sitio (del país) en el que se va a implementar un dispositivo que contenga el módulo wifi ESP8266 seguramente es lo más restrictivo a la hora de diseñar equipos que deban homologarse o autorizarse para su venta. En tales casos, el primer paso es descartar los que no cumplan la normativa correspondiente (que por suerte será raro que estén a la venta) o verificar la homologación del módulo que se haya escogido. Si la serie que se fabrique es lo bastante grande, seguramente se utilicen los componentes directamente en el diseño del circuito (y no un módulo) y el proceso sería entonces el habitual para obtener los correspondientes permisos de comercialización.
Antes de ver la lista con los datos objetivos para elegir vuestra propia opción, permitidme que exponga cuáles son mis recomendaciones para cada escenario y explique por qué lo son.
Tanto si se va a programar en Lua como si no, la solución más completa, que no necesita de otros componentes, perfecta, por ejemplo, para un curso de programación de microcontroladores en el que las redes (wifi) estén involucradas, como en el caso de Internet de las cosas (IoT), es NodeMCU. No necesita un adaptador USB para conectar al ordenador, encaja en una placa de pruebas (protoboard o breadboard) o se puede usar fácilmente con conectores de tipo Dupont. Más que un módulo, se trata de una placa de desarrollo equiparable, por ejemplo, a una placa Arduino.
Si en tu laboratorio o taller no es problema contar con un adaptador USB–UART, la ESP-201 de AI-Thinker es una versión barata de la placa de desarrollo NodeMCU. Está diseñada para ser utiliza con conectores de tipo Dupont más que en una placa de pruebas; de hecho, la versión que se comercializa con las patillas soldadas a la placa suele disponer una de las tiras de manera que no se puede insertar en una breadboard salvo que se retire y se suelde en la superficie contraria. La rotulación de las patillas tampoco es muy amistosa: parte están el anverso y parte en el reverso por alguna excelente razón que desconozco.
Cuando sea necesario desarrollar una aplicación que necesite una buena cantidad de memoria, más de los 4 Mbit habituales, puede utilizarse una versión especial del ESP8266, el módulo ESP-12F de AI-Thinker, que dispone de una memoria flash de 32 Mbit (además de 96 Kbytes de RAM) y tiene un precio excelente, el más barato que he encontrado con esa memoria.
De las 32 patillas de que dispone el encapsulado QFN solamente 17 son de entrada-salida (excluyendo la conexión de antena y el oscilador externo) y de ellas solo dos, GPIO4 y GPIO5 están asignadas en exclusiva como GPIO, ya que las demás comparten función y se debe elegir si se utilizan, por ejemplo, para las comunicaciones serie o para entrada-salida digital genérica.
Así que ninguno de los módulos que incluyen el SoC ESP8266 pueden ir precisamente sobrados de puertos GPIO pero desde la versión ESP-03 aparecieron varios modelos de módulos con más patillas, y las correspondientes funciones disponibles. Estos nuevos módulos, especialmente el ESP-07, el ESP-12 y la mayoría de los que le han seguido, permiten más fácilmente realizar circuitos en los que el ESP8266 no solo se encarga de las comunicaciones wifi sino que es también el microcontrolador que gestiona el dispositivo.
Para poder utilizar cómodamente en las pruebas el mismo módulo que se incluirá en el circuito definitivo, existen placas en cuya superficie soldar el módulo y que cuentan con conexiones para patillas con la separación estándar de una placa de pruebas (una décima de pulgada).
Algunas de estas placas incluyen circuitería para convertir la alimentación y los niveles de tensión de las comunicaciones entre 3,3 V y 5 V de forma que puedan comunicarse también con dispositivos (o con un µC) que funcionen con ese voltaje.
Como este tipo de accesorio estaba inicialmente diseñado para los módulos ESP8266 ESP-07, que no disponen de conexiones en la parte opuesta a la antena, será necesario renunciar a ellas en los modelos más nuevos, como el ESP-12E, ESP-12F, ESP-13…, conectarlas manualmente (con un cable en la parte superior) o diseñar nuestra propia placa-adaptador también con nuestro propio diseño de circuitería extra para convertir el nivel serie, la alimentación, añadir expansores de puertos GPIO… Si no tienes muy claro cómo hacerlo, en artículos anteriores del blog puedes encontrar algún truco para cómo poner pines a un componente de montaje de superficie como estos módulos que usan el ESP8266.
Si en el montaje ya hay un MCU, es decir, el ESP8266 no es el microcontrolador principal del dispositivo, la primera versión del módulo, la ESP-01, es perfectamente funcional e imbatible en precio, especialmente si se compran lotes de varios módulos (cuando se adquiere solamente un módulo, difícilmente superará 1 € de diferencia con otros modelos).
Para resolver el inconveniente de la disposición de las patillas en el módulo ESP-01 a la hora de usarlo en una placa de pruebas (protoboard o breadboard), se puede recurrir a algún accesorio como el de las imágenes de abajo, que además resuelve las diferencias de tensión que existen cuando se usan, por ejemplo, con las placas Arduino de las series alimentadas a 5 V. De forma más artesana, se puede recurrir a alguno de los trucos para conectar a una breadboard un módulo con una tira de pines doble.
Otra ventaja de los accesorios como el que se muestra en las imágenes de abajo, es que disponen de un pulsador (casi siempre), un interruptor o un puente para cargar un nuevo firmware en la memoria flash del SoC wifi ESP8266.
Para usar el ESP8266 en condiciones más específicas, con poco espacio en la placa del montaje, cuando sea necesario contar con una antena externa, en situaciones de presencia de interferencias… necesitarás afinar un poco más; para hacerlo, espero que te resulte útil la siguiente lista de características. He utilizado como referencia la serie de módulos de la compañía AI-Thinker que es la más completa y he añadido la placa de desarrollo NodeMCU porque me parece que es la más popular.
-
ESP-01
Dimensiones: 14,30 mm × 24,80 mm
Conexiones: 8 patillas entre alimentación y GPIO
Antena impresa en la PCB
Sin apantallar
Alimentación: 3,3 V
Para ser precisos, las versiones más nuevas incluyen el ESP8266EX y las primitivas el modelo inicial del ESP8266 (sin EX). Aunque ya es difícil encontrar el más antiguo, es importante estar atentos a la hora de elegir el módulo para optar por la versión moderna.
-
ESP-02
Dimensiones: 14,20 mm × 14,20 mm
Conexiones: 8 conexiones de superficie (es viable soldar patillas de 0,1 ")
Sin antena en la placa pero con un conector para antena externa
Sin apantallar
Alimentación: 3,3 V
-
ESP-03
Dimensiones: 17,30 mm × 12,10 mm
Conexiones: 14 conexiones de superficie en los dos lados mayores
Antena de tipo cerámico
Sin apantallar
Alimentación: 3,3 V
-
ESP-04
Dimensiones: 14,70 mm × 12,10 mm
Conexiones: 14 conexiones de superficie en los dos lados mayores
Sin antena
Apantallado
Alimentación: 3,3 V
-
ESP-05
Dimensiones: 14,20 mm × 14,20 mm
Conexiones: 8 patillas separádas una décima de pulgada en una única tira
Sin antena en placa pero con un conector para una antena externa
Apantallado
Alimentación: 3,3 V
-
ESP-06
Dimensiones: 14,20 mm × 14,70 mm
Conexiones: 12 conexiones bajo la placa
Sin antena
Apantallado
Alimentación: 3,3 V
-
ESP-07
Dimensiones: 20,00 mm × 16,00 mm
Conexiones: 16 conexiones de superficie en los lados mayores de la placa
Antena cerámica u conector para antena externa
Apantallado
Alimentación: 3,3 V
-
ESP-08
Dimensiones: 17,00 mm × 16,00 mm
Conexiones: 16 conexiones de superficie en los lados mayores de la placa
Sin antena
Apantallado
Alimentación: 3,3 V
-
ESP-09
Dimensiones: 10,00 mm × 10,00 mm
Conexiones: 18 conexiones bajo la placa (6 de las cuales van a masa)
Sin antena
Sin apantallar
Alimentación: 3,3 V
-
ESP-10
Dimensiones: 14,20 mm × 10,00 mm
Conexiones: 5 conexiones de superficie en uno de los lados menores
Sin antena
Sin apantallar
Alimentación: 3,3 V
-
ESP-11
Dimensiones: 17,30 mm × 12,10 mm
Conexiones: 8 conexiones de superficie en el lado opuesto a la antena
Antena cerámica
Apantallado
Alimentación: 3,3 V
-
ESP-12
Dimensiones: 24,00 mm × 16,00 mm
Conexiones: 16 conexiones de superficie dispuestas en los dos lados mayores
Antena impresa en la PCB
Apantallado
Alimentación: 3,3 V
-
ESP-12-E — ESP-12-F
Dimensiones: 24,00 mm × 16,00 mm
Conexiones: 22 conexiones de superficie dispuestas en tres lados (8+8+6)
Antena impresa en la PCB
Apantallado
Alimentación: 3,3 V
-
ESP-13
Dimensiones: 18,00 mm × 20,00 mm
Conexiones: 18 conexiones de superficie situadas en los dos lados menores
Antena impresa en la PCB
Apantallado
Alimentación: 3,3 V
-
ESP-14
Incluye un STM8 que se encarga de controlar el ESP8266 por medio de órdenes AT
Dimensiones: 24,30 mm × 16,20 mm
Conexiones: 22 conexiones de superficie dispuestas en tres lados (8+8+6)
Antena impresa en la PCB
Apantallado
Alimentación: 3,3 V
-
ESP-WROOM
Dimensiones: 18,00 mm × 20,00 mm
Conexiones: 18 conexiones de superficie dispuestas en los lados mayores
Antena impresa en la PCB
Apantallado
Alimentación: 3,3 V
-
NodeMCU
Basado en ESP-12
Dimensiones: 30,85 mm × 47,35 mm
Conexiones: 30 patillas separadas una décima de pulgada y USB
Antena impresa en la PCB
Apantallado
Alimentación: 3,3 V y 5 V
Pulsadores user y programación (flash)
-
ESP-201
Dimensiones: 26,00 mm × 33,50 mm
Conexiones: 26 patillas separadas una décima de pulgada y distribuidas en dos tiras de 11 a cada lado (que encajan en una placa de pruebas) y 4 perpendiculares que, al estar soldadas en el mismo lado, no es posible usar en una placa de pruebas.
Antena impresa en la placa y conector para una antena externa. Debe elegirse entre una opción u otra desoldando un puente (una resistencia de 0 Ω, por defecto utiliza el conector externo por lo que la mayoría de las placas ESP-201 se venden con una pequeña (especie de) antena. Algunas versiones antiguas tienen el conector de antena mal soldado (girado 180°) y es necesario recolocarlo o la antena (externa) no sirve de nada.
Sin apantallar
Alimentación: 3,3 V
Otros módulos o placas de desarrollo que incorporan el ESP8266
Ni más ni menos que por la extraordinaria diferencia del precio base, que se incrementa con unos abultados gastos de envío, en el sur de Europa no se utilizan mucho las excelentes placas de Adafruit o de SparkFun y sospecho que excepto en el norte de América tendrán difícil competir con sus contrapartes chinas. Las alternativas que sí pueden verse por aquí son las de la casa WeMos (que también viene de China) y las de Olimex, que llega desde Europa y tiene una excelente calidad.
La D1 mini pro de WeMos es una placa de desarrollo equiparable a la NodeMCU, ya que dispone de un conector USB, puede usarse en una placa de pruebas, puede alimentarse a 5 V, tiene un botón de reset, 4 MB de memoria flash… aunque en un formato más reducido ya que tiene 16 patillas a una décima de pulgada.
Existen muchos módulos con sensores y actuadores que pueden conectarse de manera muy sencilla para utilizarse con la WeMos D1 mini pro, un poco al estilo de los «escudos» (shields) de Arduino. Aunque no he encontrado un kit completo, seguramente se comercializará algo parecido y, entre otras cosas por precio, sería una alternativa muy buena para un aula de programación de microcontroladores.
Olimex comercializa dos productos basados en el ESP8266: el MOD-WIFI-ESP8266 y el MOD-WIFI-ESP8266-DEV, que vienen a ser, como sus prosaicos nombres sugieren, un módulo (10 patillas) y una placa de desarrollo (22 patillas que además encajan en una placa de pruebas). Ambos dispositivos tienen 2 MB de memoria flash y una antena impresa en la placa de circuito pero permiten fácilmente añadir una antena externa. Olimex también ofrece un par de placas para hacer pruebas con la versión de desarrollo, pero por su precio-componentes no son muy competitivos comparándolos con otros módulos genéricos.
La serie de productos de Adafruit que incluyen el SoC ESP8266 está formada por la placa HUZZAH ESP8266 breakout y la placa Feather HUZZAH (con wifi ESP8266). La primera es su opción para desarrollo y la segunda, aunque es bastante versátil, está diseñada principalmente para producción, como sugiere su conexión (más o menos estándar) a batería externa, que en la placa HUZZAH ESP8266 breakout es sólo una patilla. Además, en la opción para desarrollo, pueden encontrarse tanto un pulsador de reset, presente también en la de producción, como otro de programación que las placas Feather HUZZAH no incluyen. La placa de producción cuenta también con un conector USB
Ambos productos de Adafruit se pueden utilizar con patillas de un décimo de pulgada de separación y cuentan con 26 conectores en el caso de la placa Adafruit HUZZAH ESP8266 breakout y 32 conectores la placa Adafruit Feather HUZZAH. Las dos están basadas en el módulo ESP-12, así que, salvo por las características del circuito en el que se dispone (como la conexión de batería) las prestaciones son las mismas que tiene este dispositivo.
La casa SparkFun comercializa cuatro productos basados en el SoC wifi ESP8266. Por un lado, ofrece el escudo para Arduino SparkFun WiFi Shield cuya principal característica es, precisamente esa: poder disponerse fácilmente sobre una placa Arduino.
Por otra parte, SparkFun también cuenta con la placa Blynk Board, cuyo objetivo principal es desarrollar productos para teléfonos móviles como una opción de entrada a la Internet de las cosas. Sus conectores son bastante sencillos de utilizar, incluso por usuarios que no estén habituados al montaje de componentes electrónicos: se pueden conectar con pinzas de cocodrilo además de en una placa de pruebas (protoboard o breadboard) y dispone de conectores verticales con guías para los sensores además de una conexión USB. Existen varios juegos de sensores para pruebas y se vende con una suscripción a una especie de nube para las aplicaciones desarrolladas con este dispositivo.
Las opciones de SparkFun que seguramente resultarán más interesantes a los desarrolladores cercanos a la electrónica son las de la serie Thing: la placa ESP8266 Thing para explotación y la placa ESP8266 Thing – Dev Board, para desarrollo. Una de las diferencias más destacables que existe entre ellas es la posibilidad de alimentar cómodamente la versión de producción con una batería. Ambas disponen de un interruptor (no recuerdo ninguna otra placa ESP8266 que lo tenga), conexión USB, 20 espacios (10+10) para pines de una décima de pulgada y un conector para una antena externa.
Por supuesto, hay muchas más placas de desarrollo o de aplicación que utilizan el ESP8266 pero, en general, se centran en añadir valor integrando otros componentes y sobre todo aportando opciones de desarrollo, especialmente para usar la nube, como es el caso de Blynk Board de SparkFun o ESPresso Lite diseñada por Espert y que distribuye Cytron.
Edelmiro
Un artículo muy bien explicado y documentado. He descubierto tu pagina esta mañana y ya la he añadido a mis favoritos. Sigue así. Muchas gracias
Víctor Ventura
🙂
Emeraldo Ramos
La verdad es que cuando uno anda a oscuras y encuentra una luz como esta, inevitablemente la valoras.
Gracias de verdad por esta valiosa información.
José Aguirre
Si señor. Me pasó igual !!!. Felicitaciones.
José Aguirre
Edelmiro: excelente tu exposición. Todos los interrogantes de estos nuevos módulos clara y sintéticamente explicados. Más aún, el único artículo que pude encontrar que dijera claramente que independientemente de cuál fuere el modelo de ESPxxxx que se trate, se puede programar con el IDE de Arduino. Y ahí precisamente me surge una duda: por qué motivo el IDE de Arduino hace diferencias con NodeMCU y con ESP8266?. Yo entendí que tratándose del mismo firmware, sería indistinto considerarlo un Node o un ESP. Como seguramente habrás observado, en youtube hay un vídeo para cada cosa y no pareciera que los autores los consideren como iguales. Compré un NodeMCU que se supone trae un ESP12F (no pude encontrar la versión F, siempre está la E), originalmente lo probé con comandos AT y ejecutava tales comandos directamente a 115200bps, luego lo flashée con la versión de «Korothov».
Hace exactamente lo mismo que un humilde módulo «suelto» ESP8266 12E que supe montar hace algún tiempo con un par de baterías AA y un adapatador USB/rs232 convertido a 3,3V. Nuevamente mis felicitaciones por lo impecable de tu artículo. Mis saludos. j.a.
Víctor Ventura
En el artículo sobre la programación del ESP8266 desde el IDE de Arduino hay algunas pistas sobre por qué se distingue entre módulos con el mismo MCU. Además de las más evidentes, como la cantidad de memoria disponible o las frecuencias del ESP8266 y de la flash, hay al menos un par de razones importantes para distinguir entre módulos en el IDE: el modo de reinicio (nodemcu, ck o wifio) y el modo de conexión de la memoria flash (DIO, QIO, DOUT o QOUT).
Gracias por participar en polaridad.es
jorge
Hola muy bueno el articulo, te consulto, soy nuevo en esto y tengo un Esp14, acostumbrado al esp01 con los puertos GPIO0, 2 etc. en el esp14 no se cual seria el puerto 2, el ADC etc. me podrias ayudar. Gracias
Víctor Ventura
Hola, Jorge.
El módulo ESP-14 es una de las implementaciones «especiales» del ESP8266. Más que considerarse como una mejora de, por ejemplo, el ESP-12, hay que verlo como una versión alternativa de los anteriores.
Dentro del módulo ESP-14 hay, además de un ESP8266 (como cabría esperar) un STM8, que es el que comunica (usando órdenes AT del ESP8266) con el SoC ESP8266, haciendo de intermediario con el MCU principal (el que tú programas, un Arduino, por ejemplo).
El pinout que se expone en el módulo (con un par de excepciones imprescindibles) es el del STM8, no el del ESP8266, de ahí suele derivarse el problema de algunos usuarios, que optan por un ESP-14 porque su nombre comercial induce a pensar que es una versión más avanzada de los módulos de AI-Thinker, no por ser una alternativa que añade un MCU.
En la imagen de abajo hay una descripción del pinout del ESP-14 que indica la correspondencia con el pinout del STM8. Te recomiendo que eches un vistazo a la hoja de datos del STM8 para obtener información sobre cómo uso.
José Manuel
Hola Victor,
Tengo un problemilla, bueno un gran problema. Yo novato en esto de la programacion y electronica. Me he decidido hacer un controlador para mi acuario. Me he comprado un arduino, pantalla lcd… y un modulo Wi-Fi (ESP8266-201) porque me parecio muy chulo encender las luces desde el movil. Todo lo demas ya lo tengo montado y funcionando, pero el Wi-Fi no lo consigo encender. No se ni como conectar los cables, ni como darle ordenes al Wi-Fi. Por favor, necesito ayuda.
Gracias
Víctor Ventura
Hola, José Manuel.
Me encantaría ayudarte, y seguro que a muchos lectores, pero no sé, en concreto, qué necesitas y qué tienes ya.
Para controlar luces (¿son LED?) con un MCU (como el ESP8266) puedes utilizar transistores, relés o drivers específicos ¿Cómo son esas luces? ¿Son componentes básicos o un producto comercial concreto (que a lo mejor prefiere un tipo de interfaz)?
Para enviar órdenes al ESP8266 desde un smartphone puedes crear una conexión wifi ad hoc o implementar un pequeño servidor web en el ESP8266 al que se conectaría el smartphone con un navegador web, lo que te ahorraría desarrollar una aplicación para el teléfono.
Aunque buscando en los artículos del blog puedes encontrar bastante información sobre estos aspectos, para darte una respuesta desde cero, con la que pudieras desarrollar tu propio proyecto, necesitaría escribir un par de artículos (y a lo mejor lo hago algún día). Si tienes prisa, te recomiendo que busques un proyecto similar al tuyo y lo sigas hasta entenderlo bien y luego lo modifiques a tu gusto. Si no tienes prisa, lo que puedes hacer es ir resolviendo problemas pequeños (dividiendo en objetivos pequeños el proyecto completo); yo empezaría por lo del servidor web y el control desde una página a la que se accede con un navegador web en el smartphone; a lo mejor te encuentras que te resuelve bastante de lo que quieres.
Vuelve pronto por polaridad.es a ver si los nuevos artículos te ayudan un poco más 😉
José Manuel
Gracias Victor,
Lo primero que quiero hacer es conectar el modulo a arduino (Que no tengo ni idea de que cables conectar con cual).
El resto iré intentandolo resolver yo mismo.
Paco Díaz
Buenas noches y gracias por estos grandes articulos.
Tengo un problema con windows 10 y la NodeMCU LUA 12e, y es que no consigo que me detecte el IDE arduino la NodeMCU, creo que es un problema del puerto en windows.
Al pinchar el usb de la NodeMCU en el pc no detecta nada, ni avisa de nueva conexión.
¿Qué crees que puede ser?
Muchas gracias por todo.
Sebastián
Estimado Victor,
Primero que nada agradecerte por el post, es muy bueno y para aquellos que nos estamos iniciando en esto nos ahorra mucho tiempo!!!
Estoy comenzando un proyecto en el cuál quiero construir unos bloques inteligentes que se conecten a un ordenador de manera inalámbrica. Los bloques incluirán los siguientes elementos:
– 2 leds
– 2 Ldr
– 1 mini motor que vibre, algo así: https://www.adafruit.com/product/1201
– Algún pin libre para futuras expansiones.
Además la placa debe ser lo mas pequeña posible, por lo tanto de los módulos ESP que comentas en el post, creo que el mas adecuado es el ESP-07 ya que tiene varios I/0 pins y es de los mas pequeños. Coincides?
Lo que debo resolver ahora mismo es cómo voy a alimentar los bloques para que tengan suficiente autonomía, y aquí voy un poco perdido. Es posible conectar una pila pequeña que haga funcionar los módulos? (una de las de reloj sería ideal porque son pequeñas). Podrías aconsejarme cuál es la mejor solución? Cuanto puede durar una batería lipo de las pequeñas (200 – 500mAh por ejemplo)? El módulo esp-07 y la batería deberían entrar en un cubo de 3x3cm…
Gracias nuevamente por el artículo!
Saludos!
Oslaf
Hola, excelente artículo. Tal vez lo pasé por alto pero no tengo claro si un código escrito con ayuda de el IDE de Arduino para el NodeMCU v2 puede usarse con el Wemos D1 Mini. Podrían por favor aclararme este punto. Muchas gracias.
Raul
Realmente asombroso!!!!! muchísimas gracias por hacer algo tan perfecto!
carlos
Excelente articulo. Solo una consulta como renicio el ESP-14? una vez que logre cargar el sketch de arduino no logro hacer arrancarlo. Unicamente si mantengo conectado el convertidor USB a la PC funciona. Agradecere su ayuda.