Teclado USB programable con Teensy y Raspberry Pi

Este proyecto permite construir un teclado USB programable utilizando un Teensy. La placa emula un teclado convencional, pero con una funcionalidad adicional: recibe comandos a través de una conexión serial, lo que permite controlarlo desde un computador portátil o una Raspberry Pi. Esto posibilita la gestión de un equipo incluso antes de que cargue el sistema operativo, permitiendo seleccionar el cargador de arranque, modificar parámetros de la BIOS o interactuar con menús de pre-arranque sin requerir un teclado físico.
El problema es frecuente: se dispone de una máquina sin monitor ni teclado (headless), como una Raspberry Pi, y se necesita un teclado para la configuración inicial. A menudo no hay uno disponible. Con este proyecto, el teclado del computador portátil se convierte en el teclado del equipo objetivo. El repositorio del proyecto detalla el flujo completo, desde la programación del Teensy hasta su uso a través de la red, todo mediante componentes económicos y software de código abierto.
¿Cómo funciona el teclado USB programable?
El núcleo del sistema es el Teensy, un microcontrolador con soporte nativo para USB. Se debe cargar el sketch disponible en la carpeta etherkey. Al conectarse por USB al sistema que se desea controlar, el dispositivo es reconocido como un teclado estándar. La comunicación serial se realiza mediante un adaptador USB-a-UART, conectando TX al Pin 0, RX al Pin 1 y GND a GND. Alternativamente, es posible utilizar una Raspberry Pi, lo que añade capacidades de red y permite enviar comandos de forma remota.
La comunicación opera a una velocidad de 57600 baudios. Se puede utilizar el comando cu para abrir el puerto serial, por ejemplo: cu -l /dev/ttyUSB0 -s 57600. El Teensy ofrece tres modos de operación: el modo interactivo envía las teclas presionadas en la consola directamente; el modo comando interpreta la línea como una instrucción, como SendRaw o Send; y el modo depuración muestra información sobre el carácter recibido, incluyendo el código ASCII y el código de tecla USB.
Los comandos admiten modificadores como ALT, SHIFT, CTRL y WIN. Las teclas especiales se indican entre llaves, por ejemplo {ENTER} o {F2}. Para caracteres Unicode existen secuencias específicas: UCL para Linux y UCW para Windows, utilizando códigos hexadecimales de 4 dígitos. Esto permite escribir caracteres no presentes en un teclado estándar, como símbolos o letras acentuadas.
Configuración y uso práctico
Para comenzar, se requiere un Teensy y un adaptador USB-a-UART. Se programa el Teensy utilizando Teensyduino, el entorno de desarrollo integrado. Luego, se conecta el adaptador a los pines correspondientes y se abre una conexión serial desde el computador portátil. El sistema objetivo detecta el Teensy como un teclado USB estándar, permitiendo escribir cualquier comando, incluso durante el POST o dentro de la BIOS.
La Raspberry Pi puede sustituir al adaptador USB-a-UART. En este caso, se utiliza el puerto serial UART de la Pi, accesible en /dev/ttyAMA0 o /dev/serial0. La conexión es idéntica, pero se añade la capacidad de controlar el teclado a través de la red. Además, la Pi puede ejecutar scripts más complejos, permitiendo automatizar la configuración de múltiples máquinas sin intervención manual.
El modo comando es particularmente útil para automatizar operaciones repetitivas. Es posible enviar una secuencia de teclas para acceder al menú de arranque de una máquina o cambiar el orden de inicio en la BIOS, todo sin tocar físicamente el equipo objetivo. Esto ahorra tiempo y reduce errores de escritura.
Componentes y alternativas para el proyecto
Además del Teensy, se puede utilizar una Raspberry Pi Pico con el chip RP2040. Este microcontrolador posee capacidades USB similares y un costo menor. La placa de expansión para Raspberry Pi Pico simplifica las conexiones. El Primer Kit Plug&Play proporciona todo lo necesario para comenzar. Adicionalmente, las versiones de 1 GB y 2 GB de Raspberry Pi 5 son excelentes como hosts de control.
La elección del microcontrolador depende de las necesidades específicas. El Teensy es sencillo y cuenta con soporte en Teensyduino. El RP2040 es más económico y posee una comunidad activa. Ambos funcionan con el mismo esquema de cableado. La Raspberry Pi solo es necesaria si se requiere control por red; para uso local, el adaptador USB-a-UART es suficiente.
En resumen, este proyecto resuelve un problema real con herramientas simples. El teclado USB programable es versátil y reutilizable, adaptándose a múltiples escenarios, desde la configuración de servidores hasta el mantenimiento de sistemas embebidos. También sirve como un excelente punto de partida para comprender el funcionamiento de los protocolos USB y serial.
- Teensy con sketch etherkey para emular el teclado
- Adaptador USB-a-UART o Raspberry Pi para conexión serial
- Teensyduino para programar el microcontrolador
- Comando cu a 57600 baudios para la conexión
Vía GitHub.




