DIY ESP32 Bluetooth GamePad for Android, PlayStation and PC
In this project, we will first see how to build a breadboard gamepad circuit, and how you can communicate the circuit as a gamepad with an Android device, TV Box, PlayStation, and Computer. Next, you'll see what you can do by assembling a printed circuit board with a Bat-themed design and using both a Bluetooth gamepad and other communication options.
On the circuit side, I preferred the low-cost ESP32 development board, which offers wireless communication options such as WiFi, Bluetooth, and ESP-NOW.
Besides ESP32, a joystick module, button, resistor, capacitor, and some wires are required for the gamepad circuit. Now let's move on to building the circuit.
After building the circuit, let's set up the ESP32 to use it with the Arduino IDE! First, enter the shared link for ESP, then search and install the ESP32 board. Restart the Arduino IDE and open the shared GamePad source code.
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
The source code includes a popular library called "BLE GamePad". If you go to the GitHub page of the library, you can find detailed explanations and examples. Go to “Add Library” search for the “BLE GamePad” library and install it. This library also needs the library named “NIM BLE”. If the libraries are installed, let's take a closer look at the source code now.
https://github.com/lemmingDev/ESP32-BLE-Gamepad
The shared GamePad source code contains a total of 13 buttons, the buttons define the key functions of a standard GamePad. Also, the source code offers three GamePad modes.
This description block contains the key names of the mods as well as the button numbers for the different GamePad mods. Each key name has a corresponding pin number.
/* * ANDROID GAMEPAD * {A=1, B=2, C=3, X=4, Y=5, Z=6, L1=7, R1=8, L2=9, R2=10, * Select=11, Start=12, PS=13, L3=14 , R3=15} * * PS GAMEPAD MODE * {SQUARE=1, X=2, CIRCLE=3, TRIANGLE=4, L1=5, R1=6, L2=7, R2=8, * Select=9, Start=10, L3=11, R3=12, PS=13} * */
The array "Buttons Pins" represents the physical button pins used on the development board. The constant "Number Buttons" specifies the number of buttons and contains the value of the pin each button is connected to.
int buttonsPins[NUM_BUTTONS] = {X_BUTTON, CIRCLE_BUTTON, TRIANGLE_BUTTON, SQUARE_BUTTON, R1_BUTTON, R2_BUTTON, L1_BUTTON, L2_BUTTON, START_BUTTON, SELECT_BUTTON, PS_BUTTON, R3_BUTTON, L3_BUTTON};
The "Android GamePad Buttons" array contains an ordered list of buttons used in Android GamePad mode. A number is assigned to each button. For example, button "A" is number 1, and button "B" is number 2.
int androidGamepadButtons[NUM_BUTTONS] = {1, 2, 3, 4, 8, 10, 7, 9, 12, 11, 13, 15, 14};
The "PS GamePad Buttons" array contains the list of buttons used in PlayStation GamePad mode.
int PS1GamepadButtons[NUM_BUTTONS] = {2, 3, 4, 1, 6, 8, 5, 7, 10, 9, 13, 12, 11};
The "PC GamePad Buttons" array contains the list of buttons used in Computer GamePad mode.
int PCGamepadButtons[NUM_BUTTONS] = {1, 2, 4, 3, 6, 8, 5, 7, 10, 9, 0, 12, 11};
The "GamePad Mode" variable contains the current GamePad mode. By default, Android mode is assigned, but this value can be changed later in the code.
GamepadModes gamepadMode = ANDROID;
Let's update the source code according to the components found in the breadboard circuit. There are 4 buttons and a Joystick module in the circuit, I will prefer the "Android Gamepad" mode to test the circuit. Define the pins of the components on the circuit, which the key function on the GamePad should call, and update the pin numbers. Then upload the source code.
I will use the Android application called “GamePad Tester” to view and test the Button and Joystick functions. Install the app, then turn on the Bluetooth connection and connect to the ESP32. Open the app, go to "Android GamePad Tester" and complete the test of the components on the circuit. Then, let's make a real test of the circuit through a game. I installed a car racing app, and now it's time to test the circuit!
I have a Bat-themed printed circuit board that I designed earlier and I will test it as a GamePad, if it works well I will revise it and design a new version for next use. Printed circuit boards are used to design more durable and stable electronic circuits for long-term use. I prefer PCBWay for printed circuit board service, you can easily upload the GERBER file and place an order quickly. Your order will be delivered in a few days, depending on your location. You can choose PCBWay for high-quality and low-price PCB service.
Just like the breadboard circuit, easy-to-assemble solderable components were preferred. Mount the required components on the PCB and solder them in place with the soldering iron and solder wire.
1x Diode SB560
3x Capacitor 100uF 16V
2x Thumb Joystick
1x Regulator 7805CV
2x LED 3mm
2x Resistor 220R
6x Resistor 4.7K
1x Doit ESP32 DevKit V1
2x Female Header 1x15 2.54
2x Female Header 1x4 2.54
1x Connector
4x Momentary Switch 12mm
The design includes 4 buttons and 2 joysticks, as well as one button connected to each joystick. Therefore, I will customize the source code for a total of 6 buttons and two joysticks.
Then I upload the source code. The circuit includes a female header for the voltage regulator. If you want to power the circuit with an external power source and the power voltage is higher than the ESP32's operating range of 6 to 12 volts, you should use a regulator.
You can power the circuit from the USB input of the ESP32 without using the regulator, you can also power it through an external supply in the 6 to 12 volts power range using a jumper.
I used one of the blank PCBs as a cover to avoid hand contact with the circuit.
I plug the ESP32 board into the circuit, then test the buttons and joysticks via the gamepad tester app. Next, I open the car racing game for control testing.
The circuit works well, if you ask what else I can do with this controller, here are a few sample projects… You can use this PCB in your projects with many wireless communication options such as ESP to ESP, Bluetooth, or WiFi.
ESP32 Mecanum Wheels Robot and Bluetooth Gamepad Controller
ESP32 Servo Motor Controller Board (Up to 16 Servo Motors)
ESP32 Joystick Hand Controller ESP-NOW
https://www.pcbway.com/project/shareproject/Bat_Hand_Controller_ESP32_and_Joystick_97e8ad4b.html
DIY ESP32 Bluetooth GamePad for Android, PlayStation and PC
*PCBWay community is a sharing platform. We are not responsible for any design issues and parameter issues (board thickness, surface finish, etc.) you choose.

