본문 바로가기
로보틱스/라즈베리파이

플레이스테이션(PS3) 컨트롤러 연결하기 [라즈베리파이(Raspberry Pi)]

by J-Build 2020. 8. 29.

이번 포스팅에서는 PS3 컨트롤러를 라즈베리파이에 블루투스를 통해서 무선 연결하는 방법을 알아볼께요. 컨트롤러를가 연결이 되면 로봇조종이나 게임 등 재미있는 것들을 많이 해볼 수 있을것 같아요. 

 

PS3 컨트롤러

준비물

시작하기 전에 OS가 설치된 라즈베리파이와 컨트롤러를 준비해주세요. 라즈베리파이에 아직 OS가 설치 되어있지 않다면 OS 설치 가이드 를 참고해서 설치를 진행해 주세요. 또한 저는 조금더 편한 터미널 환경을 위해서 Oh My Zsh 툴을 사용하기 때문에(Oh My Zsh 설치하기 참고) 라즈베리파이 기본 터미널 모습과 조금 다르게 보입니다.

 

  • 블루투스가 지원되는 라즈베리파이
  • 플레이스테이션(PS3) 컨트롤러
  • USB 미니 케이블 (컨트롤러와 라즈베리파이를 연결하기 위한 USB 케이블)

sixpair 소프트웨어 설치

sixpair 소프트웨어는 PS3 컨트롤러를 리눅스에서 블루투스 모드로 사용하기 위해 개발되었습니다.

다음과 같이 소스코드를 다운로드 받아서 컴파일하고 설치를 시작해보겠습니다. 

 

라즈베리파이를 최신상태로 업데이트를 먼저 해줄께요. 

pi@raspberrypi:~ $ sudo apt update && sudo apt upgrade

 

그리고 USB 기기들과의 인터렉션을 위한 라이브러리를 설치해줍니다. 

pi@raspberrypi:~ $ sudo apt-get install libusb-dev

 

이제 sixpair 소스코드를 다운로드 받습니다. 디렉토리를 하나 만들어서 거기에 파일을 다운로드합니다.

pi@raspberrypi:~ $ mkdir sixpair
pi@raspberrypi:~ $ cd sixpair
pi@raspberrypi:~/sixpair $ wget http://www.pabr.org/sixlinux/sixpair.c

 

이제 컴파일을 합니다. 

pi@raspberrypi:~/sixpair $ gcc -o sixpair sixpair.c -lusb
pi@raspberrypi:~/sixpair $ ll
total 20K
-rwxr-xr-x 1 pi pi  13K Aug 28 02:01 sixpair
-rw-r--r-- 1 pi pi 4.0K Dec 15  2014 sixpair.c

 

컴파일이 에러없이 잘 완료가 되었다면 PS3 컨트롤러를 미니 USB 케이블로 라즈베리파이에 연결해주세요. 앞서 설치한 sixpair 소프트웨어를 실행해서 연결된 PS3 컨트롤러와 initial pairing을 해줍니다. 

pi@raspberrypi:~/sixpair $ sudo ./sixpair
Current Bluetooth master: b8:27:eb:a7:d4:60
Setting master bd_addr to b8:27:eb:a7:d4:60

블루투스 연결

블루투스 연결을 위해서 여러가지 방법이 있지만 가장 간단한 방법인 bluetoothctl 툴을 사용하는 방법을 알아볼께요. 

 

터미널에서 bluetoothctl을 실행 시켜줍니다. 

pi@raspberrypi:~/sixpair $ sudo bluetoothctl
Agent registered
[bluetooth]#

 

블루투스를 on 시키고 현재 agent를 default로 설정합니다. 

[bluetooth]# agent on
Agent is already registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]#

 

이제 라즈베리파이에서 PS3 컨트롤러와 연결된 USB 케이블을 뺐다가 다시 껴줍니다. 그럼 아래와 같은 메세지가 나오는데 yes라고 입력해주세요.

[NEW] Device 00:19:C1:02:C8:3C Sony PLAYSTATION(R)3 Controller
Authorize service
[agent] Authorize service 00001124-0000-1000-8000-00805f9b34fb (yes/no):

 

그럼 다음과 같이 PS3 컨트롤러가 Trusted 되었다는 메세지가 뜨게 됩니다. 

[NEW] Device 00:19:C1:02:C8:3C Sony PLAYSTATION(R)3 Controller
Authorize service
[agent] Authorize service 00001124-0000-1000-8000-00805f9b34fb (yes/no): yes
[CHG] Device 00:19:C1:02:C8:3C Trusted: yes
[CHG] Device 00:19:C1:02:C8:3C UUIDs: 00001124-0000-1000-8000-00805f9b34fb

 

