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.

PinFunktionBCMVerwendung
13V3
3GPIO (SDA)2
5GPIO (SCL)3
7GPIO (GPCLK0)4
9GND
11GPIO17Joystick oben
13GPIO27Joystick unten
15GPIO22Joystick rechts
173V3
19GPIO (MOSI)10
21GPIO (MISO)9
23GPIO (SCLK)11
25GND
27GPIO (ID_SD)0
29GPIO5
31GPIO6
33GPIO (PWM1)13
35GPIO (PCM_FS)19
37GPIO26
39GND

Rechts

PinFunktionBCMVerwendung
25V
45V
6GND
8GPIO (TXD)14
10GPIO (RXD)15
12GPIO (PCM_CLK)18Joystick links
14GNDJoystick
16GPIO23
18GPIO24
20GND
22GPIO25
24GPIO (CE0)8
26GPIO (CE1)7
28GPIO (ID_SC)1
30GND
32GPIO (PWM0)12
34GND
36GPIO16
38GPIO (PCM_DIN)20
40GPIO (PCM_DOUT)21