Macro-Pad StreamDeck DIY
Dispositivo físico de 4 teclas con pantalla interactiva OLED I2C de 0.96 pulgadas, enlazado a Windows mediante comunicación serial para el control instantáneo de Spotify, Discord, Escritorio y Steam.
Abrir Spotify
Lanza o enfoca el reproductor mediante el protocolo URI nativo del sistema.
Discord Mute
Conmuta el silenciado del micrófono globalmente vía atajo configurable.
Ver Escritorio
Minimiza y restaura todas las ventanas abiertas al instante (Win + D).
Abrir Steam
Ejecuta el cliente de juegos Steam con protocolo directo sin latencia.
Parte 1: Anteproyecto
1.1 Identificación y Justificación
En tareas prolongadas de edición, trabajo remoto y videojuegos, el flujo de trabajo sufre interrupciones constantes por la necesidad de alternar ventanas manualmente para pausar música, silenciar llamadas en Discord o abrir plataformas de ocio. Las botoneras comerciales de productividad presentan precios elevados. Este anteproyecto aborda el diseño de una alternativa Open-Hardware y de bajo coste aprovechando la capacidad de cálculo y versatilidad de pines del ESP32.
1.2 Objetivos
Objetivo General: Diseñar, ensamblar y programar un dispositivo físico macro-pad de 4 teclas con retroalimentación visual en pantalla OLED, vinculado a un ordenador personal mediante comunicación UART-USB para automatizar acciones de escritorio.
Objetivos Específicos:
- Diseño electrónico simplificado aprovechando resistencias internas pull-up para prescindir de componentes externos innecesarios.
- Implementación en el microcontrolador de un algoritmo de debounce para evitar rebotes parásitos mecánicos.
- Diseño de una interfaz gráfica ligera para el bus I2C en la pantalla SSD1306 (128x64 px).
- Creación de un servicio residente en Python para Windows que traduzca las señales seriales en invocaciones de sistema.
1.3 Alcance y Requisitos
Incluye: prototipo funcional de 4 teclas con OLED, conectado por USB a un PC con Windows y con 4 acciones fijas. No incluye: carcasa definitiva, conexión inalámbrica, perfiles configurables ni compatibilidad con otros sistemas operativos.
| Código | Requisito | Criterio de verificación |
|---|---|---|
| RF1 | Detectar 4 pulsadores independientes con filtro de rebote | Una pulsación genera un único evento (debounce de 60 ms) |
| RF2 | Mostrar en la OLED la acción pulsada | El nombre de la acción aparece en pantalla al pulsar |
| RF3 | Enviar la orden al PC por USB serie a 115200 baudios | El PC recibe la cadena exacta de cada comando |
| RF4 | Ejecutar en Windows las 4 acciones (Spotify, Discord, Win+D, Steam) | Cada tecla lanza su acción |
| RNF1 | Respuesta rápida desde la pulsación hasta la acción | Objetivo: inferior a 100 ms, valorado a ojo (sin instrumentación) |
| RNF2 | Alimentación únicamente por USB, lógica a 3.3 V | Sin fuentes externas ni tensión de red |
| RNF3 | Coste de materiales contenido | Inferior a unos 11 € sin envío |
1.4 Estudio de Alternativas
| Opción | Ventajas | Inconvenientes |
|---|---|---|
| Botonera comercial (StreamDeck) | Lista para usar, software completo, buen acabado | Precio muy superior; hardware cerrado y sin posibilidad de aprender o modificar |
| Arduino Pro Micro / RP2040 como teclado HID | Se comporta como teclado, sin programa en el PC; muy económico | El Pro Micro no tiene Wi-Fi ni Bluetooth; menos margen para ampliar. Las acciones como abrir Steam o Spotify requieren atajos configurados en el PC |
| ESP32 + serie + daemon Python (propuesta) | Muy flexible: cualquier acción del sistema; dispone de Wi-Fi y BLE para ampliar; bajo coste | Necesita un programa residente en el PC y no funciona sin él |
Se elige la tercera opción porque permite lanzar cualquier acción del sistema y deja la puerta abierta a ampliaciones inalámbricas, a cambio de depender de un pequeño programa en el PC.
1.5 Arquitectura del Sistema
- 1
Entrada
Los 4 pulsadores se leen con
INPUT_PULLUP; el firmware filtra los rebotes por tiempo. - 2
Procesamiento y pantalla
El ESP32 identifica la tecla, actualiza la OLED por I2C (0x3C) y genera un comando de texto, por ejemplo
CMD:SPOTIFY. - 3
Enlace USB serie
El comando viaja por el cable USB a 115200 baudios; el mismo cable alimenta la placa.
- 4
Servicio en Windows
Un programa en Python escucha el puerto COM y traduce cada comando en una acción: abrir Spotify o Steam por protocolo URI, o enviar un atajo de teclado (Ctrl+Shift+M para Discord, Win+D para el escritorio).
1.6 Material Utilizado y Presupuesto (BOM)
Lista de componentes con precios orientativos de AliExpress. Los precios y la disponibilidad cambian a menudo, por lo que deben comprobarse en el momento de la compra. Los enlaces llevan a búsquedas, no a un vendedor concreto.
| Componente | Descripción en AliExpress | Formato / Pack | Precio AliExpress | Enlace de Compra |
|---|---|---|---|---|
|
ESP32 NodeMCU
Microcontrolador dual core 240MHz
|
ESP32 ESP-WROOM-32 Placa de desarrollo Type-C / Micro USB 30/38 pines (con pines soldados) | 1 unidad | 2.20 € - 2.80 € | Buscar en AliExpress ↗ |
|
Pantalla OLED 0.96"
Display monocromo I2C (128x64)
|
Módulo OLED 0.96 pulgadas I2C SSD1306 4 pines (color azul o blanco) 3.3V-5V | 1 unidad | 1.35 € - 1.75 € | Buscar en AliExpress ↗ |
|
Pulsadores Táctiles 12x12
Con capuchón redondo de colores
|
Interruptor táctil 12x12x7.3 mm con capuchón redondo surtido de colores | Pack 10 unidades | 0.95 € - 1.40 € | Buscar en AliExpress ↗ |
|
Cables Dupont y Mini Breadboard
Para prototipado sin soldaduras
|
Juego de 40 cables Dupont hembra-hembra / macho-hembra 20 cm + Mini Protoboard 170 puntos | 1 kit completo | 1.20 € - 1.60 € | Buscar en AliExpress ↗ |
|
Cable de Datos USB
Líneas de datos serie (D+ / D-)
|
Cable USB Type-C o Micro USB trenzado de 1 metro con soporte de sincronización de datos | 1 unidad | 0.80 € - 1.30 € | Buscar en AliExpress ↗ |
|
Caja de Montaje ABS (Opcional)
Carcasa para electrónica DIY
|
Caja de proyectos de plástico ABS para electrónica 100x60x25 mm | 1 unidad | 1.10 € - 1.80 € | Buscar en AliExpress ↗ |
| TOTAL COMPRA ESTIMADO EN ALIEXPRESS (Kit completo) | ~ 7.60 € - 10.65 € (suma de los rangos de la tabla; sin gastos de envío) | |||
Recomendaciones clave al comprar en AliExpress:
- ESP32: Elige siempre la opción con "pines soldados" (pre-soldered pins) para conectar directamente los cables sin necesidad de soldador.
- Pantalla OLED: Asegúrate de que sea la versión I2C de 4 pines (VCC, GND, SCL, SDA). No compres la versión SPI de 7 pines para este circuito.
- Cable USB: Verifica que en la descripción indique "Data Sync" o transmisión de datos, ya que existen cables que solo sirven para carga eléctrica y no transmitirían los comandos al PC.
- Envíos: comprueba el importe mínimo para envío gratuito del vendedor y el plazo de entrega (varios días o semanas) antes de cerrar la planificación.
1.7 Planificación y Cronograma
-
1
Fase I: Pruebas de concepto y conexionado en protoboard (≈ 6 h)
Verificación de direccionamiento I2C del display (0x3C) y prueba de respuesta de las entradas digitales con pull-up.
-
2
Fase II: Desarrollo del Firmware C++ (≈ 10 h)
Codificación de la rutina no bloqueante con millis, dibujo de la rejilla gráfica y serial print estructurado.
-
3
Fase III: Desarrollo del Daemon para Windows (≈ 8 h)
Script en Python con PySerial y PyAutoGUI para detección de COM y ejecución directa de órdenes del sistema.
-
4
Fase IV: Integración, pruebas y afinado (≈ 6 h)
Medición de tiempos de respuesta, configuración de atajos globales en Discord y documentación técnica final.
Horas estimadas: ≈ 30 h en total (cifra de partida, ajustable a la dedicación real).
1.8 Análisis de Riesgos
| Riesgo | Consecuencia | Medida preventiva |
|---|---|---|
| Rebotes mecánicos en los pulsadores | Pulsaciones repetidas | Filtro por software de 60 ms |
| Cable USB solo de carga | El PC no recibe datos | Comprar cable con "Data Sync" y probarlo antes |
| Pantalla con dirección I2C distinta de 0x3C | La OLED no responde | Ejecutar un escáner I2C antes de programar |
| El puerto COM cambia al reconectar | El programa deja de recibir | Detección automática del puerto y reconexión |
| GPIO 12 es un pin de arranque del ESP32 | Fallo de arranque si estuviera a nivel alto al encender | Con el pulsador a GND no hay problema; si falla, mover la tecla a otro GPIO |
| Atajo de Discord sin configurar | El mute no funciona | Documentar la configuración en la puesta en marcha |
| Retraso en el envío de AliExpress | Retraso en el proyecto | Pedir los componentes al inicio de la Fase I |
1.9 Plan de Pruebas
| Prueba | Procedimiento | Resultado esperado |
|---|---|---|
| Detección I2C | Escáner I2C con la OLED conectada | Aparece la dirección 0x3C |
| Entradas digitales | Pulsar cada tecla con el monitor serie abierto | LOW al pulsar, HIGH al soltar |
| Antirrebote | 100 pulsaciones por tecla | Un evento por pulsación, sin duplicados |
| Comunicación serie | Pulsar cada tecla y leer en el PC | Llega la cadena exacta del comando |
| Acciones de Windows | Pulsar las 4 teclas con las aplicaciones instaladas | Se ejecuta cada acción |
| Reconexión | Desconectar y volver a conectar el USB | El servicio se reconecta sin reiniciarse |
1.10 Seguridad y Normativa
- El circuito funciona a 5 V (USB) y 3.3 V, sin tensión de red, por lo que el riesgo eléctrico es bajo.
- Manipular las placas evitando descargas electrostáticas (ESD) y comprobar la polaridad antes de conectar.
- Los módulos genéricos de AliExpress pueden carecer de marcado CE o documentación RoHS: el prototipo es de uso educativo y no sería comercializable sin certificarlo.
- El programa del PC se ejecuta en local y solo envía atajos de teclado y abre aplicaciones; no usa conexión de red.
1.11 Mejoras Futuras
- Más teclas con matriz de pulsadores y varias páginas de acciones.
- Encoder rotatorio para el volumen.
- Conexión inalámbrica con Bluetooth LE o ESP-NOW.
- Carcasa impresa en 3D y circuito en placa perforada o PCB.
1.12 Conclusiones y Bibliografía
El proyecto reúne electrónica digital, comunicaciones serie, programación embebida y programación de sistemas con un coste de materiales muy bajo. El anteproyecto define requisitos medibles, riesgos y una prueba para cada uno, de modo que el resultado final pueda verificarse.
- Espressif Systems: documentación del ESP32 y del ESP-IDF.
- Documentación del controlador SSD1306 y de las bibliotecas de Adafruit (GFX y SSD1306).
- Documentación de Arduino-ESP32.
- Documentación de PySerial y PyAutoGUI.
Parte 2: Especificación Técnica de Pines (Pinout)
El circuito aprovecha las resistencias pull-up integradas en el silicio del ESP32. Esto significa que cada pulsador simplemente une el pin GPIO correspondiente a masa (GND) al ser presionado, leyendo un nivel lógico bajo (LOW).
| Dispositivo | Pin Dispositivo | Pin ESP32 | Color Cable | Función / Señal |
|---|---|---|---|---|
| OLED SSD1306 | VCC | 3V3 | Rojo | Alimentación lógica (3.3V) |
| OLED SSD1306 | GND | GND | Gris / Negro | Referencia masa común |
| OLED SSD1306 | SDA | GPIO 21 | Cian | Línea de datos I2C |
| OLED SSD1306 | SCL | GPIO 22 | Amarillo | Línea de reloj I2C |
| Pulsador 1 | Terminal A / B | GPIO 13 a GND | Verde | Acción: Abrir Spotify |
| Pulsador 2 | Terminal A / B | GPIO 12 a GND | Morado | Acción: Alternar Mute Discord |
| Pulsador 3 | Terminal A / B | GPIO 14 a GND | Azul Cielo | Acción: Escritorio (Win + D) |
| Pulsador 4 | Terminal A / B | GPIO 27 a GND | Rosa | Acción: Abrir Steam |