Arduino Leonardo mit USB Host Shield
Das günstigste Eingabegerät im Aufbau: wie das Shield auf der Platine sitzt, warum seine SPI-Leitungen auf den ICSP-Header gebrückt werden müssen, wie der Sketch draufkommt und welche Grenzen du in Kauf nimmst.
Kurze Antwort
Ein Arduino Leonardo mit USB Host Shield ist die günstigste funktionierende Maus-Durchleitung: Der MAX3421E auf dem Shield liest deine Maus, und der ATmega32u4 gibt sie weiter. Es ist auch die fummeligste: Die meisten Shields erwarten die Pinbelegung des Uno, SPI muss also auf den ICSP-Header gebrückt werden.
Auf dieser Seite9
- Warum ein Leonardo und kein Uno
- Welche Teile du brauchst
- So verbindest du die SPI-Leitungen des Shields
- So spielst du den Sketch auf
- Warum sich die COM-Nummer immer wieder ändert
- Was du für den niedrigeren Preis aufgibst
- Wer so etwas bauen sollte
- Was du prüfen solltest, bevor du es für kaputt hältst
- Häufige Fragen zum Arduino
Warum ein Leonardo und kein Uno
Der Grund ist der Mikrocontroller. Der Leonardo nutzt einen ATmega32u4, der USB im Chip hat, die Platine kann sich einem PC gegenüber also direkt als Tastatur, Maus oder serielle Schnittstelle ausgeben. Ein Uno kann das nicht, denn seine USB-Buchse hängt an einem separaten Bridge-Chip, dessen einzige Aufgabe seriell ist, er kann also nie behaupten, eine Maus zu sein. Dieser eine Unterschied ist der ganze Grund, warum dieser Aufbau einen Leonardo verlangt. Und es ist auch der Grund, warum der Uno, den du schon hast, nicht funktioniert, egal wie der Code geschrieben ist. Platinen mit demselben 32u4-Chip, etwa ein Pro Micro, arbeiten nach demselben Prinzip.
Welche Teile du brauchst
Der Aufbau braucht zwei Platinen und zwei Kabel. Diese Einfachheit ist der Reiz, und es ist wirklich der günstigste Weg zu einem Cursor, der sich bewegt.
- Arduino Leonardo
- ATmega32u4 mit nativem USB. Zeigt dem Gaming-PC die Maus-Schnittstelle und trägt zugleich die serielle Verbindung
- USB Host Shield 2.0
- Trägt einen MAX3421E als USB-Host-Controller, angesprochen über SPI. In diese Hälfte steckst du deine echte Maus
- Bibliothek
- Die USB Host Shield Library 2.0, die auf der Host-Seite die HID-Maus-Verarbeitung liefert
- Kabel zum Gaming-PC
- Die Micro-USB-Buchse des Leonardo selbst. Das ist die HID-Seite
- Kabel zum Zweit-PC
- Bei einem Aufbau mit einem Kabel ebenfalls die USB-Buchse des Leonardo, oder ein separater USB-Seriell-Adapter an einem UART, wenn du die Verbindungen körperlich trennen willst
- Lötkolben
- In der Praxis nicht optional. Siehe den nächsten Abschnitt
Achtung
So verbindest du die SPI-Leitungen des Shields
Dieser Schritt hat dem Aufbau seinen Ruf eingebracht. Die meisten USB Host Shields wurden für den Uno entworfen, wo SPI auf den Digitalpins 11, 12 und 13 liegt. Auf dem Leonardo sind diese Pins überhaupt kein SPI, denn SPI liegt dort nur auf dem 6-poligen ICSP-Header. Steckst du ein Uno-verdrahtetes Shield auf einen Leonardo, sieht es richtig aus, während die Platine nie mit dem MAX3421E spricht.
- Prüf, ob dein Shield auf der Unterseite eine ICSP-Buchse hat. Shields mit dieser Buchse stecken sich auf einen Leonardo und laufen einfach
- Hat es keine, musst du brücken. Find heraus, wo die SPI-Pins des Shields (Takt, Dateneingang und Datenausgang) auf der Uno-Stiftleiste landen
- Trenn diese drei Pins ab, bieg sie heraus oder isolier sie anderweitig, damit sie nicht mehr mit den Digitalpins 11, 12 und 13 des Leonardo verbunden sind
- Zieh drei Drähte von den getrennten Shield-Pins zu den passenden Pins auf dem ICSP-Header des Leonardo
- Lass die Chip-Select-Leitung, meistens Pin 10, so verbunden, wie sie war, denn Chip Select ist ein gewöhnlicher Digitalpin und seine Zuordnung stimmt bereits
- Bevor du dem Stapel Strom gibst: Prüf, dass das Shield 5 V und Masse von der Stiftleiste bekommt
- Schalt ein und führ das Diagnosebeispiel der Bibliothek aus. Es meldet, ob der MAX3421E überhaupt antwortet, und mehr muss dieser Schritt nicht zeigen
So spielst du den Sketch auf
Das Aufspielen ist unkompliziert, sobald die Verdrahtung stimmt, aber beweis erst, dass die Host-Seite läuft, bevor du etwas Komplexeres schreibst oder flashst.
- Installier die Arduino IDE und füg über die Bibliotheksverwaltung die USB Host Shield Library 2.0 hinzu
- Wähl Werkzeuge, dann Board, dann Arduino Leonardo, und nimm den Port, an dem die Platine auftaucht
- Spiel das Diagnosebeispiel der Bibliothek für die Host-Platine auf und öffne den seriellen Monitor, der den Controller als vorhanden und initialisiert melden sollte
- Spiel das HID-Maus-Beispiel der Bibliothek auf, steck eine Kabelmaus in das Shield und prüf, dass Bewegung und Klicks im seriellen Monitor erscheinen
- Erst danach spielst du die Durchleitungs-Firmware auf, die dein Cheat erwartet, mit demselben Board und demselben Port
- Notier dir die Baudrate, mit der der Sketch die serielle Verbindung öffnet, denn denselben Wert musst du im Cheat eintragen
- Trenn den Stapel nach dem letzten Aufspielen vom Strom, statt dich auf einen weichen Neustart zu verlassen
Warum sich die COM-Nummer immer wieder ändert
Beim Leonardo gehört die serielle Schnittstelle zum USB-Gadget der Platine und hängt nicht an einem separaten Bridge-Chip. Deshalb kann sich die COM-Nummer ändern, wenn die Platine neu startet, und sie ändert sich erneut, wenn die Platine während eines Uploads in ihren Bootloader geht. Auf einem Stapel, den du ständig neu flashst, ist das normal. Sobald du bei einer endgültigen Firmware angekommen bist, such den Port im Geräte-Manager und erzwing unter Anschlusseinstellungen und Erweitert eine niedrige einstellige Nummer. Dann trägst du diese Nummer im Cheat ein. Willst du die Steuerverbindung vollständig vom Gaming-PC trennen, nimm sie über einen Hardware-UART mit einem USB-Seriell-Adapter. Der Gaming-PC sieht dann ein Gerät, das nur eine Maus ist.
Was du für den niedrigeren Preis aufgibst
Keiner dieser Kompromisse ist tödlich, aber jeder ist etwas, das ein teureres Gerät dir nicht abverlangt.
| Bereich | Leonardo + Shield | Warum es zählt |
|---|---|---|
| Zusammenbau | Löten oder Brücken ist meistens nötig | Die mit Abstand häufigste Ursache für einen Aufbau, der nie läuft, und ohne Messgerät am schwersten einzugrenzen |
| Bandbreite am Host | Der MAX3421E ist ein Full-Speed-Host-Controller | Für Mäuse in Ordnung. Es ist nicht die Platine für den Fall, dass du ein High-Speed-Gerät durchreichen willst |
| Rechenreserve | Ein 8-Bit-Mikrocontroller mit 16 MHz | Genug, um Reports weiterzureichen. Für Glättung oder Formung der Bewegung auf dem Gerät selbst bleibt sehr wenig übrig |
| Reportrate | Begrenzt durch eine Full-Speed-Device-Schnittstelle | Die 1-ms-Grenze von Full-Speed-USB gilt. Der High-Speed-Device-Port eines Teensy 4.1 ist so nicht begrenzt |
| Kontrolle über den Deskriptor | Möglich, aber die Werkzeuge sind rauer | Du kannst ändern, was der Gaming-PC sieht. Hier ist es mehr Arbeit als auf einem Teensy und viel mehr als bei einer Firmware, die Deskriptoren für dich klont |
| Support | Nur die Community | Wenn es kaputtgeht, gibt es keinen Hersteller. Der Vorteil: Jedes Teil davon ist von irgendwem dokumentiert |
Tipp
Wer so etwas bauen sollte
Dieser Aufbau passt zu Leuten, die schon einen Lötkolben besitzen, Spaß an der Sache haben und das Gerät als Projekt und nicht als Kauf betrachten. Trifft das auf dich zu, gibt es ein gutes Wochenendprojekt ab, und du verstehst die Eingabeschicht danach besser als jeder, der eine Box gekauft hat. Trifft es nicht zu, kauf eine MAKCU, denn drei Abende in ein Shield zu stecken, um die Preisdifferenz zu sparen, ist ein schlechter Tausch. Ein halb funktionierendes Eingabegerät ist außerdem schlimmer als gar keines, weil es Fehler erzeugt, die wie Fehler im Cheat aussehen.
Was du prüfen solltest, bevor du es für kaputt hältst
- Die Platine ist ein Leonardo oder eine andere ATmega32u4-Platine und kein Uno
- Die SPI-Leitungen des Shields erreichen den ICSP-Header, über eine Buchse oder über Drähte
- Die Diagnose der Bibliothek meldet den MAX3421E als vorhanden
- Eine schlichte Kabelmaus schreibt im HID-Maus-Beispiel Bewegung mit
- Der Gaming-PC listet ein Mausgerät, wenn der Leonardo dort steckt
- Die COM-Nummer im Cheat passt zum Geräte-Manager und ist einstellig
- Die Baudrate im Cheat passt zum Wert im Sketch
Häufige Fragen zum Arduino
Kann ich stattdessen einen Uno mit Host Shield nehmen?
Nein, denn ein Uno kann sich nicht als USB-Maus ausgeben: Seine USB-Buchse hängt an einer seriellen Bridge und nicht am Hauptmikrocontroller. Du brauchst eine Platine, deren eigener Chip USB hat, etwa eine der 32u4-Platinen.
Muss ich wirklich löten?
Nicht, wenn dein Shield auf der Unterseite eine ICSP-Buchse hat, denn dann steckt es sich auf und läuft. Die meisten günstigen Shields haben keine, und dann musst du drei Pins isolieren und drei Drähte ziehen.
Ist dieses Gerät leichter zu erkennen als eine KMBox?
Nichts hier ist unerkennbar, und der eigentliche Vergleich ist enger, als die Leute denken. In beiden Fällen kommt die Bewegung als echter USB-HID-Verkehr an. Ein günstiger Selbstbau steht bei der vorgezeigten USB-Identität tendenziell schwächer da, wenn du sie ab Werk lässt, aber das ist eine Frage der Konfiguration und keine Folge des Preises.
Funktioniert der Dongle meiner Funkmaus im Shield?
Oft ja, denn der Host-Controller sieht ihn als USB-HID-Gerät. Die übliche Ausnahme sind Dongles mit zusätzlichen Herstellerschnittstellen, und Konfigurationssoftware im Gerät hört durch jede Durchleitung hindurch in der Regel auf zu funktionieren.
Warum ändert sich der COM-Port ständig?
Weil die serielle Schnittstelle Teil des USB-Gadgets der Platine ist und die Platine bei Uploads neu startet. Sobald deine Firmware endgültig ist, erzwing im Geräte-Manager eine niedrige feste Nummer.
Quellen
In unserer geprüften Quellenliste steht nichts zum Leonardo, zum Host Shield oder zum MAX3421E, das Brücken und die Upload-Schritte stammen also daher, dass wir so einen Aufbau selbst gebaut haben.
Weiterlesen
Kommst du nicht weiter? Ticket auf Discord öffnen
Alle Anleitungen