Arduino USB Host expansion board

Last updated on 14 November 2020 by Suffocation

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.

I found a nice project online that controls a cursor on an LCD display using a mouse. To see if I was capable of doing it myself, I've modified it slightly without looking at the existing code.

Areas of application

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

  • Connecting HID devices like mice and keyboards
  • Using PS3/4 controllers
  • Xbox Controller
  • Accessing Mass Storage*
  • Connecting Bluetooth Adapters
  • ...

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

Facts

The facts are quite brief, the board includes:

  • USB port
  • Reset Button

Stückliste

  • USB expansion board
  • Arduino Uno or compatible
  • USB mouse (a cheap Logitech for me)
  • LCD Display
  • A few pin header cables

Views

Programming

Libraries

USB

There is a library that has become very extensive:

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

I have copied the files from the USB library used into the project folder. ACHTUNG: es sind nur die benötigten Dateien im Ordner.

Graphics

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.

The integration of libraries in general is described under the following link, and I will not go into further detail here.
https://fambach.net/arduino-ide#Bibliotheken

Test programme

Test 1 – Read out mouse

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.

ArduinoUsbDisplayMouseTestV1Download here

Test 2 – Graphics

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.

Here is the example program:

u8gGraphicsTestDownload

This is what it looks like:

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

Joint final product

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

The source code can be downloaded here.

ArduinoUsbDisplayMouseTestV2Download

That's how it is

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

Problems

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.

Conclusion

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

Sources

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

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

DateChangeAuthor
15.06.2019Post createdSuffocation

2 thoughts on “Arduino USB Host Zusatzplatine

  1. It's a shame USB sticks hardly ever work.
    nix USB stick FAT or FAT32 support.. simply doesn't work with Arduino

    1. Hello StockingOwl,
      Thanks for your contribution. At first, I didn't want to believe it, but being able to read certainly helps; it's in the header for the Mass Storage driver. I researched this a bit because I still found it hard to believe. My current understanding is that it doesn't work with an Arduino Uno and this library. It's missing the 3rd timer; even if you managed with two, the memory would be too small. While there are success stories, they're rather haphazard and only use fragments of this or other libraries. Furthermore, it seems possible to address USB flash drives via a special USB controller. However, the controller handles the work in that case. It's supposed to work on the ATmega, though. I haven't tried it yet, but I will. I'll update the post in the coming weeks.

      Hello
      Stefan

Leave a Reply

Your email address will not be published. Required fields are marked *