Si tienes un proyecto con un ESP32 con audio en el que emplees la biblioteca ESP8266Audio igual te has llevado la desagradable sorpresa de que no te funciona.
Este problema ocurre cuando empleamos la biblioteca ESP8266Audio con un Core del ESP32 superior al 2.0.3. Entonces… ¡POOM! 💥
Si al compilar te tira un error diciendo que SPECIAL
no está definida, es decir, una cosa así, pues es que a ti también te pasa. ¡Pero tranquilos, que tiene fácil solución!
error: 'SPECIAL' was not declared in this scope pinMode(sck, SPECIAL);
Lógicamente el problema surge debido a cambios en la definición Core del ESP32 para Arduino, que generan una incompatibilidad con la librería ESP8266Audio, impidiendo su correcto funcionamiento.
Afortunadamente, cosicas de la comunidad y del Open Source, la biblioteca tiene una Pull Request (PR) que soluciona estos problemas. Pull Request #505
La biblioteca ESP8266Audio no está activamente mantenida (tiene 22 PR por aceptar). Por lo que, de momento, no se ha aceptado la PR. Pero podemos solucionarlo bajando el fork directamente.
En concreto, el usuario Tobozo (¡eh! ¡gracias Tobozo!) es quién ha arreglado la librería para resolver la incompatibilidad con las versiones más recientes del ESP32. Aquí tenéis el enlace al Fork con la Solución
Para aplicar esta solución, simplemente:
- Descargamos el código del fork del enlace que os he puesto
- Descomprimimos el archivo zip
- Nos vamos hasta la carpeta de instalación de Arduino en su sistema
- En la carpeta de Arduino, vamos al directorio “libraries”
- Reemplazamos la carpeta “ESP8266Audio” en su instalación de Arduino con la carpeta descargada desde el fork
Una vez completados estos pasos, ¡a funcionar! La librería ESP8266Audio debería funcionar sin problemas en versiones más recientes del ESP32.
Es una solución temporal mientras que mantenedor original de la biblioteca ESP8266Audio acepte el PR, y libere una nueva versión que solucione el problema de compatibilidad.
Pero mientras, al menos tienes un work-around para que te funcione el ESP8266Audio con las últimas definiciones del Core ESP32 😉.