Raspberry Pi 5 7 Inch Touch Screen IPS 1024x600 HD LCD HDMI-compatible Display for RPI 4B 3B+ OPI 5 AIDA64 PC Secondary Screen(Without Speaker)
BUY NOW
ESP32-S3 4.3inch Capacitive Touch Display Development Board, 800×480, 5-point Touch, 32-bit LX7 Dual-core Processor
BUY NOW
Raspberry Pi 5 7 Inch Touch Screen IPS 1024x600 HD LCD HDMI-compatible Display for RPI 4B 3B+ OPI 5 AIDA64 PC Secondary Screen(Without Speaker)
BUY NOW- Comments(7)
- Likes(18)
-
Engineer Mar 13,2025
-
Engineer Feb 20,2025
-
Engineer Dec 30,2024
-
Engineer Sep 17,2024
-
David Elias Flores Escalante Sep 16,2024
-
Engineer Sep 07,2024
-
Mariano Apicella Aug 08,2024
-
Engineer Jul 22,2024
-
Engineer Jun 10,2024
-
Engineer Dec 31,2023
-
Engineer Nov 17,2023
-
Engineer Oct 24,2023
-
xaray Oct 19,2023
-
thetrungk10 Aug 24,2023
-
MERT KILIC Jul 20,2023
-
Engineer Jul 18,2023
-
(DIY) C64iSTANBUL Jun 28,2023
-
NiteLynr Jun 28,2023
- 1 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10

