# Adding PSP Bluetooth controller support



## ste2425 (Apr 5, 2022)

Firstly I know this isn't really the forum for this kind of project. However I'm not a member of any other forums more related to this kind of stuff and from memory (been a while since I've engaged with TPU admittedly) there are members here who are into this kind of thing.

Plus I need assistance and can't think of where else to ask, but its mostly to share my project. (well probably 70/30 to the assistance side but...)

So the project, I'm using an Arduino nano 33 IOT to communicate with Bluetooth enabled controllers and then hijack the buttons on the PSP. Initially ill just be doing the buttons then once that is working focus on the analog stick, most likely using a digital potentiometer. This will be going into a PSP 2003 model as that has tv out functionality which would give me a nice Nintendo Switch like UX. Maybe even attempt to 3D print a little dock or something, but that's far into the future.





Space is at a premium inside these things so ill be dropping the UMD drive and mounting it in that space. The end goal is to hopefully design a daughter board to solder the Arduino to using the castellated holes to mount it flush. Then mount that using the existing UMD fixing points. Having a play designing very basic PCB's in KiCad but that's a very steep learning curve in and of itself.

I'm using the very impressive library Bluepad 32 to actually communicate with the controllers, currently got a hello world project running and communicating with a Nintendo Wii controller and num-chuk (ill share that shortly). It will be interesting to see if I can access some of the gyroscope functionality that the Wii and I think some newer PlayStation controllers have, but lets get a MVP out the door first!

My code and any PCB designs I do create will shared on my GitHub. Not created a repo yet but when I do ill share it here.

More actually interesting stuff to come very soon.


----------



## ste2425 (Apr 5, 2022)

Upon opening the PSP it shows just how compact the thing is.




I was expecting to solder directly to the PCB somewhere. On older consoles I'm used to having test points or via's accessible to solder to. Not the case here.

The PSP's inputs are connected via three different FFC's. One for the DPad and left shoulder button, one for the bottom buttons and one for the right buttons and right shoulder button. This last one includes the power switch and LED functionality.




This means connecting to these will involve using FFC's. Luckily I have a spare breakout board and some FFC's I can chop down to the right size.




This will get me by. I can do a hello world just triggering a single button with this. In fact i should be able to get all the buttons of one of the three connectors working with this. However i will need two more when i come to try and control all the buttons at the same time.

Interestingly the PSP's buttons are setup differently to how I'm used to. Traditionally you have a Flexible PCB with carbon pads on. The button has a carbon pad on the bottom, when pressed it connects the circuit.




Trouble with this is the contacts get dirty over time and you end with with buttons that either don't work or you need to press really hard.

However the PSP these are all fully sealed units. There appears to be two layers, I assume with an insulator between the two and a domed section below the button keeping them separate. When the button is pressed it collapses this done and causes contact. When released the dome pushes back up and breaks the circuit.




Doesn't really affect the project but it was interesting.

The various FFC connections will cause a little headache further down the line. Ideally I will have both my Arduino and the original buttons hooked up to each connector. It's going to be slightly tricky to find a way to connect both and have it still fit within the case.

The buttons seem to sink to a common ground to trigger a button press. I *should* be able to manage this on the Arduino side my marking the pin as an input when i which to release the button and marking it as an output and setting it to low when i wish to trigger a button press. Using the Uno i could do this quite easily by setting the various `DDRX` registers. However the nano IOT uses a different processor which doesn't provide the same registers. I'm a little out my depth with such low level stuff so i will have to stick with the higher level `pinMode` and `digitalWrite` methods for now.


----------



## ste2425 (Apr 9, 2022)

Well I now have a repository so its official.









						GitHub - ste2425/PSP-Consolizer: An Arduino based addon board to give Bluetooth controller support to a PSP-2000
					

An Arduino based addon board to give Bluetooth controller support to a PSP-2000 - GitHub - ste2425/PSP-Consolizer: An Arduino based addon board to give Bluetooth controller support to a PSP-2000




					github.com


----------



## ste2425 (Apr 13, 2022)

Not made a huge amount of progress, need to wait for the next pay day.

However I have finished mapping all the PSP buttons to their corresponding buttons on the controller.

Commit is here if interested: https://github.com/ste2425/PSP-Bluetooth-Controller/commit/620c6f9a6f8bd0b1b4dd4f34d9f630d7971d8cd1

I thought i could do it on the cheap and use a single 30 pin FFC breakout and connect multiple smaller FFC's to it. I also thought i could get a single 30 pin FFC and chop it up into the individual 10 pin cables needed. Yea not a chance. Far too fiddly and just a PITA seating the connectors properly.

So going to invest in the correct pin cables and more breakout boards to each connector has its own breakout.

I have tested controlling each set of buttons individually on the PSP (left side, right side and bottom) but need to wait before i can test them all together.

Here's a video of it working however.


__ https://twitter.com/i/web/status/1511806588646010884


----------



## ste2425 (May 19, 2022)

Been a while since i posted any updates.

Been working on it but making slow progress, only get an hour or so every other evening managing it around child care.

Got all the face buttons hooked up and working now, and working with other controllers. More traditional layouts, like the Xbox, do feel much better than the Wii.


__ https://twitter.com/i/web/status/1524493483872030720
However there is still the thumb stick to sort. Finally got a MCP4251 digital potentiometer (ridiculously expensive) and hooked it up. Can read varying resistences with a multi meter so tonights task is to connect it to the PSP and see what happens.

Annoyingly they work on different ranges, the digi pot is 0 - 255 whilst the xbox controler is -511 - 512. Not difficult to scale but i suppose there will be some tweaking going on to get that scaling feeling right when actually playing.


----------



## ste2425 (May 20, 2022)

So last night made some good progress. Can control the analog stick.

Got some more work to do around actual values, but it is controlling it!


__ https://twitter.com/i/web/status/1527536607431106561
Like i say the values are a bit wonky, the PSP thinks the stick has reached its end whilst the actual stick is about a 3rd away. This is only in one direction, the other is fine.

The controllers stick is read from a range of -511 - 512 whils the digital potentiometer is 10k controlled by steps in the range of 0 - 256. If you want 5k you dont say 'I want 5k pal' you set the step value of around 128.

Also the directions are inverted, up is down and down is up. However all that stuff can be corrected in software.

Connecting it to the PSP was a PITA. On the 2000 its a compression fit, the stick just butts up against the motherboard. I figured for development i could just solder to them. However it turns out the nice big pads are not actual nice big pags. But small metal squares soldered by the factory to two tiny pads either side of them. As soon as my iron went near they lifted.

Luckily with lots of flux and the wonders of surface tension managed to solder some jumper wires to them. I think the 3000 uses a ribbon cable, may look into that when i move on from protoboard.





On a side note not too sure how else to share videos hence using Twitter links, sorry for the poor compression.


----------



## ste2425 (May 26, 2022)

MAde some cracking progress.

i had control over the thumbstick previously, but it wasn't behaving correctly.

The Y-axis seemed to work however the X-axis only operated within its last 3rd of range. Even worse the Y-axis seemed to influence it.

I spent days (which for me around child care is weeks!) trying to figure it out.

Turns out i had the pinout wrong, i mixed +v and X-axis signal pins of the potentiometer. Only found out when i soldered jumper wires to the stick itself and dissconnected one at a time. I knew which was ground thanks to the multi meter, so discconnected one at a time. If both axis die then that pin is power, if a single axis died then that line is signal for that axis.

Got there in the end!


__ https://twitter.com/i/web/status/1529698380015972352
There does seem to be a little lag after watching that video back. When playing with it i never noticed any. I'll have to investigate. Most actions with the left stick are the les precice stuff like movement. I'm spamming the serial port with logs and got a few delays and things in there. The code can be optimised but at this stage the hardware is complete.


----------



## ste2425 (Jun 8, 2022)

Made some really good progres the last few days.

The code is pretty much done for direct mappings. The analog stick fully mapped.

The digital pot goes from a range of 0 - 257. The PSP internally mappes to the same range for each axis. However interestingly both extremeties are maxed on the PSP when the digital potentiometer is at 50 and 200. It still feels great to play. Not too sure if my jumpers are causing issues or iv'e buggered the digi pot but it works so...

The link to my GitHub is in the OP if anyone is interested.

Other major milestone is moving on from protoboard.





It worked but was big and ugly. Decided to try my hand at designing a PCB. Never done it before. After a few days i created something im quite pleased with.

Lots of improvements that could be made, and its not exactly complicated, but im pleased with it!

Currently being made so should have them back in a week or so.



 



Whilst waiting on that working on a mappings feature.

Currently i have the buttons directly mapped to their equivilent Xbox controller butons.




But was thinking there are two more mappings i will want, one for FPS games where the right Triangle, Square etc buttons are used for movement.




and one for PS1 games where, by default, the left stick does R2 and L2.



So thats where we are at. Excited to get these PCB's in and see if they work.

This is all for a consolized PSP at this stage. If its all working ill work on reducing the PCB down more and fitting it inside the console itself.

Also left the Arduinos RX and TX pins accessible as ive just seen the PSP has a serial port. Its how it communicated with the multi media remote. 
Looking at the PSP SDK https://github.com/pspdev/pspsdk there are examples on writing to this serial port. Would be cool if i could control the Arduino from within the PSP at a software level.

Maybe a plugin that can toggle mappings via a gui would be cool, or even create custom mappings on the fly.


----------



## phill (Jun 16, 2022)

Love it!!  Amazing work!!  Subbed to see the outcome!!


----------



## ste2425 (Jun 16, 2022)

phill said:


> Love it!!  Amazing work!!  Subbed to see the outcome!!


Thanks 

Made good progress since last post. Now have configurable mappings. (I say configurable it requires re-programming the arduino) but any controller button can be mapped to any PSP button.

That includes the analog stick, any cotnroller button can trigger the analog stick (good for PS1 games to handle L2/R2 etc) but also the controllers left or right analog stick can be mapped to the PSP's analog stick.

PCB's have just cleared customs so should be here soon.


__ https://twitter.com/i/web/status/1537442890116321280
Got a PS4 controller on way so i can test setting the onboard RGB LED, can also set player indicator LED (like on the Wii controller) so ill be using them to indicate which mapping is active. For XBox controllers you will have to settle with just a rumble when changing mappings.

Could do with a chat with anyone who has experience with the PSP SDK https://github.com/pspdev/pspsdk

Want to work on integrating the Arduino with the PSP on a software level using the PSP's Serial Port.


----------



## Mindweaver (Jun 16, 2022)

This is very awesome, great job! I just found my 2x PSP2000 in an old storage box. I've been debating refurbing them with new shells from Aliexpress. Maybe buy some new screens and sticks as well. @ste2425 I was thinking about adding bluetooth to the audio jack to connect my galaxy+ buds but nothing to this extent. Just a cheap one to hang off the back.


----------



## ste2425 (Jun 19, 2022)

Mindweaver said:


> This is very awesome, great job! I just found my 2x PSP2000 in an old storage box. I've been debating refurbing them with new shells from Aliexpress. Maybe buy some new screens and sticks as well. @ste2425 I was thinking about adding bluetooth to the audio jack to connect my galaxy+ buds but nothing to this extent. Just a cheap one to hang off the back.


Thanks.
Thanks sounds like a fun project. I remember having a little RF adapter when I was a kid. Maybe you could find one and retro fit Bluetooth in the case?

PCB’s arrived and assembled.
I made a couple of mistakes. Firstly one of the ffc connectors I wired backwards. So just flipped the connector.
I know I could have bought reversed cables but that would mean waiting for deliveries and I’m impatient!

not a bad Father’s Day!


----------



## ste2425 (Jul 13, 2022)

Made some very exciting progress.
Got a psp dev environment set up (docker is amazing BTW)

got demo code compiling and running of real hardware. Including the serial port demo.
Next job is hooking up the Arduino to the PSP serial port. If that works there is some amazing potential.
Game specific controller mappings. Even possible an app in the psp to build mappings on the fly all sorts!


__ https://twitter.com/i/web/status/1547257250456244225


----------



## ste2425 (Sep 29, 2022)

Latest update small bits and bobs.







 3D printed mount arrived
latest PCB revision has stupid error so waiting for hopefully final, final revision
That's the tower of wires in the above picture, had the Arduino placed facing the wrong way, couldn't plug the USB cable in...

LED status indicator for booting
LED control on controllers that have one (PS4) to indicate active button mapping
Source code and documentation updated (still needs more)

Latest update video at the top of the Github page.









						GitHub - ste2425/PSP-Consolizer: An Arduino based addon board to give Bluetooth controller support to a PSP-2000
					

An Arduino based addon board to give Bluetooth controller support to a PSP-2000 - GitHub - ste2425/PSP-Consolizer: An Arduino based addon board to give Bluetooth controller support to a PSP-2000




					github.com


----------



## ste2425 (Oct 5, 2022)

And just like that the hardware is complete.

Over the moon with how these have come out and how neat it all looks assembled. Minimal soldering of through hole stuff to actually build it.







There is one last feature i want to get in and thats making the power LED dimmable. One of my biggest pet peeves is bright LED's. When playing in a dark room it just jumps out at you.

I will need to implement some software PWM though as iv'e used up all the PWM pins already (if i thought of this before hand i could have modified the pinout but too late now). There is a software PWM library available but it doesn't target the Arduino Nano 33 IOT. Shouldn't be too hard though.



​Working on a wood and brass case to mount this all in, left overs from other projects. The end is in sight, this is the longest Iv'e stuck with any project.


----------



## Ratlletrap (Oct 10, 2022)

Hey! Nice project i've been watching your progress,since i tried to dissasemble my own psp and tried to get input map from it but i failed. I was wondering if u know some way i could get a map from psp to pc or some sort of program? What u did was maping xbox controller to psp,but i would like to go opossite way, get a input from psp? Thanks in advance.


----------



## ste2425 (Oct 28, 2022)

Ratlletrap said:


> Hey! Nice project i've been watching your progress,since i tried to dissasemble my own psp and tried to get input map from it but i failed. I was wondering if u know some way i could get a map from psp to pc or some sort of program? What u did was maping xbox controller to psp,but i would like to go opossite way, get a input from psp? Thanks in advance.


Hey

Not too sure my project will be of much help, I'm using an Arduino to manually press PSP buttons. Each button just pulls to ground to i have my Arduino do that. The Arduino listens to Bluetooth controlls and i map a Bluetooth controller button to a PSP button.

If you want to be able to use the PSP itself and view that on your PC, essentially stream the video to your pc and stream controls back to the PSP there are some tools for that, one is called Remote Joy Lite. However i could never get it working. The homebrew scene for PSP isn't what it was (even though there is some great work being on on PSP SDK's and things) so RJL is an old tool and not actively maintained (not too sure if anyone even has access publicly to the source code).

