Esta librería de Arduino no funciona en ESP. ¿Como la hago funcionar?¶
- Introducción
- Identifica los problemas
- Repáralo tú mismo
- Errores de compilación
- Excepciones / Reset por Watchdog
- Problemas de funcionalidad
- Conclusión
Introducción¶
Te gustaría usar una librería de Arduino con ESP8266 y no funciona. No aparece en la lista de las bibliotecas verificadas para trabajar con ESP8266. No puedes encontrar ninguna evidencia en internet de que sea compatible.
¿Cuáles son las probabilidades de hacerla funcionar?
Identifica los problemas¶
Comienza buscando todos los síntomas de que no es compatible con ESP8266. Lo ideal sería utilizar sketch de ejemplo proporcionados con la librería. Luego enumera todos los problemas que puedas identificar.
Es probable que veas uno o más de los siguientes:
- La compilación arroja errores.
- No hay problemas con la compilación, pero la aplicación se reinicia debido a una excepción o watchdog (WDT).
- La aplicación parece funcionar pero no funciona como se esperaba. p.ej los resultados del cálculo son incorrectos.
Armado con la lista de problemas, contacta con el autor de la librería solicitando comentarios. Si los problemas son legítimos, solicita su ayuda para implementarlo en ESP8266. Siendo específico tienes mayores posibilidades de convencer al autor para que te ayude, ya sea actualizando la biblioteca o guiándote para resolver los problemas.
Repáralo tú mismo¶
Si el autor de la librería no puede brindarte soporte, evalúa las posibilidades de solucionarlo tú mismo.
Errores de compilación¶
Problema: El compilador se queja sobre el uso de registros AVR (PORTx, PINx, TCR1A, etc.).
Solución: Comprueba si el uso de los registros está bien localizado en algunas funciones, intenta reemplazar el uso de registros GPIO con digitalRead / digitalWrite, el temporizador registra el uso con funciones timerX_. Si el uso de los registros AVR ocurre en todo el código, es posible que esta librería no valga la pena. También puede valer la pena verificar si alguien consiguió que la biblioteca trabaje en ARM (Due / STM), PIC, etc. Si este es el caso, tal vez ya exista una versión de la biblioteca que use API de Arduino en lugar de registros sin formato.
Problema: El compilador se queja de <avr/pgmspace.h>
..
Solución: modifica la librería agregando inclusión condicional a «pgmspace.h» de ESP.
#ifdef ESP8266
#include <pgmspace.h>
#else
#include <avr/pgmspace.h>
#endif
Excepciones / Reset por Watchdog¶
Para solucionar los reinicios, ve a la sección de la FAQ: «Mi ESP se bloquea al correr el programa. ¿Como lo resuelvo?».
Problemas de funcionalidad¶
Problema: La aplicación funciona pero devuelve valores numéricos extraños.
Solución:: Comprueba el uso del tipo int
en la librería. En AVR, los enteros son de 16 bits y en ESP, son de 32 bits (como en ARM).
Problema: Algunos dispositivos con control de tiempo crítico como un servo controlador o una tira de LEDs tienen problemas y tienden a cambiar aleatoriamente la posición o el patrón mostrado.
Solución:: Comprueba el uso de interrupciones que puedan entrar en conflicto con la actividad WiFi de ESP8266. Puede desactivar temporalmente la comunicación WiFi WiFi.mode(WIFI_OFF);
para comprobar si ayuda.
Conclusión¶
Identifica problemas de compatibilidad y pide ayuda al autor de la librería. Si lo intentas solo, verifica el uso de la funcionalidad de acceso a bajo nivel del controlador. Utiliza ESP Exception Decoder si se enfrenta con excepciones / reset watchdog.
La buena noticia es que la cantidad de librerías no compatibles con el ESP8266 se está reduciendo. La comunidad de entusiastas de ESP8266 está creciendo. Si no puedes resolver los problemas por tu cuenta, existen muchas probabilidades de que puedas encontrar a alguien más que te ayude.