Raspberry Pi

Connecting PS4 controller to Raspberry Pi via Bluetooth

You're probably here because you tried to pair your PS4 controller to the Pi but faced some problems, I did too. Here's a summary of my journey into getting my PS4 Controller paired to Raspberry Pi 4.

I recommend resetting your controller before starting this tutorial. Resetting will just help us with a fresh start. 

To reset find the tiny hole on the back of your controller, insert a tiny pin or needle then push and hold for 5 seconds.

Before installing anything let us ensure your Raspberry Pi is up to date. Run those commands to do so:

sudo apt-get update
sudo apt-get upgrade

Install the joystick package which includes some applications and gamepads support for Linux. Most Raspberry Pi has this package pre-installed but run this command just in case.

sudo apt-get install joystick

I will talk about 4 different ways to connect your PS4 controller

  • GUI

  • bluetoothctl

  • USB cable connection

Using GUI to connect

Graphical User Interface. On your Raspberry Pi top right corner of the screen click on the Bluetooth icon > Add Device.. A new popup should appear and start scanning nearby Bluetooth devices. 

Click Wireless Controller then Pair

Done! It should take a second then you should see the following screen with your controller connected. 

If the GUI method didn't work for you then try the bluetoothctl next

Problems connecting? Scroll down to the bottom of the page where I listed the problems I faced with solutions.

Using bluetoothctl to connect

bluetoothctl is a core Linux Bluetooth functionality and it's the best way to connect your controller if you faced issues or errors with the GUI method.

Open up your terminal and start up the tool by typing the command:

sudo bluetoothctl

Now you're in the Bluetooth command line tool, run those commands to enable the bluetooth agent:

agent on
discoverable on
pairable on
default-agent

Then start scanning for devices. The terminal should start listing scan results with all the bluetooth devices around you so pay some attention to the output because we need to find the controller.

scan on

While the command tool is scanning, press and hold both your Share and PS buttons on your controller. Keep holding the buttons at the same time until your controller starts flashing light.

Remember, the command tool is still scanning and your controller just entered pairing mode so you should very soon see a new record on your terminal showing the MAC address of the controller.

[NEW] Device AC:FD:93:14:25:D3 Wireless Controller

In my case, the MAC address is AC:FD:93:14:25:D3

As soon as you see the Wireless Controller MAC address on the terminal, make sure your controller is still flashing (if it's no longer flashing press Share and PS buttons again)

While it's still flashing type in the command to connect and make sure you replace CONTROLLER_MAC_ADDRESS with your own address. Again, in my case my MAC address is AC:FD:93:14:25:D3 so yours might be different

connect CONTROLLER_MAC_ADDRESS

Done. If everything went well you should see a connection successful message appear on your terminal like so

Attempting to connect to AC:FD:93:14:25:D3

[CHG] Device AC:FD:93:14:25:D3 Connected: yes
[CHG] Device AC:FD:93:14:25:D3 ServicesResolved: yes
[CHG] Device AC:FD:93:14:25:D3 Paired: yes
Connection successful

Next, we need to add this newly paired bluetooth device to the trusted list so next time the PS4 controller can automatically connect the Raspberry Pi. Type in the command:

trust CONTROLLER_MAC_ADDRESS

DONE! Your controller should be connected, paired and trusted.

USB cable connection

This is the easiest way to connect your controller but the controller needs to be wired to the Pi.

Plug a micro USB into your controller and connect it to one of the Raspberry Pi USB ports.

Your controller should lit a blue light meaning it's successfully connected and it's ready to use.

don't press red button