Arduino Leonardo con un USB Host Shield
El dispositivo de entrada más barato del montaje: cómo se apila el shield sobre la placa, por qué sus líneas SPI hay que llevarlas con puentes al conector ICSP, cómo subir el sketch y qué limitaciones aceptas.
Respuesta corta
Un Arduino Leonardo con un USB Host Shield es el paso de ratón funcional más barato: el MAX3421E del shield lee tu ratón y el ATmega32u4 lo presenta. También es el más puñetero: la mayoría de los shields esperan el pinout de la Uno y necesitan que lleves el SPI con puentes al conector ICSP.
En esta página9
- Por qué necesitas una Leonardo y no una Uno
- Qué piezas necesitas
- Cómo conectar las líneas SPI del shield
- Cómo subir el sketch
- Por qué el número de puerto COM no para de cambiar
- Lo que renuncias a cambio del precio más bajo
- Quién debería montarse uno
- Qué comprobar antes de dar por hecho que está roto
- Preguntas habituales sobre Arduino
Por qué necesitas una Leonardo y no una Uno
El motivo es el microcontrolador. La Leonardo lleva un ATmega32u4, que tiene el USB dentro del propio chip, así que la placa puede presentarse ante un PC directamente como teclado, ratón o puerto serie. Una Uno no puede hacerlo, porque su conector USB va a un chip puente aparte cuyo único trabajo es el serie, así que nunca podrá decir que es un ratón. Esa única diferencia es toda la razón por la que este montaje pide una Leonardo. También es la razón por la que la Uno que ya tienes no va a servir, por muy bien escrito que esté el código. Las placas con el mismo chip 32u4, como una Pro Micro, funcionan con el mismo principio.
Qué piezas necesitas
El montaje pide dos placas y dos cables. Esa sencillez es su atractivo, y de verdad es el camino más barato hasta un cursor que se mueve.
- Arduino Leonardo
- ATmega32u4 con USB nativo. Presenta la interfaz de ratón al PC de juego y además lleva el enlace serie
- USB Host Shield 2.0
- Lleva un controlador host USB MAX3421E, al que se habla por SPI. Esta es la mitad donde enchufas tu ratón de verdad
- Librería
- La USB Host Shield Library 2.0, que da el manejo del ratón HID en el lado host
- Cable al PC de juego
- El propio conector micro-USB de la Leonardo. Este es el lado HID
- Cable al segundo PC
- También el conector USB de la Leonardo en un montaje de un solo cable, o un adaptador USB-serie aparte sobre una UART si quieres los enlaces físicamente separados
- Soldador
- En la práctica no es opcional. Mira el bloque siguiente
Aviso
Cómo conectar las líneas SPI del shield
Este es el paso que le ha dado la fama a este montaje. La mayoría de los USB Host Shields se diseñaron para la Uno, donde el SPI sale por los pines digitales 11, 12 y 13. En la Leonardo esos pines no son SPI en absoluto, porque el SPI solo está disponible en el conector ICSP de 6 pines. Si apilas un shield con pinout de Uno sobre una Leonardo, todo parecerá correcto mientras la placa no habla jamás con el MAX3421E.
- Mira si tu shield lleva un conector ICSP hembra en la cara de abajo. Los shields que lo tienen se apilan sobre una Leonardo y funcionan sin más
- Si no lo lleva, tendrás que poner puentes. Localiza en qué pines de la regleta de la Uno caen las líneas SPI del shield (reloj, entrada de datos y salida de datos)
- Corta, dobla hacia fuera o aísla de algún modo esos tres pines para que dejen de conectar con los pines digitales 11, 12 y 13 de la Leonardo
- Lleva tres cables desde los pines aislados del shield hasta los pines correspondientes del conector ICSP de la Leonardo
- Deja la línea de chip select, normalmente el pin 10, conectada como estaba, porque el chip select es un pin digital corriente y su asignación ya es correcta
- Antes de dar corriente al conjunto, confirma que al shield le llegan los 5V y la masa desde la regleta
- Enciende y ejecuta el ejemplo de diagnóstico de placa de la librería. Te dice si el MAX3421E responde siquiera, que es lo único que este paso tiene que dejar claro
Cómo subir el sketch
Subir el sketch es sencillo una vez el cableado está bien, pero demuestra que el lado host funciona antes de escribir o flashear nada más complicado.
- Instala el IDE de Arduino y añade la USB Host Shield Library 2.0 desde el gestor de librerías
- Entra en Tools, luego Board, luego Arduino Leonardo, y elige el puerto en el que aparece la placa
- Sube el ejemplo de diagnóstico de la placa host de la librería y abre el monitor serie, que debería informar de que el controlador está presente e inicializado
- Sube el ejemplo de ratón HID de la librería, enchufa un ratón por cable al shield y comprueba que el movimiento y los clics se imprimen en el monitor serie
- Solo entonces sube el firmware de paso que espera tu cheat, manteniendo la misma placa y el mismo puerto
- Apunta la velocidad en baudios a la que el sketch abre el enlace serie, porque tendrás que meter ese mismo valor en el cheat
- Después de la última subida, quita y vuelve a dar corriente al conjunto en vez de fiarte de un reinicio por software
Por qué el número de puerto COM no para de cambiar
En una Leonardo, el puerto serie forma parte del propio gadget USB de la placa en vez de venir de un chip puente aparte. Por eso el número de COM puede cambiar cuando la placa se reinicia, y vuelve a cambiar cuando entra en el bootloader durante una subida. Eso es normal en un conjunto que estás reflasheando una y otra vez. Cuando te quedes con el firmware definitivo, busca el puerto en el Administrador de dispositivos y fuérzalo a un número bajo de una sola cifra en Configuración de puerto y Opciones avanzadas. Después mete ese número en el cheat. Si quieres el enlace de control completamente separado del PC de juego, sácalo de una UART por hardware con un adaptador USB-serie. El PC de juego verá entonces un dispositivo que es solo un ratón.
Lo que renuncias a cambio del precio más bajo
Ninguna de estas concesiones es fatal, pero cada una es algo que un dispositivo más caro no te pide.
| Aspecto | Leonardo + shield | Por qué importa |
|---|---|---|
| Montaje | Normalmente hay que soldar o poner puentes | Es la mayor fuente de montajes que no llegan a funcionar nunca, y lo más difícil de diagnosticar sin un polímetro |
| Ancho de banda del host | El MAX3421E es un controlador host full speed | De sobra para ratones. No es la placa que elegirías si quieres dejar pasar un dispositivo high speed |
| Margen de procesamiento | Un microcontrolador de 8 bits a 16 MHz | Suficiente para retransmitir reportes. Queda muy poco para suavizar o modelar el movimiento en el propio dispositivo |
| Tasa de reporte | Limitada por una interfaz de dispositivo full speed | Se aplica el suelo de 1 ms del USB full speed. El puerto device high speed de un Teensy 4.1 no tiene esa limitación |
| Control del descriptor | Disponible, pero con herramientas más toscas | Puedes cambiar lo que ve el PC de juego. Aquí cuesta más trabajo que en un Teensy y muchísimo más que en un firmware que te clona los descriptores solo |
| Soporte | Solo comunidad | Cuando se rompe no hay fabricante al que llamar. Lo bueno es que cada pieza está documentada por alguien |
Consejo
Quién debería montarse uno
Este montaje le va bien a quien ya tiene soldador, disfruta del proceso y se toma el dispositivo como un proyecto y no como una compra. Si ese eres tú, es un buen proyecto de fin de semana y acabarás entendiendo la capa de entrada mejor que nadie que se haya comprado una caja. Si no lo eres, compra un MAKCU, porque dedicar tres tardes a un shield para ahorrarte la diferencia de precio es un mal trato. Un dispositivo de entrada que funciona a medias también es peor que no tener ninguno, porque genera fallos que parecen bugs del cheat.
Qué comprobar antes de dar por hecho que está roto
- La placa es una Leonardo u otra placa con ATmega32u4, no una Uno
- Las líneas SPI del shield llegan al conector ICSP, por conector o por cables
- El diagnóstico de placa de la librería informa de que el MAX3421E está presente
- Un ratón por cable normal imprime movimiento en el ejemplo de ratón HID
- El PC de juego lista un dispositivo de ratón cuando la Leonardo está enchufada a él
- El número de COM del cheat coincide con el del Administrador de dispositivos y es de una sola cifra
- La velocidad en baudios del cheat coincide con el valor que hay en el sketch
Preguntas habituales sobre Arduino
¿Puedo usar una Uno con un host shield en su lugar?
No, porque una Uno no puede presentarse como ratón USB: su conector USB va a un puente serie y no al microcontrolador principal. Necesitas una placa cuyo propio chip tenga USB, como cualquiera de las placas 32u4.
¿Tengo que soldar sí o sí?
No, si tu shield lleva un conector ICSP en la cara de abajo, porque entonces se apila y funciona. La mayoría de los shields baratos no lo llevan, y en ese caso hay que aislar tres pines y tirar tres cables.
¿Este dispositivo se detecta más que un KMBox?
Aquí nada es indetectable, y la comparación real es más estrecha de lo que la gente espera. En los dos casos el movimiento llega como tráfico USB HID real. Un montaje casero barato suele ser más débil en la identidad USB que presenta si lo dejas de fábrica, pero eso es una decisión de configuración y no una consecuencia del precio.
¿Funcionará el receptor de mi ratón inalámbrico en el shield?
Muchas veces sí, porque el controlador host lo ve como un dispositivo HID USB. Los receptores que presentan interfaces extra del fabricante son la excepción habitual, y el software de configuración interno del ratón deja de funcionar por lo general a través de cualquier paso.
¿Por qué el puerto COM cambia todo el rato?
Porque la interfaz serie forma parte del gadget USB de la placa, y la placa se reinicia durante las subidas. Cuando tengas el firmware definitivo, fuerza un número bajo y fijo en el Administrador de dispositivos.
Fuentes
Ninguna de las fuentes verificadas de nuestra lista cubre la Leonardo, el host shield ni el MAX3421E, así que los puentes y los pasos de subida salen de montar uno.
Sigue leyendo
¿Sigues atascado? Abre un ticket en Discord
Todas las guías