-
10design
-
9usability
-
10creativity
-
10content
More by MERT KILIC
-
How To Make DIY Remote Control Hoverboat at Home In this video, I showed you how to make your own hoverboat from materials available at home and chea...
-
How to Make DIY Arduino Gesture Control Robot at Home Parts Required for Receiver (Tank):1) Robot Tank Chassis - https://bit.ly/3j8y2Q52) Arduino Nano V3 ...
-
DIY Circuit Activty Board with Paperclips | MAKER | STEM You can be creative and design your own circuit and add different sensors (other LEDs...). The idea ...
-
ATtiny85 Wearable Activity Tracking Watch How to make the wearable activity tracking watch? This is a wearable gadget designed to vibrate when...
-
How to Build a Motorized 3D Scanning Turntable for Your Phone In this project, I’ll show you how to make a simple motorized turntable for 3D scanning. It has thre...
-
DIY Motorized 3D Scanning Turntable In this project, I’ll show you how to make a simple motorized turntable for 3D scanning. It has thre...
-
3D Printed Theo Jansen Style Octopod Robot (Arduino Based) Hi everyone! In this project, I will show you an amazing eight-legged robot in the Octopod style! It...
-
Creative Modular LED Lighting with Magnetic Pogo Pins & Wi-Fi Control Hi everyone! Welcome to my latest project: a modular, plug-in LED lighting system that is as fun as ...
-
Build a simple 3D printed CNC plotter machine Hi friends, do you remember this Mini CNC Plotter machine that uses hobby stepper motors and a few 3...
-
Circuit Activity Board - Educational Electronics Circuit Activity Board – A Hands-On Project to Learn Basic ElectronicsIn this project, we're going t...
-
Build a Simple 3D Wall Lighting Hi friends, this project shows how to make and control 3D hexagonal LED lighting panels. The project...
-
Robot Sumo Board Robot-sumo, or pepe-sumo, is a sport in which two robots attempt to push each other out of a circle ...
-
ESP32 Mecanum Wheels Robot and Bluetooth Gamepad Controller In this project we will see how to make an ESP32 Mecanum Wheels Robot which is capable of moving in ...
-
DIY Motorized WiFi Roller Blind - ESP8266 & Blynk In this project we will see how to control a roller blind via a smartphone application. The reason w...
-
Pet Feeder Controlled Via WiFi - ESP8266 How It Works?As you can see, a 3D design was used for the pet feeder. ESP8266-based Wemos D1 Mini bo...
-
ESP8266 Two Wheel Robot (NodeMCU and Stepper Motor) Generally, robot cars are built on a chassis with 2 DC motor wheels and a bovine wheel. While surfin...
-
3D Printed Rotating Table Board with Arduino Nano and 28BYJ-48 Stepper Motor This project shows how to make a 3D printed Rotating Table using Arduino and a hobby stepper motor. ...
-
Hand Gesture Controller for Robotic Hand Gesture Controller for RoboticThe hand gesture controller makes it possible to control applicat...
-
How To Make DIY Remote Control Hoverboat at Home In this video, I showed you how to make your own hoverboat from materials available at home and chea...
-
How to Make DIY Arduino Gesture Control Robot at Home Parts Required for Receiver (Tank):1) Robot Tank Chassis - https://bit.ly/3j8y2Q52) Arduino Nano V3 ...
-
DIY Circuit Activty Board with Paperclips | MAKER | STEM You can be creative and design your own circuit and add different sensors (other LEDs...). The idea ...
-
ATtiny85 Wearable Activity Tracking Watch How to make the wearable activity tracking watch? This is a wearable gadget designed to vibrate when...
-
How to Build a Motorized 3D Scanning Turntable for Your Phone In this project, I’ll show you how to make a simple motorized turntable for 3D scanning. It has thre...
-
DIY Motorized 3D Scanning Turntable In this project, I’ll show you how to make a simple motorized turntable for 3D scanning. It has thre...
-
3D Printed Theo Jansen Style Octopod Robot (Arduino Based) Hi everyone! In this project, I will show you an amazing eight-legged robot in the Octopod style! It...
-
Creative Modular LED Lighting with Magnetic Pogo Pins & Wi-Fi Control Hi everyone! Welcome to my latest project: a modular, plug-in LED lighting system that is as fun as ...
-
Build a simple 3D printed CNC plotter machine Hi friends, do you remember this Mini CNC Plotter machine that uses hobby stepper motors and a few 3...
-
Circuit Activity Board - Educational Electronics Circuit Activity Board – A Hands-On Project to Learn Basic ElectronicsIn this project, we're going t...
-
Build a Simple 3D Wall Lighting Hi friends, this project shows how to make and control 3D hexagonal LED lighting panels. The project...
-
Robot Sumo Board Robot-sumo, or pepe-sumo, is a sport in which two robots attempt to push each other out of a circle ...
-
-
Modifying a Hotplate to a Reflow Solder Station
472 0 4 -
MPL3115A2 Barometric Pressure, Altitude, and Temperature Sensor
279 0 1 -
-
Nintendo 64DD Replacement Shell
280 0 1 -
V2 Commodore AMIGA USB-C Power Sink Delivery High Efficiency Supply Triple Output 5V ±12V OLED display ATARI compatible shark 100W
728 4 2 -
How to measure weight with Load Cell and HX711
531 0 3 -
Did you update the "Game Mode" part in the code? There are three modes, "Android", "PlayStation" and "PC". Please choose "PC" mode or "PlayStation" mode. Also, I'm using a macOS device and the method of connecting is as follows: I selected the "PlayStation" mode in the source code, assigned one of the enabled buttons as the "PS" button, then uploaded the code into the circuit. I kept the "PS" button pressed while I made the circuit connection with the computer via Bluetooth. It connected and worked fine as a game controller while playing games. I haven't tried it on a Windows-based device, it might be easier. If you search for "connecting a game controller to a computer via Bluetooth", you can find many resources and solutions to problems.