Raspberry Pi mittels Xbox 360 Controller steuern

7. April 2017
2903 Views
13 Comments

Neben der Steuerung des Raspberry Pi’s über Infrarot Fernbedienungen, 433 Mhz Sender, Instant Messenger und vielen weiteren, kann auch ein kabelloser Xbox 360 Controller vom Raspberry Pi ausgelesen werden und entsprechend darauf reagiert werden. So kann das Gamepad als externe Maus (im Desktop Modus) verwendet werden oder Skripte und somit die GPIOs angesteuert werden. In RetroPie kann der Xbox Controller außerdem als Eingabemedium für Spiele auf dem Raspberry Pi genutzt werden.

In diesem Tutorial werden mehrere dieser Möglichkeiten aufgezeigt. Angefangen von der Installation der benötigten Software, über die Verwendung als Maus bis hin zum Schalten der GPIOs und dem Steuern eines Servo Motors mit Hilfe des Joysticks.

 

Zubehör

Um den Raspberry Pi mit dem Xbox 360 Controller nutzen zu können, ist nicht viel Zubehör erforderlich:

Jedes Raspberry Pi mit mind. einem freien USB Port kann also verwendet werden, wie z.B. das leistungsstärkere Raspberry Pi 3.

Falls du das kleine Projekt unten nachbauen willst, benötigst du außerdem noch:

 

 

Raspberry Pi Software für Xbox 360 Controller

Für Linux Distributionen gibt es einen entwickelten Treiber, speziell für die Kommunikation mit Xbox Controllern.

Wir installieren also zuerst den Treiber, damit mit dem Controller kommuniziert werden kann:

sudo apt-get install xboxdrv

Jetzt kann der USB Empfänger angeschlossen werden. Mit lsusb kannst du überprüfen, ob er erkannt wurde:

pi@raspberrypi:~ $ lsusb
Bus 001 Device 005: ID 045e:0291 Microsoft Corp. Xbox 360 Wireless Receiver for Windows
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

 

Nun kannst du den Controller anschalten und testen, ob er erkannt wird. Dazu startest du den Treiber mittels:

sudo xboxdrv --detach-kernel-driver

Anschließend sollte sich beim Drücken der Tasten der Log verändern, der angibt, welche Taste(n) gedrückt sind und ggf. dessen Wert.

 

Auf der Dokumentation-Seite gibt es alle Befehle mit kurzer Erklärung dazu. So ist es bspw. möglich die LEDs des Xbox 360 Controllers leuchten/blinken zu lassen (--led NUM) oder vibrieren lassen (-r 255,255).  Insgesamt können bis zu 4 Funkcontroller verwendet werden und angesprochen bzw. ausgelesen werden.

 

Xbox 360 Controller als Rasbperry Pi Maus verwenden

Eine Funktion die mir besonders gefällt, ist die Maus-Option. Da ich bereits selten eine Tastatur am Raspberry Pi angeschlossen habe (ich nutze fast ausschließlich SSH und manchmal den Remotedesktop) und noch seltener eine Maus, finde ich es sehr praktisch den Xbox 360 Wireless Controller auch als Maus für den Raspberry Pi nutzen zu können. Alles was dazu benötigt wird, haben wir bereits installiert.

Lediglich ein weiterer Parameter muss angegeben werden:

sudo xboxdrv --detach-kernel-driver --silent --mouse

Die Geschwindigkeit und Auswahl der Tasten kannst du außerdem auch ändern (wie steht in der Dokumentation). Falls der Befehl bereits bei Systemstart ausgeführt werden soll, kannst du entweder ein Autostart Skript schreiben oder crontab nutzen.

Folgende (Standard) Belegung der Tasten für die Verwendung als Maus gilt:

  • A: Linksklick
  • B: Rechtsklick
  • X: Mittlere Maustastenklick
  • Y: Eingabe / Enter
  • Linker Controller: Mausbewegung
  • Rechter Controller: Scrollrad
  • Steuerkreuz: Pfeiltasten
  • Start: Vorwärts
  • Back: Zurück
  • LB: Bild auf
  • RB: Bild ab

 

 

Mit dem Xbox 360 Controller Skripte und Befehle starten

Eine Möglichkeit den Treiber in eigenen Skripten zu vewenden wäre das manuelle Auslesen der Ausgabewerte. Um uns diesen Aufwand zu ersparen, können wir aber auf eine bereits erstellte Python Bibliothek zurückgreifen.

 

git clone https://github.com/FRC4564/Xbox
cd Xbox

Anbei ist auch ein Beispiel (sample.py), welches man sich ggf. ansehen kann.

Ich habe daher mal ein kleines Beispiel mit einem Servomotor und 4 LEDs als Inspiration aufgebaut. Die Verkabelung ist recht einfach (Vorwiderstand an die LEDs), daher nur hier als schematischer Aufbau gezeigt:

