LoginSignup

Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

26
18

More than 3 years have passed since last update.

ESP32(M5StickC)ใ‚’PS3ใ‚ณใƒณใƒˆใƒญใƒผใƒฉใงๆ“ไฝœใ™ใ‚‹

Last updated at Posted at 2020-09-16

ใ‚‚ใจใ‚‚ใจBLEใ‚ณใƒณใƒˆใƒญใƒผใƒฉใงESP32ใ‚’ๆ“ไฝœใ—ใŸใ„๏ผใจใ„ใ†ใ“ใจใงNimBLEใ‚’ไฝฟใฃใฆใŸใฎใงใ™ใŒใ€

NimBLEใงESP32(M5StickC)ใซBLE HIDใƒ‡ใƒใ‚คใ‚นใ‚’ๆŽฅ็ถšใ™ใ‚‹(่ฟฝ่จ˜:่ค‡ๆ•ฐใƒ‡ใƒใ‚คใ‚นๅฏพๅฟœ) - Qiita
https://qiita.com/coppercele/items/4ce0e8858a92410c81e3

BLEใ‚ณใƒณใƒˆใƒญใƒผใƒฉใŒๅฃฒใฃใฆใชใใฆๅ†็พๆ€งใŒใชใ„ใจใ„ใ†ใ“ใจใงๅฟƒใŒๆŠ˜ใ‚ŒใŸใฎใงPS3ใ‚ณใƒณใƒˆใƒญใƒผใƒฉใงESP32ใ‚’ๆ“ไฝœใ—ใฆใฟใ‚‹ใ“ใจใซใ—ใพใ™

ใ“ใ‚“ใชๆ„Ÿใ˜ใงๆ“ไฝœใงใใพใ™

ใ“ใกใ‚‰ใฎใ‚ตใ‚คใƒˆใ‚’ๅ‚่€ƒใซใ•ใ›ใฆใ„ใŸใ ใใพใ—ใŸ

ใƒปESP32 (M5StickC) ใง PS3 ใฎ ใ‚ณใƒณใƒˆใƒญใƒผใƒฉ ใ‚’ไฝฟใ† : (Blog)SKYZOO(ใƒจใƒƒใ‚ทใƒผใฎๅ‚™ๅฟ˜้Œฒ(ใƒ—ใƒๆƒ…ๅ ฑ))
http://gijin77.blog.jp/archives/21966552.html

ใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ข

M5StickC
image.png

M5StickC - ใ‚นใ‚คใƒƒใƒใ‚ตใ‚คใ‚จใƒณใ‚น
https://www.switch-science.com/catalog/5517/
Arduinoไบ’ๆ›ใชESP32ใŒใ‚ฑใƒผใ‚นใซๅ…ฅใฃใฆใฆใƒœใ‚ฟใƒณใจใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚คใจใƒใƒƒใƒ†ใƒชใƒผใจ่ตคๅค–็ทšLEDใŒใคใ„ใฆใฆWifiใจBluetoothใ‚‚ไฝฟใˆใ‚‹ๆฌฒๅผตใ‚Šใ‚ปใƒƒใƒˆ


PS3ใ‚ณใƒณใƒˆใƒญใƒผใƒฉใƒผ

image.png

็ด”ๆญฃๅ“ใฎใ„ใ‚ใ‚†ใ‚‹DUAL SHOCK3
ใƒใƒผใƒ‰ใ‚ชใƒ•ใซใฆ1,000ๅ††ๅ‰ๅพŒใงๅฃฒใฃใฆใ‚‹ใฎใงใ‚ณใ‚นใƒ‘ใŒ่‰ฏใ„
ใŸใ ๆ‰‹ๅžขๆฑšใ‚Œใ‚’ใใ‚Œใ„ใซใ™ใ‚‹ใฎใŒใ‚ใ‚“ใฉใใ•ใ„

Bluetoothใ‚ขใƒ‰ใƒฌใ‚นใฎ็™ป้Œฒ

