La ELM11 es una plataforma feather basada en Lua bastante nifty y util que, aunque es nueva y aun en evolucion en cuanto a sus toolchains, ya entrega una experiencia de desarrollo sorprendentemente pulida.

Hecha por BrisbaneSilicon, ELM es la sigla de Embedded Lua Machine. El soporte para Lua significa que es mas eficiente que Python en el familiar formato feather. Alimentada por una FPGA GOWIN, la ELM11 permite control de bajo nivel con multiples hardware overlays (mas sobre eso en un rato).

¿Como se trabaja con la ELM11?

El IDE da una solucion comprensiva y amistosa para trabajar con la placa, aunque tambien resulta entretenido entrar directo por serial y resolver cosas con su REPL o con la CLI de mas alto nivel. La CLI, llamada `cmd o command` dentro del REPL, entrega interacciones paginadas automaticamente y bien formateadas para revisar el estado del dispositivo, sus configuraciones o la documentacion onboard.

Placa ELM11 vista desde otro angulo, foto de BrisbaneSilicon
Placa ELM11 vista desde otro angulo, foto de BrisbaneSilicon

La documentacion online es generalmente eficiente y facil de acceder para lo que se necesita, aunque tiene algunas particularidades. Quienes conozcan Lua se pueden sorprender al aprender que el dialecto EMBLua usa una sintaxis `import para librerias, asi que para usar una funcion de la libreria estandar como string.sub hay que escribir explicitamente import("string","sub")`.

Lua se siente particularmente bien orientado al mundo embebido, y el sistema que armo BrisbaneSilicon parece exhibir eso con elegancia. Incluso se puede cambiar el sistema subyacente entre el runtime de Lua y el hardware mediante overlays subibles y modulos, habilitando frecuencia de CPU personalizada, configuraciones de pinout, comportamiento de los LED indicadores y mas.

Pinout por defecto de la ELM11
Pinout por defecto de la ELM11
Pinout alternativo configurable via overlay
Pinout alternativo configurable via overlay

¿Por que Lua y no Python en una placa embebida?

Si esta pregunta se hubiera planteado hace 5 o 10 anos, la respuesta habria sido que Lua era un poco de nicho. Pero dado el ascenso de NeoVim y Roblox, hay suficientes desarrolladores, particularmente jovenes, con experiencia en el lenguaje como para que su uso sea bienvenido.

En el mundo embebido, donde MicroPython se ha vuelto el estandar de facto en placas de bajo consumo, Lua ofrece dos ventajas concretas. Primero, una huella de memoria menor: el interprete completo cabe en menos de 200 KB de Flash versus los aproximadamente 600 KB que pide MicroPython. Segundo, tiempos de garbage collection mas predecibles, algo critico para tareas con timing estricto.

Soporte, riesgos y precio

Quien escribe la review original ha interactuado con muchas placas pobremente soportadas o documentadas en el pasado y dice que es bueno que Brisbane atienda esas preocupaciones. Ahora bien, algunas de esas experiencias previas con otras placas se fueron deteriorando en soporte o documentacion con el tiempo. Si BrisbaneSilicon mantiene el rumbo y puede lidiar con eventuales problemas de suministro, la ELM11 podria hacerse un lugar propio en el espacio.

Con el precio de 15 dolares (aproximadamente 14.000 pesos chilenos mas envio internacional) y el esfuerzo que Brisbane puso en hacer la experiencia de desarrollo tan buena como es, la placa tiene potencial para aparecer en todo tipo de proyectos, especialmente en educacion o prototipado. Se puede seguir ELM11 en Crowd Supply para mas detalles.