Una de las pocas cosas que le falta al ESP8266 para ser perfecto es una conexión USB. Esto es todavía más cierto para el ESP-01, pues existen otros diseños como el NodeMCU o el Wemos que le añaden externamente la comunicación USB. Por esta razón necesitaremos un adaptador USB-UART para poder programarlo desde un PC.
Programadores
En principio existen adaptadores específicos para programar el ESP-01, aunque no he probado ninguno.
Pero en caso de no tener uno a mano, siempre hay otras alternativas.
Alternativas
Una primera alternativa, sería construirse un adaptador desde cero. Pero, salvo disponer de los componentes específicos y habilidades de soldadura (y tiempo!!!), no parece una gran idea.
En la segunda alternativa que encontré se emplea la tarjeta de Arduino UNO, pero al no disponer de una en ese momento, tampoco llegué a probarlo. Además, leyendo el blog, parece que tiene un par de “inconvenientes”:
- El Arduino UNO dispone de un regulador interno de 3.3V, pero este parece que provee insuficiente corriente para alimentar el ESP-01, que funciona a 3.3V, por lo que se requiere de un regulador externo.
- Hay que adaptar la tensión de la recepción del ESP-01 a 3.3V. Ya que el Arduino UNO funciona a 5V.
Usando NodeMCU
La tercera alternativa, motivo de esta entrada, me vino rodada al haber comprado un NodeMCU y pensar en la segunda opción. El NodeMCU consta principalmente de 3 elementos:
- Regulador de 3.3V con corriente suficiente.
- Conversor USB-UART que funciona a 3.3V.
- Módulo ESP-12F (que funciona a 3.3V al igual que el ESP-01, razón por la que todo lo demás funciona también a 3.3V).
Por lo que haremos uso de los 2 primeros para la programación, lo que nos ahorrará los componentes externos de usar un Arduino UNO. El ESP-01 se conectará “sustituyendo” al ESP-12F.
Elementos
Necesitaremos lo siguiente:
- NodeMCU.
- 7 cablecillos hembra-hembra, ambas tarjetas tienen pines. Idealmente, 2 negros (GND), 2 naranjas (3.3V) y los otros 3 de colores distintos.
- Cable USB A – micro B.
- ESP-01 a programar.
Conexionado sobre NodeMCU
Una cosa interesante de NodeMCU es que sobre cada pin se encuentra serigrafiado su uso, lo que nos facilita la identificación de los pines a la hora de las conexiones.
Primero conectaremos un cablecillo (en la foto el azul) entre el pin de reset (RST) y uno de GND (están juntitos). Esta conexión es importante pues, como hemos dicho, el ESP-01 sustituye al ESP-12F, así que al mantener este último en reset es como si no existiera (conocido como estado de alta impedancia). Si no se realizase, el sistema no funcionaría (pues ambos módulos se estarían interfiriendo), pudiendo incluso llegar a estropearse alguno.
Ahora buscaremos 2 pines de GND y le conectaremos los cables negros, luego 2 pines de 3.3V y a estos los cables naranjas. Los dos cables restantes los conectaremos a RX y TX y ya están hechas todas las conexiones en el NodeMCU.
Conexionado sobre ESP-01
Para realizar las conexiones sobre el ESP-01 necesitamos conocer los pines:
La correspondencia entre los pines del ESP-01 y NodeMCU es la siguiente:
- VCC – 3.3V
- GND – GND
- CH_PD – 3.3V
- GPIO0 – GND (esta conexión indica al ESP-01 que va a ser programado)
- U0TXD – TX
- U0RXD – RX
- EXT_RSTB – al aire
- GPIO2 – al aire
EXT_RSTB y GPIO2 han de estar a 3.3V también. Pero parece que disponen de pull-ups internos por lo que no he necesitado realizar las conexiones. Si te falla la programación, puedes probar a añadirlas.
IMPORTANTE: Cuando se quiere comunicar 2 sistemas hay que conectar la transmisión de uno con la recepción del otro, y viceversa. Como se puede ver, aquí se ha conectado TX con TX y RX con RX, lo que puede parecer contradictorio. La explicación a esto se encuentra en el NodeMCU, en el cual los pines TX y RX son indicados desde el punto de vista del ESP-12F, que no usamos, que está conectado al conversor USB-UART. Por lo tanto el pin TX del NodeMCU está conectado a la recepción del conversor y viceversa, que es lo que necesitamos.
Por último solo quedará conectar el NodeMCU al PC con el cable USB para realizar la programación.
Programación
lo primero que habrá que hacer, si no lo has hecho ya, es configurar el entorno Arduino para utilizar el procesador ESP8266. Aquí tenéis como hacerlo, allí el ejemplo es con otro procesador así que en este caso habrá que poner http://arduino.esp8266.com/stable/package_esp8266com_index.json como URL de tarjetas adicionales.
No existe una tarjeta específica para ESP-01 por lo que habrá que seleccionar “Generic ESP8266 module” y después seleccionar las características de nuestro módulo. Muestro aquí las que a mi me han funcionado:
- Flash mode: DIO
- Crystal frequency: 26MHz
- Flash frequency: 40MHz
- CPU frequency: 80MHz
- Upload speed: 115200
- Erase flash: Only sketch
- Reset method: ck
- Flash size: 1M (no SPIFFS)
Hay que tener en cuenta alguna cosilla:
- Hay más opciones, pero no tengo claro que estén relacionadas con la grabación del programa. Incluso alguna de las expuestas puede que no tenga relación.
- Hay un par de versiones del módulo, una con 512K y otra con 1M, habrá que seleccionar la memoria correcta.
- Dependiendo del proyecto, es posible que haya que seleccionar parte de la flash para SPIFFS. O incluso seleccionar borrar más partes de la flash.
Y ya solo nos quedará darle al botón de programar y esperar a que termine. Bueno, si es que ya hemos hecho el programa 😛
P.D. otra cosa que no he probado, pero que debería funcionar, es programar el módulo mediante la aplicación esptool. La cual permitiría programar cualquier cosa y no solo sketchs de Arduino.
Muy útil ,use un ESP32 como base. Gracias.
Entiendo que programar un ESP-01 con un NodeMCU es interesante pero por lo que he visto en este artículo https://programarfacil.com/podcast/como-configurar-esp01-wifi-esp8266/ también se puede con un Arduino o un FTDI.
Otra cosa, en este artículo comentan los diferentes tipos de placas NodeMCU https://programarfacil.com/podcast/nodemcu-tutorial-paso-a-paso/ ¿Es esto importante a la hora de programar un ESP-01?
Muchas gracias y buen artículo.
Correcto. El módulo ESP-01 se puede programar con un Arduino o FTDI a través del puerto serie, siempre y cuando se conecten correctamente los cables CH_PD y GPIO0 y RESET.
Para programar el módulo será necesario activar el RESET, pero hay módulos Nodemcu que ya te facilitan el modo de programación solo con conectarlos por USB. El ESP-01 es quizás el modelo más complicado de conectar los pines.
Un saludo