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

Cómo convertir código del ESP8266 al ESP32

Hace casi cuatro años que empezamos a hablar del ESP8266 y el ESP32. Mucho ha llovido durante este tiempo en el ámbito de estos dos interesantes SoC.

En este tiempo 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.

Sin embargo, a su vez, el ESP32 ha bajado considerablemente su precio. Además, recientemente, Espressif ha comentado su intención de obsoletizar el ESP8266 y reemplazarlo por el nuevo ESP32-S3.

Así que supongamos que quieres pasar del ESP8266 a su “hermano mayor” el ESP32. No te faltan motivos ya que, como vimos en esta entrada, sus características son muy superiores.

Pero entonces ¡Que pasa con todos tus programas, y tu código y tu… ! Que no cunda el pánico… Normalmente es muy sencillo convertir un programa del ESP8266 al ESP32 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

GPIOS

Aquí no hay mucho que decir. Los GPIO entre el ESP8266 y el ESP32 son totalmente distintos. 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 blog

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

Así que hemos actualizado todas las entradas del blog que fueran posibles (salvo las específicas de cada procesador) para hacer referencia a ambos procesadores. Las entradas futuras seguirán este criterio.

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