[007] — hardware

Stream Deck
desde cero

Stream deck
Stream deck detalle
Stream deck keycaps
DificultadMedium
Tiempo total~12h
Impresión 3D2h carcasa + 8h caps
SoftwareWPF · C# · .NET
HardwareESP32-C3 Super Mini
Botones12 × Cherry MX Ergo Clear
intro

¿Por qué construirlo?

Los stream decks comerciales cuestan entre 100€ y 250€. Este salió por una fracción de ese precio y además es 100% mío — diseño de las caps incluido. Lo uso a diario para lanzar apps, abrir URLs que visito constantemente y ejecutar atajos de teclado. Cuando enciendo el ordenador, el software arranca solo y se queda corriendo en segundo plano. Cada botón es configurable desde una interfaz gráfica sin tocar código.

ESP32-C3WPFC#Cherry MX3D PrintBambu Lab X1Bambu Studio
step 00 — materiales

Lo que necesitas

ESP32-C3 Super MiniMicrocontrolador principal
Cherry MX Ergo Clear ×12Switches táctiles sin clic
Filamento PLAPara carcasa y keycaps
EstañoPara soldar switches al ESP32
CablesPara conexiones internas
TermorretráctilesOpcional, para mayor limpieza
Cable USB-C a USB-CPara conectar al PC
Bambu Lab X1O cualquier impresora FDM
step 01 — impresión 3D

Carcasa y keycaps

Carcasa

Modelo de Thingiverse

El modelo de la carcasa es de __CDante en Thingiverse. Lo imprimí en una Bambu Lab X1 en PLA, tardó 2 horas. No modifiqué el modelo.

Carcasa impresa
Keycaps con diseño personalizado

Keycaps personalizadas

Diseños propios con AMS

Las keycaps sí las diseñé yo. El proceso: descargo la imagen que quiero, la paso a SVG con Photoshop, y luego pego el SVG sobre la cap en el laminador de Bambu Studio. Las 12 caps tardaron 8 horas porque se requiere AMS para el cambio de filamento en los diseños de colores.

step 02 — electrónica

Soldadura y conexiones

Cada switch tiene dos pines. Un pin de cada switch se conecta a un GPIO diferente del ESP32-C3, y el otro pin de todos los switches va a GND compartido. El ESP32 usa los pines GPIO en modo INPUT_PULLUP, de forma que cuando se pulsa un switch el pin pasa de HIGH a LOW.

// Esquema básico de conexión Switch 1 → GPIO4 + GND Switch 2 → GPIO5 + GND Switch 3 → GPIO6 + GND ... → GPIO N + GND Switch 12 → GPIO N + GND // Todos los GND al pin GND del ESP32-C3

Los termorretráctiles son opcionales pero recomendables para proteger las soldaduras y que el cableado interno quede más limpio. Una vez soldado todo, se monta dentro de la carcasa impresa.

step 03 — programación ESP32

Firmware del microcontrolador

El firmware del ESP32-C3 es simple: detecta qué botón se ha pulsado y manda el identificador por puerto serie a 115200 baudios. El software de Windows escucha ese puerto y ejecuta la acción configurada.

// Arduino C++ — ESP32-C3 firmware (simplificado) const int buttons[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; const int N = 12; void setup() { Serial.begin(115200); for (int i = 0; i < N; i++) pinMode(buttons[i], INPUT_PULLUP); } void loop() { for (int i = 0; i < N; i++) { if (digitalRead(buttons[i]) == LOW) { Serial.println("BTN" + String(i + 1)); delay(200); // debounce } } }
step 04 — software

App de Windows (WPF + C#)

El software está escrito en C# con WPF (.NET). Escucha el puerto serie (COM5 por defecto), recibe los identificadores de botón y ejecuta la acción configurada: abrir una app, abrir una URL, o enviar un atajo de teclado.

// Tipos de acción disponibles "app"// lanza un ejecutable "url"// abre en el navegador "key"// envía tecla (UP, DOWN...) // config.json — ejemplo de botón { "Id": "BTN1", "Label": "VS Code", "ActionType": "app", "Value": "C:\\...\\Code.exe" }

El software se añade al registro de Windows para arrancar automáticamente al inicio. Cuando se cierra la ventana, la app se minimiza a la bandeja del sistema — sigue corriendo en segundo plano. La configuración se guarda en JSON en AppData.

step 05 — montaje final

Ensamblaje

Montaje final

Una vez impresa la carcasa, soldado el cableado y flasheado el ESP32, se monta todo dentro. Los switches encajan en los agujeros de la carcasa, el ESP32 va en el interior, y las keycaps se colocan encima de los switches. El USB-C sale por la parte trasera.

Al conectarlo al PC, Windows lo reconoce como dispositivo serie. Hay que asegurarse de que el puerto en el código coincida con el asignado (COM5 en mi caso). Una vez configurado, funciona solo.

resultado

Cómo lo uso

12 botones configurables para lo que necesites. En mi caso: VS Code, navegador, Spotify, URLs que abro constantemente, y algún atajo de teclado. Cada vez que arranco el ordenador está listo sin hacer nada. Si quiero cambiar qué hace un botón, abro la app desde la bandeja y lo edito en segundos.