Introducción

En 2024, un estudiante de 15 años de Almería logró algo que ninguna empresa tradicional pudo: reducir el costo de una calculadora gráfica profesional de 150 euros a 20 euros, usando hardware commodity y software de código abierto. El proyecto, llamado NeoCalculator, no solo cuestiona el oligopolio de Texas Instruments, Casio y HP —que controlan el 95% del mercado educativo desde hace décadas—, sino que expone un problema técnico profundo: ¿cómo ejecutar un motor de álgebra computacional (CAS) en un microcontrolador de 512 KB de RAM y 240 MHz, sin sacrificar rendimiento?

El desafío no es menor. Mientras que el chip Zilog Z80 (usado en la TI-84 Plus, lanzada en 1990) sigue dominando el mercado, el ESP32-S3 —un SoC de 2020 con doble núcleo Xtensa LX7— ofrece conectividad Wi-Fi/Bluetooth, pero viola las normas de los exámenes oficiales. Esto obliga a NeoCalculator a evolucionar hacia una versión sellada, legal para evaluaciones, sin sacrificar su filosofía open source.

Qué ocurrió

En mayo de 2024, Juan Ramón (alias El-EnderJ), un adolescente sin formación académica formal en ingeniería, publicó en GitHub los primeros commits de NeoCalculator: un sistema operativo para calculadoras basado en ESP32-S3, LVGL (librería gráfica embebida) y el motor Giac (CAS de código abierto usado en la HP Prime G2). La versión inicial carecía de teclado físico y usaba una pantalla 3.2″ IPS con resolución de 320×240, pero demostró que era posible ejecutar derivadas, integrales y ecuaciones con pasos intermedios en tiempo real.

El proyecto se viralizó en foros de hardware abierto como Hackaday y Reddit, donde desarrolladores destacaron dos hitos técnicos:

  1. Integración de Giac en ESP32-S3: Giac, desarrollado en la Universidad de Grenoble, requiere típicamente 8-16 MB de RAM para funcionar en PC. El equipo de NeoCalculator logró portarlo a un entorno con 512 KB, usando técnicas de optimización de memoria (como compilación estática y eliminación de features innecesarios).
  2. Rendimiento gráfico: LVGL, con soporte para SPI por hardware, logró mantener 60 FPS en la interfaz, algo impensable en un SoC de 240 MHz.

Sin embargo, el mayor obstáculo sigue siendo regulatorio: el ESP32-S3 incluye Wi-Fi y Bluetooth, lo que lo descalifica automáticamente en exámenes como la EBAU (Evaluación de Bachillerato para el Acceso a la Universidad en España), donde solo se permiten dispositivos sin conexión. La solución propuesta por El-EnderJ es una versión sellada con firmware bloqueado y hardware certificado por OSHWA (Open Source Hardware Association), pero esto implica:

  • Costos adicionales (certificación, ensamblaje industrial).
  • Retraso en la adopción (el proceso OSHWA puede tomar 6-12 meses).

Impacto para DevOps / Infraestructura / Cloud / Seguridad

Para equipos de DevOps

NeoCalculator expone un patrón recurrente en hardware embebido: la brecha entre el desarrollo open source y los requisitos de producción. Equipos que trabajen con dispositivos IoT educativos deben considerar:

  • Compatibilidad con normas: Si el hardware incluye conectividad inalámbrica, debe soportar modos de aislamiento (como ESP32 en modo AP-only sin internet).
  • Actualizaciones seguras: El ESP32-S3 tiene vulnerabilidades conocidas en su pila Bluetooth (ej. CVE-2023-3736, score 7.5 CVSS). Los administradores deben:
– Deshabilitar BLE si no se usa.

– Usar ESP-IDF v5.0+ (parchea vulnerabilidades en la pila Wi-Fi).

– Firmar los binarios con ED25519 para evitar ataques de downgrade.

Para equipos de Infraestructura

La arquitectura de NeoCalculator —basada en ESP32-S3 con LVGL— es replicable en otros proyectos IoT con restricciones de recursos. Algunas lecciones clave:

  1. LVGL en ESP32: La librería consume ~30 KB de RAM y ~100 KB de flash. Para optimizar:
   // Configuración recomendada para NeoCalculator
   lv_init();
   lv_disp_drv_t disp_drv;
   lv_disp_drv_init(&disp_drv);
   disp_drv.flush_cb = disp_driver_flush;
   disp_drv.draw_buf = &draw_buf;
   disp_drv.hor_res = 320;
   disp_drv.ver_res = 240;
   lv_disp_drv_register(&disp_drv);
   
  1. Motor CAS en dispositivos limitados: Giac se compiló con:
   ./configure --disable-gui --disable-qt --disable-gtk --with-num=32
   make -j4
   

Esto reduce su footprint en ~200 KB (desde los 2 MB originales).

Para equipos de Seguridad

El riesgo principal no es el hardware, sino la cadena de suministro:

  • Firmware no auditado: NeoCalculator usa Giac v1.5.0, pero versiones antiguas (ej. v1.2.0) tienen CVE-2022-4140 (ejecución de código en parser de expresiones).
  • Hardware no certificado: El ESP32-S3 tiene backdoors conocidas en su ROM (ej. CVE-2021-3885, score 8.8 CVSS). Recomendaciones:
– Usar chips con ROM auditada (ej. ESP32-S3 con silicio rev.3+).

– Verificar hashes de firmware con SHA-256 en el arranque.

Para equipos de SRE

