Arduino Leonardo com um USB Host Shield
O dispositivo de entrada mais barato da pilha: como o shield se encaixa na placa, por que as linhas SPI dele precisam ir por jumper até o header ICSP, como subir o sketch e quais limites você aceita.
Resposta curta
Um Arduino Leonardo com um USB Host Shield é o passthrough de mouse mais barato que funciona: o MAX3421E do shield lê o seu mouse e o ATmega32u4 o apresenta. É também o mais trabalhoso: a maioria dos shields espera o mapeamento de pinos do Uno e exige o SPI puxado por jumper até o header ICSP.
Nesta página9
- Por que você precisa de um Leonardo, e não de um Uno
- Quais peças você precisa
- Como ligar as linhas SPI do shield
- Como subir o sketch
- Por que o número da porta COM fica mudando
- O que você abre mão em troca do preço menor
- Quem deve montar uma
- O que conferir antes de achar que está quebrado
- Perguntas comuns sobre o Arduino
Por que você precisa de um Leonardo, e não de um Uno
O motivo é o microcontrolador. O Leonardo usa um ATmega32u4, que tem USB dentro do próprio chip, então a placa consegue se apresentar a um PC diretamente como teclado, mouse ou porta serial. Um Uno não consegue, porque o soquete USB dele é ligado a um chip ponte separado cuja única função é serial, então ele nunca pode se declarar mouse. Essa única diferença é toda a razão de esta montagem pedir um Leonardo. É também por isso que o Uno que você já tem não vai servir, não importa como o código seja escrito. Placas com o mesmo chip 32u4, como uma Pro Micro, funcionam pelo mesmo princípio.
Quais peças você precisa
A montagem pede duas placas e dois cabos. Essa simplicidade é o atrativo, e é mesmo o jeito mais barato de chegar a um cursor funcionando.
- Arduino Leonardo
- ATmega32u4 com USB nativo. Apresenta a interface de mouse ao PC de jogo e também carrega a conexão serial
- USB Host Shield 2.0
- Traz um controlador host USB MAX3421E, acessado por SPI. É nesta metade que o seu mouse real é ligado
- Biblioteca
- A USB Host Shield Library 2.0, que faz o tratamento do mouse HID no lado host
- Cabo para o PC de jogo
- O próprio soquete micro-USB do Leonardo. Este é o lado HID
- Cabo para o segundo PC
- Também o soquete USB do Leonardo em uma montagem de um cabo só, ou um adaptador USB-serial separado em uma UART se você quiser as conexões fisicamente separadas
- Ferro de solda
- Na prática, não é opcional. Veja o bloco seguinte
Atenção
Como ligar as linhas SPI do shield
É este passo que dá a fama à montagem. A maioria dos USB Host Shields foi desenhada para o Uno, onde o SPI sai nos pinos digitais 11, 12 e 13. No Leonardo esses pinos não são SPI, porque o SPI só está disponível no header ICSP de 6 pinos. Se você encaixar um shield mapeado para Uno em um Leonardo, vai parecer tudo certo enquanto a placa nunca se comunica com o MAX3421E.
- Veja se o seu shield tem um conector ICSP fêmea na parte de baixo. Shields que têm encaixam em um Leonardo e simplesmente funcionam
- Se não tiver, você vai precisar de jumpers. Descubra onde os pinos de SPI do shield (clock, entrada de dados e saída de dados) caem no header do Uno
- Corte, entorte para fora ou isole de outra forma esses três pinos, para que não encostem mais nos pinos digitais 11, 12 e 13 do Leonardo
- Passe três fios dos pinos isolados do shield até os pinos correspondentes no header ICSP do Leonardo
- Deixe a linha de chip select, normalmente o pino 10, ligada como estava, porque chip select é um pino digital comum e o mapeamento dele já está correto
- Antes de energizar o conjunto, confirme que o shield está recebendo 5V e terra pelo header
- Ligue e rode o exemplo de diagnóstico de placa da biblioteca. Ele informa se o MAX3421E responde, que é a única coisa que este passo precisa estabelecer
Como subir o sketch
Subir o sketch é simples depois que a fiação está certa, mas prove que o lado host funciona antes de escrever ou gravar qualquer coisa mais complexa.
- Instale a IDE do Arduino e adicione a USB Host Shield Library 2.0 pelo gerenciador de bibliotecas
- Selecione Ferramentas, depois Placa, depois Arduino Leonardo, e escolha a porta em que a placa aparece
- Suba o exemplo de diagnóstico da placa host da biblioteca e abra o monitor serial, que deve informar o controlador como presente e inicializado
- Suba o exemplo de mouse HID da biblioteca, ligue um mouse com fio no shield e confirme que movimento e cliques aparecem no monitor serial
- Só então suba o firmware de passthrough que o seu cheat espera, mantendo a mesma placa e a mesma porta
- Anote o baud rate em que o sketch abre a conexão serial, porque você vai precisar informar o mesmo valor no cheat
- Depois do upload final, tire o conjunto da energia e religue em vez de confiar em um reset por software
Por que o número da porta COM fica mudando
No Leonardo, a porta serial faz parte do gadget USB da própria placa, e não de um chip ponte separado. Por isso o número da COM pode mudar quando a placa reinicia, e muda de novo quando ela entra no bootloader durante um upload. Isso é normal em um conjunto que você regrava o tempo todo. Quando fechar o firmware final, ache a porta no Gerenciador de Dispositivos e force um número baixo de um dígito em Configurações de Porta e Avançado. Depois informe esse número no cheat. Se você quiser a conexão de controle totalmente separada do PC de jogo, tire-a de uma UART de hardware com um adaptador USB-serial. Aí o PC de jogo passa a ver um dispositivo que é só um mouse.
O que você abre mão em troca do preço menor
Nenhum desses pontos é fatal, mas cada um é algo que um dispositivo mais caro não exige de você.
| Área | Leonardo + shield | Por que importa |
|---|---|---|
| Montagem | Quase sempre é preciso soldar ou puxar jumpers | A maior fonte de uma montagem que nunca funciona, e a mais difícil de diagnosticar sem um multímetro |
| Banda no host | O MAX3421E é um controlador host full speed | Suficiente para mouses. Não é a placa a escolher se você quiser repassar um dispositivo high speed |
| Folga de processamento | Um microcontrolador de 8 bits a 16 MHz | Dá para repassar relatórios. Sobra muito pouco para suavizar ou moldar o movimento no próprio dispositivo |
| Taxa de relatórios | Limitada por uma interface de device full speed | Vale o piso de intervalo de 1 ms do USB full speed. A porta device high speed de um Teensy 4.1 não tem esse limite |
| Controle do descritor | Existe, mas as ferramentas são mais cruas | Você consegue mudar o que o PC de jogo vê. Dá mais trabalho aqui do que em um Teensy e muito mais do que em um firmware que clona descritores para você |
| Suporte | Só da comunidade | Quando quebra não existe fabricante. O lado bom é que cada pedaço disso está documentado por alguém |
Dica
Quem deve montar uma
Esta montagem serve para quem já tem ferro de solda, gosta do processo e trata o dispositivo como projeto, não como compra. Se esse é o seu caso, dá um bom projeto de fim de semana, e você vai entender a camada de entrada melhor do que qualquer pessoa que comprou uma caixa pronta. Se não é, compre um MAKCU, porque gastar três noites em um shield para economizar a diferença de preço é um péssimo negócio. Um dispositivo de entrada funcionando pela metade também é pior do que nenhum, porque ele produz defeitos com cara de bug do cheat.
O que conferir antes de achar que está quebrado
- A placa é um Leonardo ou outra placa ATmega32u4, e não um Uno
- As linhas SPI do shield chegam ao header ICSP, por conector ou por fios
- O diagnóstico de placa da biblioteca informa o MAX3421E como presente
- Um mouse com fio simples imprime movimento no exemplo de mouse HID
- O PC de jogo lista um dispositivo de mouse quando o Leonardo está ligado nele
- O número da COM no cheat é o mesmo do Gerenciador de Dispositivos e tem um dígito só
- O baud rate no cheat é o mesmo valor que está no sketch
Perguntas comuns sobre o Arduino
Dá para usar um Uno com host shield no lugar?
Não, porque um Uno não consegue se apresentar como mouse USB: o soquete USB dele é ligado a uma ponte serial, e não ao microcontrolador principal. Você precisa de uma placa cujo próprio chip tenha USB, como uma das placas 32u4.
Eu preciso mesmo soldar?
Não, se o seu shield tiver um conector ICSP na parte de baixo, porque aí ele encaixa e funciona. A maioria dos shields baratos não tem, e nesse caso você precisa isolar três pinos e passar três fios.
Este dispositivo é mais detectável que um KMBox?
Nada aqui é indetectável, e a comparação real é mais estreita do que as pessoas imaginam. Nos dois casos o movimento chega como tráfego USB HID real. Uma montagem caseira barata tende a ficar mais fraca na identidade USB que apresenta se você deixar tudo de fábrica, mas isso é uma escolha de configuração, não um resultado do preço.
O dongle do meu mouse sem fio funciona no shield?
Muitas vezes sim, porque o controlador host o enxerga como um dispositivo USB HID. Dongles que apresentam interfaces extras do fabricante são a exceção de sempre, e o software de configuração do mouse em geral para de funcionar através de qualquer passthrough.
Por que a porta COM fica mudando?
Porque a interface serial faz parte do gadget USB da placa, e a placa reinicia durante os uploads. Quando o seu firmware estiver definitivo, force um número baixo e fixo no Gerenciador de Dispositivos.
Fontes
Nada na nossa lista de fontes verificadas cobre o Leonardo, o host shield ou o MAX3421E, então os jumpers e os passos de upload vêm de montar um.
Leia em seguida
- KMBox Net, KMBox B+, MAKCU, Teensy ou Arduino: qual dispositivo de entrada comprar
- Teensy 4.1 como dispositivo de entrada em um setup DMA
- Descritores USB, VID/PID e o que significa clonar um descritor
- O cursor não se move: como consertar a camada de entrada
- A cadeia de sinal completa, da sua mão até o jogo
Ainda travado? Abra um ticket no Discord
Todos os guias