← Volver al diario
Historia

Empezar desde cero

Dejar la Raspberry Pi por un ESP32, reescribir toda la base de código en C++, repensar la carcasa para hacerla más simple. El prototipo cambia de cimientos.

En el artículo anterior te presentaba la versión Raspberry Pi del proyecto: un sistema completo, funcional, open source. Y terminaba diciendo que era hora de pasar página. Aquí empieza, pues, la siguiente etapa.

Por qué dejar la Raspberry Pi

En el uso diario, la Raspberry Pi tiene sus límites. Es cara, consume mucho, arranca lento y hace correr todo un sistema operativo para lo que en el fondo sigue siendo un reproductor de audio controlado por NFC. Es demasiado para lo que hace.

Tras algunas búsquedas y consejos valiosos, acabé de convencerme de poner en pausa la versión Raspberry Pi para centrarme en el desarrollo de la versión ESP32. Más simple, mucho más barata, consumo muy bajo y, sobre todo, control total sobre lo que se ejecuta. Sin OS, sin actualizaciones que rompen drivers, sin capas de abstracción inútiles. Solo la aplicación, directamente sobre el microcontrolador.

No fue una decisión fácil. Llevaba bastante tiempo trabajando en la versión Python y estaba ocupado arreglando bugs, solo que esa parte empezaba a alargarse demasiado, y en paralelo me daba cuenta de que el ESP32 era más interesante para lo que venía. Quería encontrar el punto medio entre terminar lo que había empezado y abandonar un proyecto a medias.

La decisión se impuso sola.

Reescribir toda la base de código

El problema es que Python no se porta a un ESP32. Hubo que retomarlo todo en C++. Y yo no conocía el lenguaje.

Python
print("Hello, World!")
C++
#include <iostream>

int main() {
  std::cout << "Hello, World!\n";
  return 0;
}
Comparación entre Python y C++ para mostrar un Hello World

Era un reto enorme. C++ no tiene nada que ver con lo que hacía hasta entonces: gestión manual de la memoria, compilación, restricciones de recursos, sin garbage collector. Otra forma de pensar.

Como con la prueba de concepto inicial, las IA generativas me ayudaron muchísimo. Para arrancar, entender los patrones, identificar lo que hacía mal. Pero esta vez el salto conceptual era mayor: había que aprender de verdad, no solo trasladar mis reflejos de desarrollador iOS.

Aun así, tras unos meses de insistir, tengo algo funcional. El sistema funciona, lee las tarjetas, reproduce la música, gestiona las playlists. El esqueleto se sostiene, y se sostiene sobre un microcontrolador de unos pocos euros.

Encontrar la placa adecuada

Empecé con un Arduino Nano ESP32-S3. Placa pequeña y limpia, perfecta para empezar. Pero le faltaba todo el resto: lector NFC, salida de audio, lector SD, gestión de alimentación. Por cada componente, un módulo externo, cables. Práctico para empezar, pero no usable así para mis hijos.

Breadboard ESP32 con lector NFC, DAC de audio, lector SD y gestión de alimentación cableados como módulos separados
Breadboard ESP32 con lector NFC, DAC de audio, lector SD y gestión de alimentación cableados como módulos separados

Buscando un poco, me topé con una placa que reúne los componentes básicos para arrancar el proyecto: el NFC Reader de HermitX, en su versión N8R8. ESP32-S3, lector NFC integrado, salida de audio, lector SD, aunque sin gestión de batería. Una placa pensada para este tipo de uso, que me evita tener que volver a cablearlo todo en cada iteración.

La placa NFC Reader de HermitX al lado de la batería, el altavoz, los potenciómetros y los botones del prototipo
La placa NFC Reader de HermitX al lado de la batería, el altavoz, los potenciómetros y los botones del prototipo

Sobre esta placa es donde corre el prototipo actual.

La carcasa, más simple

Mientras reescribía el firmware, también retomé el modelado de la carcasa. El v3 tenía una estructura cúbica, pensada como el esqueleto de un cubo impreso en 3D con planchas de MDF cortadas a láser para las caras. Bonito en el render, pero pesado de imprimir, y cada fallo costaba horas de impresión.

Así que lo simplifiqué todo. Adiós a la estructura compleja, adiós a los paneles que hay que alinear al décimo de milímetro. Una caja simple, más compacta, más fácil de imprimir, que alberga la placa, el altavoz y la batería, y nada más.

Menos piezas, menos calibración, menos ocasiones de cagarla.

El prototipo en 3D, gíralo para explorarlo.

Lo que queda por resolver

El gran tema sin resolver sigue siendo la gestión de la batería. Sigo con el mismo LiPo Rider que en el v3, y tiene el mismo defecto: cuando se desenchufa el USB, el paso a batería provoca un microcorte que hace reiniciar la placa.

La buena noticia es que el ESP32 arranca en diez segundos. Frente a uno o dos minutos en la Raspberry Pi. No es perfecto, pero no tiene punto de comparación. En el uso real, cambia todo: desenchufas, se reinicia y es casi transparente.

Lo que me llevo

Empezar desde cero da miedo en el momento. Dejas atrás código que funcionaba, una carcasa que rodaba a diario en casa, meses de trasteo. Pero era la decisión correcta.

El proyecto está más alineado con lo que debería ser: un objeto simple, sobrio, que hace una cosa y la hace bien. Y la fuerte restricción del microcontrolador, paradójicamente, me obliga a escribir código más limpio que el que hacía en la Raspberry Pi. Y lo mejor: por fin se puede uno pasear con él, porque pesa mucho menos y aguanta más de cinco horas con batería.

Un niño pone una tarjeta en la caja y la música arranca sola

Lo que viene es estabilizar el firmware, resolver el tema de la alimentación y pensar en serio en lo que convertirá este prototipo en algo que otras personas puedan fabricar. Lo contaré en el próximo artículo.

Newsletter

Mantente informado

Déjanos tu email para seguir el avance del proyecto y no perderte el lanzamiento.