Arduino USB Host Zusatzplatine

Last Updated on 14. November 2020 by sfambach

Eine Zusatzplatine für den Arduino Uno und kompatible. Sie besitzt nicht viel mehr als einen USB Anschluss. Hieran kann diverse Peripherie wie Mäuse, Tastaturen, Gamepads und Festplatten angeschlossen werden.

Da beim Arduino kein Betriebssystem vorhanden ist, welches diverse Treiber bietet, ist die Funktionalität durch die Bibliothek begrenzt. Es können natürlich neue Treiber selbst geschrieben werden und die gefundene Bibliothek (s.u.) bietet auch schon einiges.

Ich habe ein nette Projekt im Netz gefunden, welches mit Hilfe einer Mouse einen Cursor auf einem LCD Display steuert. Um zu sehen ob ich das auch kann, habe ich dieses mal etwas abgewandelt ohne in den schon vorhandenen Code zu schauen.

Anwendungsbereiche

Generell kann die USB Platine dazu verwendet werden diverse Devices an zu schließen, hier nur ein kleiner Auszug:

  • Anschluss von HID wie Mouse und Tastatur
  • Betreiben von PS3/4 Controllern
  • X-Box Controller
  • Ansprechen von Massenspeicher*
  • Anbindung von Bluetooth Adaptern

*USB Sticks und Festplatten könnten Probleme machen, so ist beispielsweise der Arduino Uno zu klein.

Fakten

Die Fakten sind recht kurz, das Board beinhaltet:

  • USB Anschluss
  • Reset Taster

Stückliste

  • USB Zusatzplatine
  • Arduino Uno oder kompatibel
  • USB Mouse (bei mir ne billige Logitech)
  • LCD Display
  • Ein paar Pinheader Kabel

Ansichten

Programmierung

Bibliotheken

USB

Es gibt eine Bibliothek die mittlerweile sehr umfangreich ist:

https://github.com/felis/USB_Host_Shield_2.0

Die verwendeten Dateien der USB Bibliothek habe ich in den Projektordner kopiert. ACHTUNG: es sind nur die benötigten Dateien im Ordner.

Graphik

Da die Adafruit Display-Bibliothek und die USB Bibliothek nicht gemeinsam auf einen Uno passen habe ich nach einer kleineren Graphikbibliothek ausschau gehalten. Im Netz bin ich auf die u8g Bibliothek gestoßen:

https://github.com/olikraus/u8glib

Diese Bibliothek habe ich über den Bibliotheksmanager eingebunden., da sie viele Dateien enthält und ich auf die Arbeit verzichten wollte nur die Benötigten heraus zu suchen.

Die Einbindung von Bibliotheken im generellen ist unter folgenden Link beschrieben, hier werde ich nicht mehr näher darauf eingehen.
https://fambach.net/arduino-ide#Bibliotheken

Testprogramm

Test 1 – Mouse auslesen

Als erstes Testprogramm habe ich das Beispiel Mousetest aus der Bibliothek verwendet. Ich habe die MouseRptParser Klasse so angepasst, dass die Mouse-Werte für die aktuelle Postion sich nur im validen Bereich des Displays verändern. (In X-Richtung von 0-127 bewegen und in Y-Richtung von 0-63). Der Faktor gibt an wie schnell sich die Werte ändern sollen und enspricht der Mausgeschwindigkeit. 0,1 ist sehr langs … 1,0 sehr schnell. Bei 0.1-0.2 liegt für mich ungefähr die Wahrheit. Sonst macht die Klasse nichts ausser die Werte auf der Console auszugeben.

Test 2 – Graphik

Um die Graphik Bibliothek zu testen, habe ich 3 Symbole auf das Display gezeichnet (Ein Kreis, ein Dreieck und ein Rechteck). Ein keinerer Kreis, welcher den Cursor darstellen soll, läuft automatisch von links nach rechts. Die großen Symbole haben einen Kollissions-Erkennung. Sollte der „Cursor“ auf sie treffen füllen sie sich mit der Vordergrundfarbe. Der Cursor selbst wird dann mit der Hintergundfarbe gezeichnet.

Ich habe für jedes der Symbole und den Cursor eine Klasse erstellt welche auch die Kollissionskontrolle übernimmt.

Hier das Beispielprogramm:

So sieht es aus:

https://photos.app.goo.gl/b7yznVixQkmf6gnD8

Gemeinsames Endprodukt

Hier habe ich die beiden Testprogramme zusammengeführt und so angepasst, dass die aktuelle Position der Maus an den Cursor übergeben wird.

Hier kann der Quellcode heruntergeladen werden:

So siehts aus:

https://photos.app.goo.gl/ivEyLbXQM34mccop8

Probleme

Anbindung von Massenspeichergeräten

StrumpfEule meldet, dass die Anbindung von Massenspeichergeräten auf dem Arduino mit der o.g. Bibliothek nicht funtioniert. Ungläubig habe ich dies recherchiert und geteste und muss dies leider zumindest teilweise bestätigen. Auf dem Arduino Uno scheint es garnicht zu funktionieren, sein Speicher ist zu klein und ihm fehlt ein dritter Timer.

Für dem Arduino Mega 2560 liess sich das mitgelieferte Beipsiel compilieren und scheint laut Ausgabe auf der Console auch zu funktionieren. Weitergehende Tests habe ich nicht durchgeführt.

Fazit

Die Einbindung einer Funkmaus war sehr einfach. Die USB Bibliothek bietet fast alles was man braucht. Sie verbrauch viel Speicher, bleibt aber im Rahmen. Dies sollte man jedoch berücksichtigen wenn andere speicherintensive Bibliotheken verwendet werden. Sonst gab es aus meiner Sicht keine größeren Hürden. Ich wollte ander Bibliotheken würden so problemlos funktionieren.

Verwandte Beiträge

Quellen

https://www.watterott.com/en/USB-Host-Shield-20-for-Arduino

https://github.com/felis/USB_Host_Shield_2.0

2 Gedanken zu „Arduino USB Host Zusatzplatine

    1. Hallo StrumpfEule,
      Danke für deinen Beitrag. Ich wollte es erst nich wahr haben aber wer lesen kann ist aber klar im Vorteil, es steht in der Header zum Masstorage Treiber. Ich diesbezüglich etwas recherchiert weill ich es immer noch icht ganz wahr haben wolllte. Mein aktueller Stand ist mit Arduino Uno und dieser Biliothek geht es nicht. Ihm fehlt der 3. Timer, sollte man es mit zwein schaffen ist der Speicher zu klein. Es gibt zwar Erfolgsberichte aber eher durch die Brust ins Auge und nur mit Fragmenten dieser oder anderer Bibliotheken. Weiterhin ist es wohl möglich über einen speziellen USB Controller USB Speicher Sticks anzusprechen. Da übernimmt aber der Controller die Arbeit. Auf dem ATMEGA soll es jedoch funktionierten. Ich habe es noch nicht ausprobiert, werde ich aber nachholen. Ich werde in den nächsten Wochen den Beitrag anpassen.

      Gruß
      Stefan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert