Makefile para Arduino ESP8266

Tras mucho esfuerzo he conseguido hacer una makefile para Arduino ESP8266 que funcione en Linux y OSX. Está basado en Arduino-Makefile de Martin Oldfield.

Hace uso de la extensión para ESP8266 para Arduino IDE, pero no lo necesita. Cuenta con un script para configurarlo que descarga el json de la extensión y con él descarga Xtensa lx106 elf, esptool y mkspiffs para la plataforma donde se ejecuta. Por ahora sólo soporta Linux y OSX, de 32 y 64 bits. Espero en algún momento soportar Windows, pero por ahora no tengo interés ni motivo para hacerlo.

Funciona de forma parecida a Arduino-Makefile. Se crea un Makefile en la carpeta del proyecto, donde esté el sketch, y se añaden las variables propias del proyecto y al final del archivo se incluye el Makefile que hay en el repositorio. Un ejemplo de Makefile puede ser:

ARDUINO_VARIANT = generic SERIAL_PORT = /dev/ttyAMC0 USER_DEFINE = -D_SSID_="YourSSID" -D_WIFI_PASSWORD_="YourPassword" FLASH_SIZE = 512K FLASH_FREQ = 40MHz
include ../arduinoEsp8266.mk

Consta del modelo de ESP8266, en este caso es generic, el puerto donde está conectado, el SSID y la constraseña del WiFi donde se conectará y que se substituirán en el sketch. También define la frecuencia y el tamaño de la memoria flash del dispositivo y solo es necesario para el modelo generic, por ejemplo NodeMCU tiene definidos los valores. Finalmente se añade arduinoEsp8266.mk que es donde está la chicha del Makefile.

Para compilar simplemente usar el comando make, y una vez compilado se carga con make upload.

Para procesar el archivo boards.txt usa un script escrito en Perl, y requiere el módulo YAML. La dependencia se soluciona instalando el paquete libconfig-yaml-perl en Ubuntu, y en OSX instalando el módulo mediante cpan.

En OSX también necesita GNU grep, la versión de grep para OSX genera una salida diferente. para instalarlo:

brew tap homebrew/dupes && brew install grep

El makefile y todos sus accesorios están en este repositorio.