Introduction: Gameboy Advance As Bluetooth Gamepad

The device is basically an ESP32 connected to the GBA through the link port. With the device connected and without any cartridge inserted in the GBA, once the GBA turns on the ESP32 sends a small rom to be loaded in the GBA. This rom is a program made to enable communication between the ESP32 and GBA for both handling bluetooth connection and sending the user input to the ESP32 when it is connected to a bluetooth host and act as a gamepad. Unfortunately it only works with traditional GBA and I couldn't make it work with GBA SP. I think GBA SP just doesn't give enough power.


When turned on the ESP32 performs a multiboot sequence through the SPI to the GBA sending a rom that the ESP32 has stored in the flash memory. Once loaded the ESP32 enables the UART port in the same pins and the rom communicates with the ESP32 using UART through the link port. The ESP32 is powered by the 3.3V the GBA gives through the port

Supplies

ESP32 WROOM & ESP32 programmer

GBA-GC knock-off adapter for GBA link port male connector and the case

Some electrical tape and wir

Step 1: Program the ESP32

Start programming your ESP32 with the firmware you can find here:

https://github.com/Shyri/gba-bt-hid/tree/master/es...

I recommend to use one this programmers they sell out there, one like the picture.

This project was tested with ESP-IDF v3.3.2 that you can find here:
https://github.com/espressif/esp-idf/releases

You also will need to install btstack. Commit https://github.com/bluekitchen/btstack/commit/a0a... is the most recent version that is proved to work in this project.

Just follow the ESP32 environment instructions here https://docs.espressif.com/projects/esp-idf/en/lat...

Plug the ESP32 into the programmer. Plug the programer to the pc. Get to the code directory and run 'make flash'

Step 2: Getting the Link Port Connector

I recommend to buy one of this GBA-GC cables knock off they sell.

They will provide both a link port connector plus a case where you will house the device and will attach nicely into your GBA.

Disassembling it and desolder the link port connector. Be careful here and don't rush, the connector is mainly made of plastic and if you lay the soldering iron for too long it will start to melt and it wont plug correctly into your GBA later.

Step 3: Cut a Small PCB

You may have notice the PCB that comes in the GBA-GC adapter has a special shape so that the connector doesn't come off the case whenever you pull the adapter from the top of the GBA. To make the same thing I cut I piece of perfboard with this sizes

Step 4: Cut a Small PCB (2)

You may have notice the PCB that comes in the GBA-GC adapter has a special shape so that the connector doesn't come off the case whenever you pull the adapter from the top of the GBA. To make the same thing I cut I piece of perfboard with this sizes:

You can use the wholes as a reference if you don't want to take out the ruler to measure. Now we need to stick the link port connector to the leg that is three holes in width. In the diagram above you would place the connector in the left leg and the bottom of the connector would point outwards the screen. Keep in mind that wholes connect both sides of the perfboard and we don't want to short the link port pins. What I did was soldering the pins of one side of the connector to the first row of holes, and on the other side solder the other three pins to the second row of holes trying to avoid contact with the first row. Little rough but it works.

Step 5: Wire the Connector to the ESP32

Following this diagram wire 5 connections from the link port to the ESP32 pins. Remember to short EN with 3V3 otherwise it won't work.

Step 6: Adapt the Case

Now that we have it wired, you could test it and see if it works.

Once tested we can proceed to place it in the case. To make it fit we'll need to carve the case in a couple places. You can see in the pictures where you have to carve in one side of the case.

In the other side you can make just a couple very very light notches to match the ESP32 corners.

Step 7: Finishing Up

Put some electrical tap to the ESP32 pins so you avoid any short once it is closed. Place the pieces like the picture. The cut perfboard with the link connector in one side and the ESP32 on the other. Bring the two sides together bending the cables so the remain inside.

Put the two screws and you are ready to go!