If you just want your PSP to act like a glorified controller and do nothing more some Arduino's can act as USB devices. Gamepads, keyboards etc. You could connect an Arduino to the PSP's buttons and emulate one of those devices. However i suspect Remote Joy Lite is more what you are after.


----------



## ste2425 (Monday at 9:37 AM)

So i just remembered about this log.

The projects finished!

Or at least this phase of the project. I've achieved its main goals:

* Learn Arduino dev
* Learn PCB design
* Learn how to have PCB's manufactured
* Learn and implement GitHub actions CI
* Have a working consolized PSP i can play on my TV with BT controllers.

There is a release on the GitHub project containing everything needed for someone to build their own, Gerbers, build guide, one click installer (no need to install the Arduino IDE or compile).

So i guess the question is where now?
Well im currently working on a internal version and I'm at a bit of a fork in the road deciding which way to go.

One option is using a RPI Pico W to interface with the PSP via USB and use a custom plugin to hook the buttons and do it that way,
The other is to continue the way i did it with the external consolizer and shove the Arduino where the UMD drive would go.

Both are viable options and both have their own pro's and cons. I'm currently investigating and working on both until i decide which one should win.









						Release v1.0.0 · ste2425/PSP-Consolizer
					

First official release of the PSP Consolizer.




					github.com


----------

