(Xboxコントローラーに入替て操作出来ます)
動画
参考サイト
●ESP32-C3をXBOXコントローラーから操作する
●M5Stack / ESP32とゲームコントローラの接続いろいろ
回路図
純正PS4コントローラー
| PSボタンを押してペアリング |
PS4コントローラー
【MODEL CUH-ZCT2J】
技適製品
ESP-32開発ボード
●ESP32 NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード(技適製品)
アマゾン購入
TB6612FNG モーター ドライバー
ボードマネージャ
追加のボードマネージャー
【https://raw.githubusercontent.com/ricardoquesada/esp32-arduino-lib-builder/master/bluepad32_files/package_esp32_bluepad32_index.json】
【ツール】【ボード】【ボードマネージャ】【bluepad32】
ボードマネージャ【ESP32 Arduino + Bluepad32】
ボード【ESP32 Dev Module】選択
プログラム Arduino IDE 【ESP32 Arduino + Bluepad32】【ESP32 Dev Module】
#include <Bluepad32.h>
ControllerPtr myControllers[BP32_MAX_GAMEPADS];
void onConnectedController(ControllerPtr ctl) {
bool foundEmptySlot = false;
for (int i = 0; i < BP32_MAX_GAMEPADS; i++) {
if (myControllers[i] == nullptr) {
Serial.printf("CALLBACK: Controller is connected, index=%d\n", i);
ControllerProperties properties = ctl->getProperties();
Serial.printf("Controller model: %s, VID=0x%04x, PID=0x%04x\n", ctl->getModelName().c_str(), properties.vendor_id, properties.product_id);
myControllers[i] = ctl;
foundEmptySlot = true;
break;
}
}
if (!foundEmptySlot) {
Serial.println("CALLBACK: Controller connected, but could not found empty slot");
}
}
void onDisconnectedController(ControllerPtr ctl) {
bool foundController = false;
for (int i = 0; i < BP32_MAX_GAMEPADS; i++){
if (myControllers[i] == ctl){
Serial.printf("CALLBACK: Controller disconnected from index=%d\n", i);
myControllers[i] = nullptr;
foundController = true;
break;
}
}
if (!foundController) {
Serial.println("CALLBACK: Controller disconnected, but not found in myControllers");
}
}
void processGamepad(ControllerPtr ctl) {
if (ctl->a()) Back() ;
if (ctl->b()) Right();
if (ctl->x()) Left();
if (ctl->y()) Go();
if (ctl->dpad()& DPAD_UP) Go();
if (ctl->dpad()& DPAD_DOWN) Back();
if (ctl->dpad()& DPAD_LEFT) Left();
if (ctl->dpad()& DPAD_RIGHT) Right();
}
void processControllers() {
for (auto myController : myControllers) {
if (myController && myController->isConnected() && myController->hasData()) {
if (myController->isGamepad()) {
processGamepad(myController);
}
else {
Serial.println("Unsupported controller");
}
}
}
}
const int motorR2 = 21; //AI1
const int motorR1 = 22; //AI2
const int motorRp = 23; //PWMA
const int motorL2 = 17; //BI2
const int motorL1 = 18; //BI1
const int motorLp = 16; //PWMB
const int STBY = 19; //STBY
void Go() {
digitalWrite( motorLp, HIGH );
digitalWrite( motorL1, HIGH );
digitalWrite( motorL2, LOW );
digitalWrite( motorRp, HIGH );
digitalWrite( motorR1, HIGH );
digitalWrite( motorR2, LOW );
}
void Back(){
digitalWrite( motorLp, HIGH );
digitalWrite( motorL1, LOW );
digitalWrite( motorL2, HIGH );
digitalWrite( motorRp, HIGH );
digitalWrite( motorR1, LOW );
digitalWrite( motorR2, HIGH );
}
void Stop(){
digitalWrite( motorLp, LOW );
digitalWrite( motorRp, LOW );
}
void Right(){
digitalWrite( motorLp, HIGH );
digitalWrite( motorL1, HIGH );
digitalWrite( motorL2, LOW );
digitalWrite( motorRp, HIGH );
digitalWrite( motorR1, LOW );
digitalWrite( motorR2, HIGH );
}
void Left(){
digitalWrite( motorRp, HIGH );
digitalWrite( motorR1, HIGH );
digitalWrite( motorR2, LOW );
digitalWrite( motorLp, HIGH );
digitalWrite( motorL1, LOW );
digitalWrite( motorL2, HIGH );
}
void setup()
{
Serial.begin(115200);
Serial.printf("Firmware: %s\n", BP32.firmwareVersion());
const uint8_t* addr = BP32.localBdAddress();
Serial.printf("BD Addr: %2X:%2X:%2X:%2X:%2X:%2X\n", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
// Setup the Bluepad32 callbacks
BP32.setup(&onConnectedController, &onDisconnectedController);
BP32.forgetBluetoothKeys();
pinMode( motorL1, OUTPUT );
pinMode( motorL2, OUTPUT );
pinMode( motorLp, OUTPUT );
pinMode( motorR1, OUTPUT );
pinMode( motorR2, OUTPUT );
pinMode( motorRp, OUTPUT );
pinMode( STBY, OUTPUT );
digitalWrite( motorL1, LOW );
digitalWrite( motorL2, LOW );
digitalWrite( motorLp, LOW );
digitalWrite( motorR1, LOW );
digitalWrite( motorR2, LOW );
digitalWrite( motorRp, LOW );
digitalWrite( STBY, HIGH );
}
void loop()
{
bool dataUpdated = BP32.update();
if (dataUpdated) processControllers();
delay(200);
Stop();
}

.png)
.png)
.png)
.png)
0 件のコメント:
コメントを投稿