PS3ใ‚ณใƒณใƒˆใƒญใƒผใƒฉใ‚’ใƒšใ‚ขใƒชใƒณใ‚ฐใ™ใ‚‹ใŸใ‚ใซใฏใ‚ณใƒณใƒˆใƒญใƒผใƒฉใซEPS32ใฎBluetoothใ‚ขใƒ‰ใƒฌใ‚นใ‚’ๆ›ธใ่พผใพใชใ„ใจใ„ใ‘ใพใ›ใ‚“

ESP32ใซไปฅไธ‹ใฎใ‚นใ‚ฑใƒƒใƒใ‚’ๆ›ธใ่พผใฟๅฎŸ่กŒใ—ใพใ™

void setup(void) {
  Serial.begin(115200);
  uint8_t btmac[6];
  esp_read_mac(btmac, ESP_MAC_BT);
  Serial.printf("[Bluetooth] Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", btmac[0], btmac[1], btmac[2], btmac[3], btmac[4], btmac[5]);
}

void loop() {
}

ใ“ใฎใ‚นใ‚ฑใƒƒใƒใ‚’ๅฎŸ่กŒใ™ใ‚‹ใจใ‚ทใƒชใ‚ขใƒซใƒขใƒ‹ใ‚ฟใซใ‚ขใƒ‰ใƒฌใ‚นใŒ่กจ็คบใ•ใ‚Œใ‚‹ใฎใงใƒกใƒขใ—ใฆใŠใใพใ™

ใ“ใกใ‚‰ใ‹ใ‚‰ๆ›ธใ่พผใฟใ‚ฝใƒ•ใƒˆใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใพใ™

Download SixaxisPairTool by Dancing Pixel Studios
https://sixaxispairtool.software.informer.com/download/

PS3ใ‚ณใƒณใƒˆใƒญใƒผใƒฉใ‚’PCใซๆŽฅ็ถšใ—ใ€ใ‚ฝใƒ•ใƒˆใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใฆๅฎŸ่กŒใ™ใ‚‹ใจใ“ใฎใ‚ˆใ†ใช็”ป้ขใŒ่กจ็คบใ•ใ‚Œใพใ™ใฎใงๅ…ˆใปใฉใƒกใƒขใ—ใŸใ‚ขใƒ‰ใƒฌใ‚นใ‚’ๅ…ฅๅŠ›ใ—ใฆUpdateใƒœใ‚ฟใƒณใ‚’ๆŠผใ™ใจๆ›ธใ่พผใฟใŒๅฎŒไบ†ใ—ใพใ™

image.png

ใƒฉใ‚คใƒ–ใƒฉใƒชใฎใ‚คใƒณใ‚นใƒˆใƒผใƒซ

Arduino IDEใฎใƒฉใ‚คใƒ–ใƒฉใƒชใƒžใƒใƒผใ‚ธใƒฃใงPS3ใ‚’ๆคœ็ดขใ™ใ‚‹ใจๅ‡บใฆใใพใ™ใฎใงใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใพใ—ใ‚‡ใ†

image.png

ใ‚นใ‚ฑใƒƒใƒไพ‹ > PS3 Controller Host > Ps3Demo
image.png

ใฎBluetoothใ‚ขใƒ‰ใƒฌใ‚น้ƒจๅˆ†ใ‚’ESP32ใฎ็‰ฉใซๅค‰ๆ›ดใ—ใฆๅฎŸ่กŒใ—ใ€PS3ใ‚ณใƒณใƒˆใƒญใƒผใƒฉใฎPSใƒœใ‚ฟใƒณใ‚’ๆŠผใ™ใจๆŽฅ็ถšใงใใพใ™

Ps3.begin("01:02:03:04:05:06");ใ€€โ†ใ“ใฎ้ƒจๅˆ†

ๆŽฅ็ถšใงใใŸใ‚‰PS3ใ‚ณใƒณใƒˆใƒญใƒผใƒฉใฎใƒœใ‚ฟใƒณใ‚’ๆŠผใ™ใจ็ตๆžœใŒใ‚ทใƒชใ‚ขใƒซใƒขใƒ‹ใ‚ฟใซ่กจ็คบใ•ใ‚Œใพใ™