quit 명령으로 bluetoothctl 을 종료해줍니다. 

[bluetooth]# quit

 

이제 PS3 컨트롤러에 연결되어있던 케이블을 제거하고 아래처럼 PS 버튼을 누르면 Led가 깜박거리다가 1번으로 연결되는것을 확인할 수 있습니다. 

블루투스 연결

 

동작확인

실제로 연결이 제대로 되었는지 확인을 한번 해볼께요. 다시한번 blutoothctl 을 실행시켜줍니다. (PS3 컨트롤러는 현재 블루투스로 라즈베리파이와 연결이 된 상태입니다.)

pi@raspberrypi:~/sixpair $ sudo bluetoothctl
Agent registered
[Sony PLAYSTATION(R)3 Controller]#

 

아까와는 다르게 'Sony PLAYSTATION(R)3 Controller'라는 이름이 추가가 되어있습니다. devices 명령을 입력해서 실제로 PS3 컨트롤러가 붙어있는지 확인합니다. 

[Sony PLAYSTATION(R)3 Controller]# devices
Device 00:19:C1:02:C8:3C Sony PLAYSTATION(R)3 Controller

 

PS3 컨트롤러의 더욱 자세한 연결 상태를 확인하기 원한다면, info 명령을 PS3 컨트롤러의 MAC 주소(여기선 00:19:C1:02:C8:3C)와 함께 입력해 줍니다. Connected와 Trusted가 yes라고 나오면 정상적인 연결이 된것입니다. 

[Sony PLAYSTATION(R)3 Controller]# info 00:19:C1:02:C8:3C
Device 00:19:C1:02:C8:3C (public)
	Name: Sony PLAYSTATION(R)3 Controller
	Alias: Sony PLAYSTATION(R)3 Controller
	Class: 0x00000508
	Icon: input-gaming
	Paired: no
	Trusted: yes
	Blocked: no
	Connected: yes
	LegacyPairing: no
	UUID: Human Interface Device... (00001124-0000-1000-8000-00805f9b34fb)
	Modalias: usb:v054Cp0268d0000

 

다시 quit을 입력해서 프로그램을 빠져나오세요. 

[Sony PLAYSTATION(R)3 Controller]# quit

 

이제 PS3 컨트롤러가 라즈베리파이에 디바이스 파일로 연결이 되어있어야 합니다. 아래 명령으로 디바이스 파일이 생성되어 있음을 확인할 수 있어요. 

pi@raspberrypi:~/sixpair $ ls -al /dev/input/js0
crw-rw----+ 1 root input 13, 0 Aug 28 03:34 /dev/input/js0

 

연결은 제대로 된것같은데 진짜로 제대로 동작을 하는지 눈으로 확인해보는게 필요할것 같아요. 

먼저 조이스틱 패키지를 설치합니다. 

pi@raspberrypi:~/sixpair $ sudo apt install joystick

 

조이스틱 테스트 프로그램을 위에서 확인했던 PS3 컨트롤러 디바이스 파일(/dev/input/js0)과 함께 실행시킵니다. 

pi@raspberrypi:~/sixpair $ sudo jstest /dev/input/js0 

 

PS3 컨트롤러를 마음대로 조종해보세요. 조이스틱 테스트 프로그램의 숫자들이 바뀌는것을 확인 할 수 있습니다. 

 

PS3 컨트롤러 입력에 따라 값이 변함

 

이제 연결이 모두 정상적으로 완료되었습니다. 

 

PS3 컨트롤러를 연결해제하려면 bluetoothctl에서 remove PS3 컨트롤러의 MAC 주소(제 경우는 00:19:C1:02:C8:3C 입니다) 명령을 해주시면 되요.

pi@raspberrypi:~ $ sudo bluetoothctl
Agent registered
[Sony PLAYSTATION(R)3 Controller]# devices
Device 00:19:C1:02:C8:3C Sony PLAYSTATION(R)3 Controller
[Sony PLAYSTATION(R)3 Controller]# remove 00:19:C1:02:C8:3C
Device has been removed
[CHG] Device 00:19:C1:02:C8:3C Connected: no
[DEL] Device 00:19:C1:02:C8:3C Sony PLAYSTATION(R)3 Controller

 

지원하는 다른 명령어들을 확인하고 싶으시면 help 명령을 입력하면 됩니다. 

[bluetooth]# help

 

PS3 컨트롤러를 라즈베리파이에 붙여서 어떤 재미있는것을 만들어볼지 생각만 해도 벌써부터 기대가 되네요. 

 

그럼 즐파이 하세요~!

댓글