como-convertir-codigo-del-esp8266-al-esp32

Cómo convertir código del ESP8266 al ESP32

  • 4 min

Convertir código del ESP8266 al ESP32 suele ser adaptar librerías y pines, más que reescribir el proyecto desde cero.

El ESP8266 ha gozado de una gran popularidad, tanto en el sector aficionado como en el comercial, y se ha integrado en una gran cantidad de productos debido a su bajo precio. Pero el ESP32 ofrece más memoria, más GPIO, Bluetooth y bastante más potencia, así que es normal querer migrar proyectos de uno a otro.

Además, la familia ESP32 ha crecido mucho y su precio ha bajado bastante. Modelos como el ESP32-C3 han cubierto el hueco de bajo coste que durante años ocupó el ESP8266, manteniendo la conectividad WiFi y añadiendo mejoras importantes.

Así que supongamos que quieres pasar del ESP8266 a su “hermano mayor” el ESP32. No te faltan motivos: sus características son muy superiores y, en muchos proyectos, el cambio compensa bastante.

Pero entonces ¡qué pasa con todos tus programas, y tu código y tu…! Que no cunda el pánico. Normalmente la conversión es sencilla si tenéis en cuenta estos pequeños consejos.

Puede que alguno se esté preguntando por el caso contrario, pasar código del ESP32 al ESP8266. En general, no es posible salvo en programas muy sencillos, dado que el ESP32 tiene mucha más potencia y funcionalidades que el ESP8266.

Librerías WiFi

Los nombres de las librerías cambian entre ESP8266, y ESP32. En el ESP8266 tenían el prefijo ‘ESP8266’, mientras que en el ESP32 carecen de sufijo.

Así, por ejemplo, la librería ESP8266WiFi.h en el ESP32 se llama WiFi.h, la librería ESP8266HTTPClient pasa a ser HTTPClient, y así con el resto de librerías.

En realidad, este cambio en el ESP32 es una mejora. O, dicho de otra forma, es un fallo que los desarrolladores de las librerías del ESP8266 cometieron, y que subsanaron al realizar las del ESP32. La ventaja de no tener prefijo es que puedes compilar el mismo código para otra máquina, sin tener que cambiar nada de código.

Y si queréis hacer que vuestro programa sea compatible con ambos dispositivos, podéis emplear una directiva de precompilación como esta, con los nombres de las librerías oportunas.

#if defined(ESP8266)
    #define HARDWARE "ESP8266"
    #include "ESP8266WiFi.h"

#elif defined(ESP32)
    #define HARDWARE "ESP32"
    #include "WiFi.h"

#endif
Copied!

GPIOS

Aquí no hay mucho que decir. Los GPIO son distintos entre el ESP8266 y el ESP32. Si has acertado en un pin es por pura casualidad. Te tocara mirar que pines quieres usar del ESP32 y cambiarlo en tu código.

Por suerte para ti, el ESP32 tiene muchos más pines disponibles que el ESP8266. Así que, si funcionaba en el ESP8266, es que vas sobrado de pines en el ESP32. Solo tienes que elegir que pines usar.

Función PWM

Las funciones implementadas en el ESP32 no incluyen “analogWrite”, como si tiene el ESP8266. Esto es debido a que el ESP32 dispone de varias formas de generar una señal PWM.

Si tu código en el ESP8266 emplea una salida PWM, lo mejor que puedes hacer es buscar una de las (muchas) librerías que definen la función “analogWrite” en el ESP32, y prácticamente no tendrás que modificar el código.

Resto de librerías

¿Y el resto de librerías del mundo mundial? ¿Para leer sensores, para realizar acciones, para que te lleve un café a la cama? Pues, lógicamente, dependerá de la librería (hay cientos, así que no te lo puedo decir así, en general).

En principio, tienes muchas probabilidades de que funcione directamente en el ESP32, pero dependerá de las funciones internas que use (timer, registros) y de lo “portable” que la hayan hecho sus programadores.

Tendrás que probar y, si tienes mala suerte y no es compatible, buscar un reemplazo. Pero tranquilo, no debería ser difícil. Prácticamente todas las librerías tienen una versión portada para el ESP8266.

Ejemplos del curso

¿Y todos los ejemplos que tenemos en el curso? Pues, igualmente, en la mayoría simplemente hay que tener en cuenta lo que hemos comentado sobre los nombres de las librerías.

Por eso, muchos ejemplos están planteados para ESP8266 y ESP32 cuando tiene sentido. Las entradas específicas de cada procesador, lógicamente, se mantienen separadas.

Además, hemos creado un nuevo repositorio en Github con los códigos adaptados al ESP32, así que tenéis por separado los ejemplos para el ESP8266 y para el ESP32.

github-full

Versión para el ESP8266: https://github.com/luisllamasbinaburo/ESP8266-Examples

Versión para el ESP32: https://github.com/luisllamasbinaburo/ESP32-Examples