![](/blog/connecting-the-joystick-to-the-raspberry-pi/hero.jpg)
Das Verbinden des Joysticks mit dem Raspberry Pi
Ich habe mit Nico zusammen den Joystick an den Raspberry Pi angeschlossen.
Um den Raspberry Pi verwenden zu können, mussten wir erstmal das Rasperry-Pi-Betriebssystem auf einer SD-Karte installieren. Dafür gibt es das Programm Raspberry Pi Imager.
Im Raspberry Pi Imager können auch direkt Einstellungen wie beispielsweise die WLAN-Einrichtung vorgenommen werden.
Nach Abschluss der Installation haben wir die SD-Karte dann in den Raspeberry Pi gesteckt.
Der Joystick musste über fünf Kabel mit dem Raspberry Pi verbunden werden. Einmal ein Kabel, das an GND angeschlossen werden musste, und vier Kabel für die vier verschiedenen Richtungen, in die der Joystick bewegt werden kann (oben, unten, links, rechts). Diese vier Kabel wurden an vier GPIO-Pins des Raspberry Pis angeschlossen.
Wir haben folgenden Skript zum Testen des Joysticks verwendet. Dabei mussten wir darauf achten, dass immer abgefragt wird, ob auf dem entsprechende Input kein Strom liegt, da es sich bei unserem Joystick um einen Always-High-Joystick handelt. Das bedeutet, dass standardmäßig auf allen vier GPIO-Pins Strom liegt und auf einem GPIO-Pin nur kein Strom liegt, wenn der Joystick gerade in die entsprechende Richtung gedrückt wird. Zusätzlich musste darauf geachtet werden für alle vier Inputs einen Pull-Up-Widerstand zu aktivieren.
import time
import pygame
import RPi.GPIO as GPIO
pygame.init()
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(17, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(27, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down = GPIO.PUD_UP)
while True:
#Das ist ein Always High JoyStick, das bedeutet,
#dass wir nach if not fragen, da wir nach KEINEM Strom für
#einen Input suchen
direcion = ""
if not GPIO.input(17):
direction = "hoch"
print("JoyStick Richtung:" + direction)
if not GPIO.input(18):
direction = "links"
print("JoyStick Richtung:" + direction)
if not GPIO.input(27):
direction = "runter"
print("JoyStick Richtung:" + direction)
if not GPIO.input(22):
direction = "rechts"
print("JoyStick Richtung:" + direction)
GPIO.cleanup()
Im Video ist zu sehen wie der Skript funktioniert und die Richtungen des angeschlossenen Joysticks korrekt ausgegeben werden.
Header-Belegung
Hier ist die Header-Belegung unseres Raspberry Pis nach Anschluss des Joysticks.
Links
Pin | Funktion | BCM | Verwendung |
---|---|---|---|
1 | 3V3 | ||
3 | GPIO (SDA) | 2 | |
5 | GPIO (SCL) | 3 | |
7 | GPIO (GPCLK0) | 4 | |
9 | GND | ||
11 | GPIO | 17 | Joystick oben |
13 | GPIO | 27 | Joystick unten |
15 | GPIO | 22 | Joystick rechts |
17 | 3V3 | ||
19 | GPIO (MOSI) | 10 | |
21 | GPIO (MISO) | 9 | |
23 | GPIO (SCLK) | 11 | |
25 | GND | ||
27 | GPIO (ID_SD) | 0 | |
29 | GPIO | 5 | |
31 | GPIO | 6 | |
33 | GPIO (PWM1) | 13 | |
35 | GPIO (PCM_FS) | 19 | |
37 | GPIO | 26 | |
39 | GND |
Rechts
Pin | Funktion | BCM | Verwendung |
---|---|---|---|
2 | 5V | ||
4 | 5V | ||
6 | GND | ||
8 | GPIO (TXD) | 14 | |
10 | GPIO (RXD) | 15 | |
12 | GPIO (PCM_CLK) | 18 | Joystick links |
14 | GND | Joystick | |
16 | GPIO | 23 | |
18 | GPIO | 24 | |
20 | GND | ||
22 | GPIO | 25 | |
24 | GPIO (CE0) | 8 | |
26 | GPIO (CE1) | 7 | |
28 | GPIO (ID_SC) | 1 | |
30 | GND | ||
32 | GPIO (PWM0) | 12 | |
34 | GND | ||
36 | GPIO | 16 | |
38 | GPIO (PCM_DIN) | 20 | |
40 | GPIO (PCM_DOUT) | 21 |