#include <Ps3Controller.h>

void notify() {
  // ใƒœใ‚ฟใƒณใ‚’ๆŠผใ—ใŸใจใใซๅ‘ผใณๅ‡บใ•ใ‚Œใ‚‹ใ‚ณใƒผใƒซใƒใƒƒใ‚ฏ้–ขๆ•ฐ
    // ใƒœใ‚ฟใƒณใใ‚Œใžใ‚ŒใซใƒกใƒณใƒใŒ็”จๆ„ใ•ใ‚Œใฆใ„ใ‚‹
    if( Ps3.event.button_down.up )
        Serial.println("Started pressing the up button");
    if( Ps3.event.button_up.up )
        Serial.println("Released the up button");
  // ไปฅไธ‹็•ฅ
}
void onConnect(){
  // ๆŽฅ็ถšใ•ใ‚ŒใŸใจใใซๅ‘ผใณๅ‡บใ•ใ‚Œใ‚‹ใ‚ณใƒผใƒซใƒใƒƒใ‚ฏ้–ขๆ•ฐ
  Serial.println("Connected!.");
}

void onDisconnect(){
  // ๅˆ‡ๆ–ญใ•ใ‚ŒใŸใจใใซๅ‘ผใณๅ‡บใ•ใ‚Œใ‚‹ใ‚ณใƒผใƒซใƒใƒƒใ‚ฏ้–ขๆ•ฐ
  Serial.println("DisConnected!.");
}

void setup() {
    Serial.begin(115200);
    // ใ‚ณใƒผใƒซใƒใƒƒใ‚ฏ้–ขๆ•ฐใฎ็™ป้Œฒ(ใ‚ชใƒ—ใ‚ทใƒงใƒณ)
    Ps3.attach(notify);
    // ใ‚ณใƒผใƒซใƒใƒƒใ‚ฏ้–ขๆ•ฐใฎ็™ป้Œฒ(ใ‚ชใƒ—ใ‚ทใƒงใƒณ)
    Ps3.attachOnConnect(onConnect);
    // ใ‚ณใƒผใƒซใƒใƒƒใ‚ฏ้–ขๆ•ฐใฎ็™ป้Œฒ(ใ‚ชใƒ—ใ‚ทใƒงใƒณ)
    Ps3.attachOnDisconnect(onDisconnect);
    // ๆŽฅ็ถšใ™ใ‚‹ใƒ‡ใƒใ‚คใ‚นใฎใ‚ขใƒ‰ใƒฌใ‚นใซๆ›ธใๆ›ใˆใ‚‹
    Ps3.begin("01:02:03:04:05:06");
    Serial.println("Ready.");
}

RoverCใ‚’ๆ“ไฝœใ—ใฆใฟใŸ

ใ›ใฃใ‹ใใชใฎใงRoverCใ‚’ๆ“ไฝœใ—ใฆใฟใ‚‹ใ“ใจใซใ—ใพใ™

ใ“ใกใ‚‰ใงRoverCใฎๅˆถๅพกใฏ็ขบ็ซ‹ใ—ใฆใ„ใŸใฎใงใ“ใกใ‚‰ใ‚’็ต„ใฟๅˆใ‚ใ›ใพใ™

่‡ชๅˆ†ๆตใƒกใ‚ซใƒŠใƒ ใƒ›ใ‚คใƒผใƒซ(RoverC)ๅˆถๅพกๆณ• - Qiita
https://qiita.com/coppercele/items/1596b7b9904eb4403191

notify()ๅ†…ใงๅทฆๅณใ‚นใƒ†ใ‚ฃใƒƒใ‚ฏใฎๅ€คใ‚’ๅ–ๅพ—ใ—ใฆRoverCใฎๆ“ไฝœใ‚’ใ—ใฆใ„ใพใ™

#include <M5StickC.h>
#include <Ps3Controller.h>

int8_t speed_sendbuff[4] = { 0 };

int8_t FORWARD[4] = { 50, 50, 50, 50 };
int8_t LEFT[4] = { -50, 50, 50, -50 };
int8_t BACKWARD[4] = { -50, -50, -50, -50 };
int8_t RIGHT[4] = { 50, -50, -50, 50 };
int8_t ROTATE_R[4] = { 30, -30, 30, -30 };
int8_t ROTATE_L[4] = { -30, 30, -30, 30 };

float f, b, l, r, rr, rl = 0.0;

void onConnect() {
    Serial.println("Connected!.");
    digitalWrite(GPIO_NUM_10, LOW);
}
void onDisconnect() {
    Serial.println("Disconnected!.");
    digitalWrite(GPIO_NUM_10, HIGH);
}

void SetChargingCurrent(uint8_t CurrentLevel) {
    Wire1.beginTransmission(0x34);
    Wire1.write(0x33);
    Wire1.write(0xC0 | (CurrentLevel & 0x0f));
    Wire1.endTransmission();
}

int8_t I2CWrite1Byte(uint8_t Addr, uint8_t Data) {
    Wire.beginTransmission(0x38);
    Wire.write(Addr);
    Wire.write(Data);
    return Wire.endTransmission();
}

uint8_t I2CWritebuff(uint8_t Addr, uint8_t *Data, uint16_t Length) {
    Wire.beginTransmission(0x38);
    Wire.write(Addr);
    for (int i = 0; i < Length; i++) {
        Wire.write(Data[i]);
    }
    return Wire.endTransmission();
}

uint8_t setspeed() {  // ๅ‰ๅพŒๅทฆๅณๅ›ž่ปขใใ‚Œใžใ‚Œใ‚’ไฟ‚ๆ•ฐใจๆŽ›ใ‘ใฆ่ถณใ™
    for (int i = 0; i < 4; i++) {
        speed_sendbuff[i] = FORWARD[i] * f;
        speed_sendbuff[i] += BACKWARD[i] * b;
        speed_sendbuff[i] += RIGHT[i] * r;
        speed_sendbuff[i] += LEFT[i] * l;
        speed_sendbuff[i] += ROTATE_L[i] * rl;
        speed_sendbuff[i] += ROTATE_R[i] * rr;
    }
    float limit = 0.0;
    for (int i = 0; i < 4; i++) {
        // speedใŒ100ใ‚’่ถ…ใˆใชใ„ใ‚ˆใ†ใซใƒชใƒŸใƒƒใ‚ฟใƒผใ‚’ใ‹ใ‘ใ‚‹
        limit = 100.0 / max(abs(speed_sendbuff[3]), max(abs(speed_sendbuff[2]), max(abs(speed_sendbuff[1]), abs(speed_sendbuff[0]))));
    }
    //    printf("limit = %f\n", limit);
    if (limit < 1.0) {
        for (int i = 0; i < 4; i++) {
            speed_sendbuff[i] = speed_sendbuff[i] * limit;
        }
    }

    return I2CWritebuff(0x00, (uint8_t*) speed_sendbuff, 4);
}

void notify() {
    if (Ps3.isConnected()) {
        if (Ps3.data.analog.stick.ly < -10) {
            Serial.print("Moved the left stick:");
            Serial.printf(" ly=%d\n", Ps3.data.analog.stick.ly);
            f = (abs(Ps3.data.analog.stick.ly) / 128.0);
            b = 0.0;
        }
        else if (10 < Ps3.data.analog.stick.ly) {
            Serial.print("Moved the left stick:");
            Serial.printf(" ly=%d\n", Ps3.data.analog.stick.ly);
            b = (abs(Ps3.data.analog.stick.ly) / 128.0);
            f = 0.0;
        }
        else {
            Serial.printf(" ly=%d", Ps3.data.analog.stick.ly);
            Serial.printf(" left V neutral\n");
            b = 0.0;
            f = 0.0;
        }
        if (Ps3.data.analog.stick.lx < -10) {
            Serial.print("Moved the left stick:");
            Serial.printf(" lx=%d", Ps3.data.analog.stick.lx);
            l = (abs(Ps3.data.analog.stick.lx) / 128.0);
            r = 0.0;
        }
        else if (10 < Ps3.data.analog.stick.lx) {
            Serial.print("Moved the left stick:");
            Serial.printf(" lx=%d", Ps3.data.analog.stick.lx);
            r = (abs(Ps3.data.analog.stick.lx) / 128.0);
            l = 0.0;
        }
        else {
            Serial.printf("lx=%d", Ps3.data.analog.stick.lx);
            Serial.printf(" left H neutral\n");
            r = 0.0;
            l = 0.0;
        }
        if (Ps3.data.analog.stick.rx < -10) {
            Serial.print("Moved the right stick:");
            Serial.printf(" rx=%d", Ps3.data.analog.stick.rx);
            rl = (abs(Ps3.data.analog.stick.rx) / 128.0);
            rr = 0.0;
        }
        else if (10 < Ps3.data.analog.stick.rx) {
            Serial.print("Moved the right stick:");
            Serial.printf(" rx=%d", Ps3.data.analog.stick.rx);
            rr = (abs(Ps3.data.analog.stick.rx) / 128.0);
            rl = 0.0;
        }
        else {
            Serial.printf("rx=%d", Ps3.data.analog.stick.rx);
            Serial.printf(" right H neutral\n");
            rr = 0.0;
            rl = 0.0;
        }
        setspeed();
    }
}

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

    M5.begin();
    M5.update();
    Wire.begin(0, 26, 10000);
    SetChargingCurrent(2);
    M5.Axp.ScreenBreath(7);
    M5.Lcd.fillScreen(BLACK);
    pinMode(GPIO_NUM_10, OUTPUT);
    digitalWrite(GPIO_NUM_10, HIGH);

    Ps3.attach(notify);
    Ps3.attachOnConnect(onConnect);
    Ps3.attachOnDisconnect(onDisconnect);
    Ps3.begin("D8:A0:1D:52:9C:C2");
    Serial.println("Ready.");
}

void loop() {
    M5.update();
    if (M5.BtnB.wasReleased()) {
        esp_restart();
    }

    if (M5.BtnA.wasReleased()) {
        M5.Axp.PowerOff();
    }


    delay(1);
}

26
18
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
Linked from these articles

Comments

@nakashin_twitte

ๅ‚่€ƒใซใชใ‚Šใพใ—ใŸใ€ใ‚ใ‚ŠใŒใจใ†ใ”ใ–ใ„ใพใ™ใ€‚
ใ‚ณใƒณใƒˆใƒญใƒผใƒฉใฎใƒฌใƒใƒผใ‚’ๅ‰ใซๅ€’ใ—ใฆใ‚‚ๅ‰ใซ้€ฒใพใšใ€ใ‚ใ‚Œใ“ใ‚Œ่ฉฆ่กŒ้Œฏ่ชคใ—ใฆใ—ใพใ„ใพใ—ใŸใ€‚
ๅŽŸๅ› ใฏ้›ปๆฑ ใŒๅค–ใ‚Œใ‹ใ‹ใฃใฆใŠใ‚Šใ€ใƒ›ใ‚คใƒผใƒซใซใฒใ‹ใ‹ใฃใฆใ„ใŸใ ใ‘ใงใ—ใŸ(^^;)

1
coppercele
@coppercele(Moke Nakamura)

@nakashin_twitte ๅ‚่€ƒใซใชใฃใŸใ‚ˆใ†ใงใ‚ˆใ‹ใฃใŸใงใ™

0

Let's comment your feelings that are more than good

Being held Article posting campaign

ใฏใ—ใ‚™ใ‚ใฆใฎ่จ˜ไบ‹ๆŠ•็จฟ

~
View details

ใ€Œ็ต„็น”ใ€ใ‚„ใ€Œใƒใƒผใƒ ใ€ใงใฎใ‚ณใƒŸใƒฅใƒ‹ใ‚ฑใƒผใ‚ทใƒงใƒณใซใคใ„ใฆใ€ใ‚ใชใŸใฎ่€ƒใˆใ‚’ใ‚ทใ‚งใ‚ขใ—ใ‚ˆใ†!

~
View details
26
18

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address