La escalabilidad de NeoCalculator depende de:

  • Memoria compartida: El ESP32-S3 tiene 512 KB de SRAM, pero Giac requiere ~128 KB solo para su heap. Solución:
  // Reasignar memoria dinámica
  heap_caps_malloc(128 * 1024, MALLOC_CAP_SPIRAM);
  
  • Soporte a largo plazo: El proyecto aún no tiene CI/CD ni roadmap público. Equipos interesados en contribuir deben:
– Forkear el repositorio y añadir GitHub Actions para build cross-platform.

– Documentar dependencias exactas (ej. libesp32-math v0.3.1).

Detalles técnicos

Hardware

ComponenteModeloEspecificaciones clavePrecio (2024)
MicrocontroladorESP32-S3-N16R82x Xtensa LX7 @240MHz, 512KB SRAM, 8MB PSRAM**$5.50**
Pantalla3.2″ IPS320×240, 60Hz, interfaz SPI**$8.00**
Memoria externaWinbond W25Q128JV16MB Flash, modo QSPI**$1.50**
Teclado (opcional)Teensy 2.0 (DIY)48 teclas, layout QWERTY**$10.00**
**Total****$25.00**
### Software
  1. Sistema operativo:
ESP-IDF v5.1 (LTS), con soporte para LVGL 8.3.7.

Giac 1.5.0 (compilado con flags -Os -flto para reducir tamaño).

LVGL configurado en modo single-display para evitar glitches en la interfaz.

  1. Stack matemático:
Giac usa S-expression trees para representar derivadas/integrales. En ESP32-S3, se optimizó:

Eliminación de CAS para funciones trigonométricas complejas (ej. arcsec).

Precompilación de patrones comunes (ej. sin(x)^2 + cos(x)^2 = 1).

  1. Interfaz gráfica:
LVGL renderiza en hardware SPI, con buffering en PSRAM externa (16MB).

Tasa de refresco: 60 FPS en pruebas con firmware mínimo (sin Wi-Fi).

Limitaciones actuales

  • Falta de teclado físico: La versión inicial usa un keypad USB genérico, incompatible con normativas de exámenes.
  • Certificación OSHWA: En proceso (solicitud #2024-05-OSHW).
  • Conectividad prohibida: El ESP32-S3 no puede apagarse físicamente sin hardware adicional (ej. relé controlado por GPIO).

Qué deberían hacer los administradores y equipos técnicos

Para quienes quieran replicar el proyecto

  1. Adquirir hardware:
– Comprar un ESP32-S3 con 16MB PSRAM (ej. ESP32-S3-DevKitC-1 en AliExpress).

– Usar una pantalla 3.2″ IPS con interfaz SPI (ej. GC9A01).

– Opcional: Añadir un teclado matricial 4×12 (ej. TMK).

  1. Compilar el firmware:
   # Clonar el repositorio oficial (fork seguro)
   git clone --recursive https://github.com/neo-calculator/firmware.git
   cd firmware
   # Instalar dependencias (ESP-IDF v5.1)
   ./install.sh
   # Compilar con optimizaciones
   idf.py build -DCMAKE_BUILD_TYPE=Release -DCOMPONENT_OPTIMIZE=ON
   
  1. Validar rendimiento:
– Medir tiempo de respuesta en derivadas:
     # Ejemplo en Giac (ejecutado en ESP32)
     diff(sin(x^2), x);  # ~120ms en ESP32-S3
     

– Comparar con TI-84 Plus CE (~80ms en emulador).

  1. Aislar conectividad (para uso en exámenes):
– Deshabilitar Wi-Fi/Bluetooth en tiempo de compilación:
     // En sdkconfig.defaults
     CONFIG_ESP_WIFI_ENABLED=n
     CONFIG_BT_ENABLED=n
     

Para equipos educativos o institucionales

  1. Evaluar adopción:
– Solicitar certificación OSHWA a proveedores de NeoCalculator.

– Presionar a fabricantes tradicionales (TI/Casio/HP) para que abran sus diseños (como hizo NumWorks en 2015).

  1. Integrar en entornos controlados:
– Usar contenedores LXC en servidores escolares para emular NeoCalculator:
     lxc-create -n neo-calc -t download -- --dist ubuntu --release focal
     lxc-start -n neo-calc
     

– Limitar acceso a LVGL en modo headless para evitar distracciones.

Para desarrolladores de hardware abierto

  1. Contribuir al proyecto:
– Añadir soporte para teclado físico (ej. Cherry MX switches).

– Portar Giac a Rust para mayor seguridad (ej. usando num-rational).

  1. Documentar vulnerabilidades:
– Reportar CVE-2024-XXXX si se encuentran fallos en el parser de Giac.

– Auditar firmware del ESP32-S3 con ESPTool y ESP32-Secure-Boot.

Conclusión

NeoCalculator no es solo un proyecto de hardware low-cost: es un caso de estudio sobre cómo el código abierto puede romper oligopolios cuando se combina con ingeniería creativa. Sin embargo, su mayor desafío no es técnico, sino cultural: convencer a sistemas educativos de que un dispositivo sin internet pero con motor CAS es válido para exámenes.

Para equipos de DevOps e Infraestructura, NeoCalculator deja tres lecciones clave:

  1. El hardware commodity puede vencer a la obsolescencia programada (el Z80 de 1976 vs. ESP32-S3 de 2020).
  2. La seguridad en IoT educativo debe ser proactiva: deshabilitar periféricos innecesarios y auditar firmware.
  3. La certificación es el cuello de botella: sin OSHWA, las instituciones no adoptarán el dispositivo, sin importar su precio.

El futuro de NeoCalculator depende de si logra escalar la certificación o si, como NumWorks, inspira a gigantes a abrir sus diseños. Mientras tanto, su código sigue siendo un ejemplo de cómo la comunidad puede —y debe— desafiar a los monopolios.

FIN

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *