09/16/2026

Gamepadini 8-Kanal Uzaktan Kumandaya Dönüştür.

Gamepadini ESP32 ile basit bir alıcı devresi yaparak 8-Kanallı uzaktan kumandaya dönüştür. bunun için sadece bir adet ESP32 ve bir kaç elektronik komponent yeterli.

 

Neler gerekli?

ESP32 Dev Kit V1 (30 Pin)
7806 Voltage Regulator
2.54 Header Pin
Terminal Block Konnektor KF350 (3.5mm)
100uF Kondansatör
100nF Kondansatör
Bakır plaket (tek yönlü)
2 pin JST & Kablo
3A Diyod ve 1A Diyod

Gamepad  PS3-PS4 veya muadili (Bluetooth ve HID Protokol desteği olanlar) 
Benim Kullandığım: Deadskull P09 

Bu devreyi 3 farklı yöntem ile yapabilirsiniz. Benim yaptığım gibi elyapımı bir PCB ile. PDF dosyası için link aşağıdadır.  Veya delikli plaket ile. Basitleştirilmiş şema:

Veya profesyonel yöntem olan JLCPCB yi tercih edebilirsiniz.  Gerber dosyaları için link aşağıdadır.

Delikli plaket için basitleştirilmiş şema, Elyapımı pcb için PDF, Gerber Dosyaları ve ESP32 için Kodlar:

https://drive.google.com/file/d/17ONaZsQ2ykHABbTequudpERJRF3TWHTf/view?usp=sharing

ESP32 ye uzaktan kumanda alıcı kodunu yüklemeden önce test programını yüklemeniz gerekebilir. Her gamepad için tuş değerleri aynı olmayabilir.
Tuş ve joystick değerlerini görebilmek için test programını yükleyin, çalıştırın. Gamepadinizi ESP32 ile eşleştirin. Serial monitör penceresini açın.
Kolları oynatın, tuşlara basın. Ekranda görülen değerler koddaki ile aynı değil ise ilgili bölümde değerleri güncelleyin.

Benim gamepadim için değerler böyleydi:

// Button map (P09 example – change if required)
#define BTN_L1 64
#define BTN_L2 16
#define BTN_R1 128
#define BTN_R2 32

#define BTN_KARE1 1
#define BTN_KARE2 2
#define BTN_KARE3 4
#define BTN_KARE4 8

 ​​-512 ve +512 değerleri ise joystick için maksimum değerleridir. Sizde farklı olabilir.