Raspberrya Pi Xbox 360 Steckplatine

Wie ein Servomotor genau angesteuert werden kann, ist in diesem Tutorial nachzulesen.

 

Der Code dazu ist folgender (Datei z.B. mit sudo nano xbox360_example.py erstellen und mit STRG+X,O speichern und beenden):

Anschließend kannst du den Code ausführen (sudo nano xbox360_example.py) und mit den Buttons die LEDs an und ausschalten, sowie mit dem linken Joystick den Servomotor lenken. Um zu stoppen, drücke die BACK Taste.

Im nachfolgenden Video kannst du dir dieses kleine Projekt außerdem anschauen:

Darüber hinaus können noch viele weitere Sachen mit dem Raspberry Pi und Xbox 360 Controller angestellt werden. Ich plane z.B. eine Robotersteuerung mit Hilfe des Joysticks und verändern der Modi anhand der Knöpfe.

Nun, was wären eure nächsten geplanten Projekte mit dem Controller? 🙂

13 Kommentare

  1. Hallo,
    bei meinem Versuch kommt eine Fehlermeldung. Hängt es mit Python und Python3 zusammen? Da das Modul xbox vo 11/9/13 ist?
    Danke für eine Antwort.
    Die Fehlermeldung:
    pi@raspberrypi:~/roboter $ sudo python3 xbox360_example.py
    Traceback (most recent call last):
    File „xbox360_example.py“, line 49, in
    joy = xbox.Joystick()
    File „/home/pi/roboter/xbox.py“, line 67, in __init__
    raise IOError(‚Unable to detect Xbox controller/receiver – Run python as sudo‘)
    OSError: Unable to detect Xbox controller/receiver – Run python as sudo
    pi@raspberrypi:~/roboter $

    Antworten
      • Ist hier schon eine Lösung gefunden worden?
        Bei mir erscheint die selbe Fehlermeldung, unabhängig davon ob python3 oder 2.7.

  2. Hallo tolles Tutorial :),
    Mein Controller tut sich öfter mal schwer die Bluetoothverbindung herzustellen.
    Weißt du ob und wie man das verbessern könnte?

    Antworten
  3. Hallo Felix,

    danke für die Antwort. Hier die Fehlermeldungen:
    pi@raspberrypi:~ $ cd roboter
    pi@raspberrypi:~/roboter $ sudo python xbox360_example.py
    ^X^CTraceback (most recent call last):
    File „xbox360_example.py“, line 67, in
    x, y = joy.leftStick()
    File „/home/pi/roboter/xbox.py“, line 233, in leftStick
    return (self.leftX(deadzone),self.leftY(deadzone))
    File „/home/pi/roboter/xbox.py“, line 111, in leftX
    raw = int(self.reading[3:9])
    KeyboardInterrupt
    pi@raspberrypi:~/roboter $
    pi@raspberrypi:~/roboter $ sudo python2.7 xbox360_example.py
    ^CTraceback (most recent call last):
    File „xbox360_example.py“, line 67, in
    x, y = joy.leftStick()
    File „/home/pi/roboter/xbox.py“, line 233, in leftStick
    return (self.leftX(deadzone),self.leftY(deadzone))
    File „/home/pi/roboter/xbox.py“, line 118, in leftY
    return self.axisScale(raw,deadzone)
    File „/home/pi/roboter/xbox.py“, line 135, in axisScale
    if abs(raw) < deadzone:
    KeyboardInterrupt
    pi@raspberrypi:~/roboter $

    Antworten
  4. Danke für die Antwort.
    Morgen gehe ich das Tutorial noch einmal exakt durch, Wäre doch gelacht, wenn es nichts wird.

    Antworten
  5. Ich frage mich, warum mein Programm keine Fehlermarke mich Compiliert

    import RPi.GPIO as GPIO
    import math
    import xbox
    
    GPIO.setmode(GPIO.BCM)
    
    verde =4 
    
    GPIO.setup(verde, GPIO.OUT)
    
    
            #Initialize joystick
        joy = xbox.Joystick()
            while not joy.Back():
            
     
        if joy.B():
     GPIO.output(verde, GPIO.HIGH)
         
         else:
            GPIO.output(verde, GPIO.LOW)
    
        joy.close()                   #Cleanup before exit
    Antworten
    • In Python sind die Einrückungen wichtig, da es keine Klammernotation gibt. Die sind bei dir komplett zufällig. Das kann so nicht funktionieren.

      Antworten
  6. Hallo Felix,
    ich bekomme immer wieder die Fehlermeldung „No module named xbox“.
    Wie gehe ich damit um? Für mich ist das Raspberry Pi komplettes neuland…
    Ich habe bereits den Treiber installiert und getestet. Müsste alles passen.

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!