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
#include
//================ 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)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:
esp32yazı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.jsonBilgisayarda 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:
Bluepad32diye 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:
COM5Gerç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:
Bluepad32araması yapın ve Bluepad32 kütüphanesini kurun.
Servo kontrollü projeler için ayrıca:
ESP32Servokü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ı:
115200olarak 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ı:
115200olarak 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.