int calcAxis(int value,uint8_t ch)
{
value=constrain(value,-512,512);
if(reverseCh[ch]) value=-value;
if(abs(value)<DEAD_BAND) value=0;
int us=map(value,-512,512,minUs[ch],maxUs[ch]);

NOT: Test programını ESP32 de direkt olarak yani devreden bağımsız olarak USB ile bilgisayarınıza bağlı iken çalıştırın.


ESP32 Dev Kit V1 (30 Pin) için Alıcı Kodu:

				
					/*
ESP32 Bluetooth HID RC ALICI
Version 1.2.0
Bluepad32 uyumlu Bluetooth HID kontrol cihazları için.

NOT:
- Kontrol cihazınızı belirledikten sonra BTN_* değerlerini güncelleyin.
- 5-8 numaralı kanallar, butonlar ile kontrol edilen servo kanallarıdır.
*/
21
#include <Bluepad32.h>
#include <ESP32Servo.h>

//================ KULLANICI AYARLARI ====================

#define CHANNEL_COUNT 8

// Servo Pins
const uint8_t servoPins[CHANNEL_COUNT] = {
  19, // CH1 Roll
  18, // CH2 Throttle
  32, // CH3 Yaw1
  33, // CH4 Pitch
  25, // CH5 L1/L2
  26, // CH6 R1/R2
  27, // CH7 Kare1/Kare2
  14  // CH8 Kare3/Kare4
};

// Buton haritası (P09 için - Gerekirse değiştir)
#define BTN_L1      64
#define BTN_L2      16
#define BTN_R1      128
#define BTN_R2      32

#define BTN_KARE1   1
#define BTN_KARE2   2
#define BTN_KARE3   4
#define BTN_KARE4   8

#define DEAD_BAND 15

bool reverseCh[CHANNEL_COUNT]={
  false,false,false,false,false,false,false,false
};

int centerUs[4]={
  1500,1500,1500,1500
};

int minUs[CHANNEL_COUNT]={
 1000,1000,1000,1000,1000,1000,1000,1000
};

int maxUs[CHANNEL_COUNT]={
 2000,2000,2000,2000,2000,2000,2000,2000
};

int failsafeUs[CHANNEL_COUNT]={
 1500,1500,1500,1500,1500,1500,1500,1500
};

//===================================================

ControllerPtr controller=nullptr;
Servo servo[CHANNEL_COUNT];

uint32_t lastPrint=0;

void onConnectedController(ControllerPtr ctl){
  controller=ctl;
  Serial.println("Controller Connected");
}

void onDisconnectedController(ControllerPtr ctl){
  controller=nullptr;
  Serial.println("Controller Disconnected");
}

int calcAxis(int value,uint8_t ch)
{
  value=constrain(value,-512,512);

  if(reverseCh[ch]) value=-value;

  if(abs(value)<DEAD_BAND) value=0;

  int us=map(value,-512,512,minUs[ch],maxUs[ch]);

  int delta=centerUs[ch]-1500;
  us+=delta;

  return constrain(us,minUs[ch],maxUs[ch]);
}

void applyFailsafe()
{
  for(int i=0;i<CHANNEL_COUNT;i++)
    servo[i].writeMicroseconds(failsafeUs[i]);
}

void setup()
{
  Serial.begin(115200);

  for(int i=0;i<CHANNEL_COUNT;i++){
    servo[i].setPeriodHertz(50);
    servo[i].attach(servoPins[i],1000,2000);
  }

  applyFailsafe();

  BP32.setup(&onConnectedController,&onDisconnectedController);

  Serial.println();
  Serial.println("ESP32 Bluetooth HID RC Receiver");
  Serial.println("Version 1.1.0");
  Serial.println("Waiting controller...");
}

void processButtons(uint16_t b)
{
  // CH5
  if(b & BTN_L1) servo[4].writeMicroseconds(maxUs[4]);
  else if(b & BTN_L2) servo[4].writeMicroseconds(minUs[4]);
  else servo[4].writeMicroseconds(centerUs[0]);

  // CH6
  if(b & BTN_R1) servo[5].writeMicroseconds(maxUs[5]);
  else if(b & BTN_R2) servo[5].writeMicroseconds(minUs[5]);
  else servo[5].writeMicroseconds(1500);

  // CH7
  if(BTN_KARE1 && (b & BTN_KARE1)) servo[6].writeMicroseconds(maxUs[6]);
  else if(BTN_KARE2 && (b & BTN_KARE2)) servo[6].writeMicroseconds(minUs[6]);
  else servo[6].writeMicroseconds(1500);

  // CH8
  if(BTN_KARE3 && (b & BTN_KARE3)) servo[7].writeMicroseconds(maxUs[7]);
  else if(BTN_KARE4 && (b & BTN_KARE4)) servo[7].writeMicroseconds(minUs[7]);
  else servo[7].writeMicroseconds(1500);
}

void loop()
{
  BP32.update();

  if(!controller || !controller->isConnected()){
    applyFailsafe();
    return;
  }

  int ch[4];
  ch[0]=calcAxis(controller->axisX(),0);
  ch[1]=calcAxis(controller->axisY(),1);
  ch[2]=calcAxis(controller->axisRX(),2);
  ch[3]=calcAxis(controller->axisRY(),3);

  for(int i=0;i<4;i++)
    servo[i].writeMicroseconds(ch[i]);

  processButtons(controller->buttons());

  if(millis()-lastPrint>200){
    lastPrint=millis();
    Serial.printf("CH1=%d CH2=%d CH3=%d CH4=%d BTN=%u\n",
      ch[0],ch[1],ch[2],ch[3],controller->buttons());
  }
}

				
			

ESP32 DevKit 30-Pin + Bluepad32 Arduino IDE Kurulum Rehberi

Bu rehber, klasik 30-pin ESP32 DevKit / ESP32-WROOM-32 kartının Arduino IDE’ye kurulmasını ve Bluetooth gamepad projeleri için Bluepad32 desteğinin yüklenmesini açıklar.

1. Arduino IDE’yi Kurun

Arduino IDE 2.x sürümünü kurun ve açın.

2. ESP32 Kart Paketini Kurun

Şuraya gidin:

Dosya → Tercihler → Ek Kart Yöneticisi URL’leri

Aşağıdaki resmi Espressif ESP32 paket URL’sini ekleyin:

https://espressif.github.io/arduino-esp32/package_esp32_index.json

 

Daha sonra: 

Araçlar → Kart → Kart Yöneticisi

menüsünü açın.

Arama kutusuna:

esp32

yazın.

Şu paketi bulun ve kurun:

esp32 by Espressif Systems

 

3. Bluepad32 Kart Desteğini Kurun

Tekrar:

Dosya → Tercihler → Ek Kart Yöneticisi URL’leri

bölümüne gidin.

Aşağıdaki Bluepad32 paket URL’sini ekleyin:

https://raw.githubusercontent.com/ricardoquesada/esp32-arduino-lib-builder/master/bluepad32_files/package_esp32_bluepad32_index.json

Bilgisayarda başka kart paket URL’leri varsa bunları silmeyin; bu URL’yi ayrı bir satır olarak ekleyin.

 

Daha sonra:

Araçlar → Kart → Kart Yöneticisi

menüsünü açın ve:

Bluepad32

diye aratın.

Şu paketi kurun:

ESP32 + Bluepad32

Bu paket, Arduino tabanlı ESP32 projelerinde Bluepad32 desteğini sağlar.

 

4. ESP32 DevKit Kartını Seçin

30-pin ESP32 DevKit kartını USB kablosuyla bilgisayara bağlayın.

Arduino IDE’de:

Araçlar → Kart → ESP32 + Bluepad32 → ESP32 Dev Module

seçeneğini seçin.

Tipik ESP32-WROOM-32 / 30-pin DevKit kartları için ESP32 Dev Module uygun genel kart seçimidir.

 

Daha sonra:

Araçlar → Port

menüsünden ESP32’nin bağlı olduğu COM portunu seçin.

Örneğin:

COM5

Gerçek COM numarası bilgisayara göre değişebilir.

5. Gerekli Kütüphaneleri Kurun

Şuraya gidin:

Araçlar → Kütüphaneleri Yönet

Arama kutusunda:

Bluepad32

araması yapın ve Bluepad32 kütüphanesini kurun.

Servo kontrollü projeler için ayrıca:

ESP32Servo

kütüphanesini de kurun.

6. ESP32’yi Test Edin

Bluetooth testine geçmeden önce ESP32’nin Arduino IDE üzerinden programlanabildiğini kontrol etmek faydalıdır.

Basit bir test programı:

void setup() {
  Serial.begin(115200);
  Serial.println("ESP32 OK!");
}

void loop() {
}

Programı ESP32’ye yükleyin.

Daha sonra:

Araçlar → Seri Monitör

menüsünü açın ve baud hızını:

115200

olarak ayarlayın.

Seri Monitör’de:

ESP32 OK!

mesajı görünmelidir.

Eğer program yükleme sırasında:

Connecting........

noktasında takılı kalırsa, ESP32 üzerindeki BOOT butonuna basılı tutun. Yükleme işlemi başladıktan sonra BOOT butonunu bırakın.

7. Bluepad32’yi Test Edin

Bluepad32’nin düzgün kurulduğunu kontrol etmek için:

Dosya → Örnekler → Bluepad32

menüsündeki controller/gamepad örneklerinden birini açın.

Örneği, ESP32’ye yükleyin.

Daha sonra:

Araçlar → Seri Monitör

menüsünü açın ve baud hızını:

115200

olarak ayarlayın.

ESP32, Bluepad32’yi başlatmalı ve Bluetooth controller aramaya başlamalıdır.

Uyumlu bir Bluetooth gamepad bağlandığında, controller bağlantı bilgileri ve giriş verileri Seri Monitör’de görünmelidir.

NOT: Eğer bilgisayarınıza ilk defa ESP32 bağlayacaksanız bir defaya mahsus ESP32 üzerindeki RST (Reset) butonuna basmanız gerekebilir.
Bu genellikle klon versiyonlar için geçerlidir. Ve sadece bir defaya mahsus yapılması yeterli olur.