In diesem Tutorial zeige ich Ihnen, wie Sie einen Wii-Nunchuck-Adapter an einen Raspberry Pi anschließen und das Schildkrötenmodul mit Python steuern.
Dieses Tutorial funktioniert sowohl mit offiziellen Nintendo- als auch mit Drittanbieter-Nunchakus. Der Nunchuck ist ein guter Multi-Use-Eingang für einen Raspberry Pi, da er preisgünstig abgerufen werden kann und einen Joystick, einen dreiachsigen Beschleunigungssensor und zwei Tasten in einem ergonomisch freundlichen Controller enthält.
Um den Nunchuck mit dem Pi zum Laufen zu bringen, benötigen Sie:
Wenn Sie sich mutig fühlen, schneiden Sie die Anschlüsse gerne ab und haben Ersatzcontroller. Sie können die Drähte direkt an die Raspberry Pi GPIO-Pins anschließen. Da für jeden Anschluss Kabel mit unterschiedlichen Farben verwendet werden können, öffnen Sie am besten den Controller, um die Verdrahtungsfarben zu ermitteln.
In meinem Controller habe ich die folgenden Drähte, da es sich um einen Controller eines Drittanbieters handelt. Beachten Sie die Farben und die Pins, an die sie angeschlossen werden. Die Chancen stehen gut, dass sie sich in meinem Beispiel erheblich vom Steckverbinder unterscheiden können.
Schneiden Sie den Endstecker ab, den Sie an die Wiimote anschließen, und entfernen Sie die Kunststoffummantelung, um die blanken Drähte freizulegen. Löten Sie jeden Draht an eine weibliche Drahtbrücke, und verwenden Sie anschließend ein Isolierband, um die Lötstellen vor Berührung zu schützen. Wenn Sie sich sicher sind, dass jede Farbe mit dem jeweiligen Draht übereinstimmt, stecken Sie sie direkt auf die i2c- und die Power-Pins des Pi.
Wenn Sie sich nicht mutig fühlen oder keinen Controller zur Verfügung haben, können Sie immer einen Adapter wie den MultiChuck-Adapter verwenden, um Ihren Controller an Ihren Pi anzuschließen, ohne den Anschluss zu beeinträchtigen.
Verwendung eines MultiChuck-Adaptersi2c ist nicht standardmäßig aktiviert. Dies erfordert die Bearbeitung von zwei Dateien. Die erste Datei aktiviert das serielle Protokoll und die zweite startet den seriellen Treiber, wenn der Raspberry Pi startet.
Um die erste Datei zu bearbeiten, geben Sie diese in das ein LXTerminal Fenster oder Kitt Wenn Sie eine Remote-Verbindung herstellen: Sudo Nano / etc / module
Hinzufügen i2c-dev
und i2c-bcm2708
bis zum Ende der Datei, so dass es so aussieht:
Control-X um die Änderungen zu speichern, Y zu bestätigen und Eingeben in der Datei speichern.
Um den Treiber beim Start zu aktivieren, geben Sie Folgendes ein:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
dann fügen Sie ein #
an den Anfang jeder Zeile, so dass es so aussieht:
Nochmal Control-X um die Änderungen zu speichern, Y zu bestätigen und Eingeben in der Datei speichern. Dies sind die Änderungen, die das Raspberry Pi benötigt, um über das i2c-Protokoll zu sprechen. Nächster Typ:
Sudo Neustart Neustart
um die Änderungen wirksam werden zu lassen.
Nach dem Neustart des Raspberry Pi öffnen Sie LXTerminal erneut. Als letztes müssen Sie jetzt die Python-Module installieren, um die Kommunikation zwischen Python und i2c zu handhaben:
sudo apt-get Update Sudo apt-get installieren python-smbus -y
Um den Umgang mit den Nunchuck-Daten zu vereinfachen, habe ich ein Modul erstellt, das in Ihr Skript importiert werden kann. Öffnen LXTerminal und geben Sie den folgenden Befehl ein, um es herunterzuladen.
wget https://raw.githubusercontent.com/Boeeerb/Nunchuck/master/Raspberry%20Pi/nunchuck.py
Nunchuck-Daten lesen
Jetzt haben Sie alle erforderlichen Bibliotheken und Module, testen Sie, ob es funktioniert. Während noch in LXTerminal, eintippen
Sudo-Python
Um die interaktive Python-Konsole zu starten, können Sie hiermit einen Schnelltest mit Python schreiben.
von nunchuck import nunchuck wii = nunchuck () wii.raw ()
Wenn alles so funktioniert, wie es sollte, sollten Sie mit einer Reihe von Zahlen wie folgt rechnen:
Die Zahlen entsprechen den Ausgaben des Joysticks, des Beschleunigungsmessers und den Zuständen der Tasten.
Wii.raw ()
gibt Ihnen einen Ausdruck von jedem, beginnend mit dem Linken, den Sie haben:[Joystick X, Joystick Y, Beschleunigungsmesser X, Beschleunigungsmesser X, Beschleunigungsmesser X, Gemischte Daten mit Tasten Z und C]
Ich habe auch einzelne Funktionen für jede dieser Funktionen hinzugefügt, um das Schreiben Ihrer eigenen Skripte zu erleichtern.
wii.raw () # Gibt alle Daten in Raw zurück wii.joystick () # Gibt nur die X- und Y-Positionen des Joysticks zurück wii.accelerometer () # Gibt die X-, Y- und Z-Positionen des Beschleunigungssensors zurück wii.button_c () # Gibt True zurück, wenn die C-Taste gedrückt wird. False, wenn nicht. Wii.button_z () # Gibt True zurück, wenn die Z-Taste gedrückt wird. False, wenn nicht wii.joystick_x () # Gibt nur die X-Position des Joysticks zurück. Wii.joystick_y () # Gibt nur zurück die Y-Position des Joysticks wii.accelerometer_x () # Gibt nur die X-Position des Beschleunigungsmessers zurück. wii.accelerometer_y () # Gibt nur die Y-Position des Beschleunigungsmessers zurück. wii.accelerometer_z () # Gibt nur die Z-Position des Beschleunigungsmessers wii zurück. scale (value, min, max, out_min, out_max) # Funktioniert genauso wie die Arduino Map, ideal zum Ändern von Werten, die auf einen anderen Maßstab zurückgegeben werden, z. B. -100 - +100
Sie können eine mit einer Schleife ausprobieren, indem Sie Folgendes in a eingeben Sudo-Python
Konsole. Dadurch wird die aktuelle Position des Joysticks ausgegeben. Geben Sie den Joystick ein und bewegen Sie ihn, um die Anzahl der Nummern zu ändern.
von nunchuck import nunchuck from time import sleep wii = nunchuck (), während wahr: wii.joystick () sleep (0.2)
Jetzt haben Sie Ihr Nunchuck an den Raspberry Pi angeschlossen, die Bibliotheken und Module installiert und getestet, dass es funktioniert. Ich zeige Ihnen, wie Sie etwas Spaß daran haben.
Python auf dem Raspberry Pi wird mit installiert Schildkröte Mit diesem Modul können Sie schnell und einfach Muster erstellen, indem Sie ein paar Zeilen Code hinzufügen. Da es sehr einfach ist, loszulegen, zeige ich Ihnen, wie Sie mit dem Nunchuck eine Schildkröte kontrollieren können.
Für den nächsten Abschnitt werde ich verwenden Im Leerlauf Um den Python-Code zu schreiben, aber da das serielle Protokoll Administratorrechte erfordert, müssen Sie zurückgehen LXTerminal wieder und tippe:
Sudo im Leerlauf
Klicken Datei dann Neues Fenster. In dem neuen Fenster wird der Python-Code angezeigt. Drücken F5 wird den Code ausführen. Fügen Sie den Code von vor ein, um Schlaf- und Nunchakomodule zusammen mit der Schildkröte zu importieren.
von nunchuck import nunchuck aus zeit import schlaf turtle wii = nunchuck () turtle.setheading (90) while True: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) wenn wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: Schildkröte (10)nunchuckturtle.py script
Nachdem Sie den Code eingegeben haben, drücken Sie F5 um es auszuführen Sie werden dann aufgefordert, die Datei zu speichern. Geben Sie ihr einen geeigneten Namen. Ein Fenster wird nun mit einem kleinen schwarzen Dreieck angezeigt. Jetzt können Sie es ausprobieren. Testen Sie den Joystick.
In dem Code, den Sie verwendet haben, importieren die ersten vier Zeilen die benötigten Module und initiieren den Nunchuck, der zur Verwendung bereit ist. turtle.setheading (90)
wird den Pfeil nach oben zeigen, als 0
zeigt nach rechts. Der nächste Block startet eine Ewig-Schleife-während wahr:
. Python prüft, ob sich die Joystick-Position oberhalb oder unterhalb einer bestimmten Zahl befindet, und bewegt den Schildkröten-Cursor entsprechend.
Jetzt haben Sie Bewegung. Ich werde Ihnen zeigen, wie Sie mit der Interaktivität etwas mehr Interaktivität hinzufügen können C und Z Tasten. Einige nützliche Funktionen sind das Löschen des Bildschirms und das Anheben des Stiftes, sodass Sie sich bewegen können, ohne eine Linie zu zeichnen.
von nunchuck import nunchuck aus zeit import schlaf turtle wii = nunchuck () penstate = 0 turtle.setheading (90), während wahr: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) wenn wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10) if wii.button_c () == True: turtle.setposition (0,0) turtle.setheading (90) turtle.clear () if wii.button_z () == True: wenn penstate = = 0: turtle.up () penstate = 1 sonst: turtle.down () penstate = 0 sleep (0.2)
Drücken Sie F5 um das neue Skript zu speichern und zu starten und die Schaltflächen zu testen. Taste C löscht den Bildschirm und setzt die Cursorposition zurück Z hebt den Stift an und setzt ihn ab, so dass Sie mit dem Zeichnen einer Linie beginnen und aufhören können.
Ich werde den Tastencode aufschlüsseln, damit Sie verstehen, was passiert, wenn Sie die Taste drücken.
Wenn Sie die Taste drücken C Taste, das kommt als zurück Wahr und dreht die Schildkröte zurück, so dass sie nach oben zeigt, bewegt sie dann wieder in die Mitte des Bildschirms und löscht schließlich den Bildschirm.
Wenn Sie die Taste drücken Z Wenn Sie die Taste drücken, wird eine Variable gespeichert, um sich an den Zustand des Stiftes zu erinnern und entweder den Stift anzuheben, um das Zeichnen zu beenden, oder den Stift zurückzusetzen, um das Zeichnen fortzusetzen.
Ich hoffe, dass Sie in diesem Tutorial das Wissen erworben haben, um das Gelernte anzuwenden, um das zu erweitern, was mit dem Nunchakuck möglich ist.
Einige Dinge, die ausgeführt werden können, wie z. B. Kontrollroboter, erstellen Spiele wie Schlange oder schalten LEDs ein und aus, die mit den GPIO-Pins eines Raspberry Pi verbunden sind.