디지털 라이프 電子的生活 My Digital Life/아두이노 (Arduino)

아두이노 + 게임패드에 대한 고찰

미친도사 2023. 7. 24. 18:00

이 글은 모형전자공작(https://cafe.naver.com/elehobby)의 2023년 7월 월례 모임에서 자유 탐구 주제로 발표한 내용을 블로그 글로 재구성한 것이다.

 


조종기로서의 게임 패드의 매력은 다음과 같다.

  • 게임 상에서 뭐든 조종한다! 
    • 비행기, 탱크, 자동차, 캐릭터 등등
  • 다양한 조작 가능한 스위치들
    • PS2 컨트롤러 기준
      • x-y 아날로그 조이스틱 2개 (LX/LY/RX/RY)
      • 아날로그 버튼 2개 (L2, R2)
      • 디지털 버튼 14개
  • 기성품!!

 

아두이노에서 게임패드와 연결을 위한 대표적인 (내가 다뤄본) 라이브러리는 아래와 같다.

  • arduino-ps2x
  • esp32-ps3
  • bluepad32

각각에 대해 얘기를 좀 더 하자면


Arduino-PS2X

 

GitHub - madsci1016/Arduino-PS2X: Read a Playstation 2 Gamepad or Guitar Hero Controller using an Arduino

Read a Playstation 2 Gamepad or Guitar Hero Controller using an Arduino - GitHub - madsci1016/Arduino-PS2X: Read a Playstation 2 Gamepad or Guitar Hero Controller using an Arduino

github.com

  • PS2 컨트롤러를 아두이노에 연결하여 조종기로 사용가능 (유선)
    • SPI 통신 (전원 제외 4핀이 아두이노에 연결 필요)

플스2 패드 (유선)

 

  • 장점
    • Atmel 기반의 Arduino에서도 사용 가능
    • 연결만 하면 활용은 어렵지 않다
    • 굉장히 많은 이벤트를 구현해 놨다 (버튼을 누를 때와 뗄 때가 구분되어 있다)
  • 단점
    • 유선! >> PS2 무선 컨트롤러로 무선화 가능할 듯 (대신 공간을 많이 잡아 먹는다)
    • 기본적으로 아두이노에서 4핀을 차지하기 때문에 제어를 위한 I/O 포트가 부족할 수 있다

플스2 패드 (무선)

  • 활용 방안
    • 기본적인 기능 확인용 프로토타입 회로 구성용으로 적합할 듯
      • 하나 만들어 놓고 본격적인 회로 구성 전에 모터, 서보, LED등을 모형에 심고 테스트용도로 활용
    • 아두이노 + PS2 컨트롤러 + nRF24L01 모듈로 컨트롤러 무선화하고, 제어할 장치를 nRF24L01로 구현하면 꽤 장거리 컨트롤러로 활용할 수 있을 듯 (배터리 고민해야 할 듯)
      • 기존 RC 대체 고민 중

기존에 이 라이브러리와 관련해서 썼던 글들

2017.11.23 - [디지털 라이프 電子的生活 My Digital Life/아두이노 (Arduino)] - 플스2 패드를 아두이노에 연결하기...

 

플스2 패드를 아두이노에 연결하기...

얼마 전에 RC의 조종기에 대한 이런저런 생각에 대해 글을 쓴 적이 있습니다. 2017/08/12 - 아두이노 기반 RC의 무선 조종기에 대한 이런저런 생각들... 그 중에 플레이스테이션2(이하 플스2)의 게임

crazydoc.tistory.com

2017.11.28 - [디지털 라이프 電子的生活 My Digital Life/아두이노 (Arduino)] - 플스2 패드를 RC 조종기로 쓰기 - 테스트 회로 및 소스

 

플스2 패드를 RC 조종기로 쓰기 - 테스트 회로 및 소스

플스2를 아두이노 기반의 RC 조종기로 쓰기 지난 이야기.2017/08/12 - 아두이노 기반 RC의 무선 조종기에 대한 이런저런 생각들...2017/11/23 - 플스2 패드를 아두이노에 연결하기... 플스2 패드를 아두이

crazydoc.tistory.com


esp32-ps3

플스3 게임 패드 (블루투스)

 

GitHub - jvpernis/esp32-ps3: Control your ESP32 projects with a PS3 controller!

Control your ESP32 projects with a PS3 controller! - GitHub - jvpernis/esp32-ps3: Control your ESP32 projects with a PS3 controller!

github.com

  • PS3 게임패드는 기본적으로 블루투스 기반으로 무선 통신 가능
    • PS3 패드는 PS3에 유선 연결하여 페어링하게 되어 있음
  • ESP32 기반의 MCU에서만 사용 가능
    • ESP32는 GPIO가 많아서 다양한 장치 제어를 구현 가능
    • Digital I/O 22개 (모두 PWM 출력 가능)
    • ESP32-S3 또는 ESP32-C3의 파생 MCU에서는 사용 불가
  • 장점
    • 사용하기 간편함
      • 스위치 별로 변수가 1:1로 지정되어 있어 값을 읽어내기 쉽다
      • 컨트롤러의 배터리 상태 모니터링 지원
  • 단점
    • PS3 패드와 MCU에 서로의 BT MAC 주소를 심어야 함 (SixaxisPairTool)
      • 하나의 패드로 여러 장치 제어에 번거로움

bluepad32

bluepad32 라이브러리에서 지원하는 각종 게임 컨트롤러들

 

GitHub - ricardoquesada/bluepad32: Bluetooth gamepad support for the ESP32 (mirror)

Bluetooth gamepad support for the ESP32 (mirror). Contribute to ricardoquesada/bluepad32 development by creating an account on GitHub.

github.com

  • ESP32 기반의 컨트롤러에서 사용 가능
    • BLE 기반의 컨트롤러인 경우 ESP32-C3또는 ESP32-S3에서도 사용 가능 >> 소형화 가능

[ESP32 모듈별 지원가능한 블루투스 컨트롤러 유형]

Chip BR/EDR BLE
ESP32 Y Y
ESP32-S3   Y
ESP32-C3   Y

ESP32-C3와 -S3는 BLE 형태의 게임컨트롤러만 지원한다.

  • 최근 ARM계열의 Arduino 정품 계열도 지원 (Bluepad32 library for Arduino)
  • 장점
    • 블루투스 기반의 다양한 컨트롤러 지원
      • PS3 패드의 경우 MCU의 BT MAC 주소를 심어야 함 (SixaxisPairTool)
        • 하나의 패드로 여러 장치 제어에 번거로움
    • 대부분의 패드의 경우 새 장치 pairing 방법으로 pairing 가능
      • 하나의 패드로 여러 장치 제어 가능
      • pairing 모드 상태인 장치가 여럿인 경우 혼동 주의
Gamepad BR/EDR BLE
DualSense (PS5) Y  
DUALSHOCK 4 (PS4) Y  
DUALSHOCK 3 (PS3) Y  
Nintendo Switch Pro Y  
Nintendo Switch JoyCons Y  
Nintendo Wii U Pro Y  
Nintendo Wii Remote Y  
Nintendo Balance Board Y  
Xbox Wireless Y* Y*
Steam   Y**
Stadia   Y***
Android Y  
8BitDo Y  
iCade Y  
Nimbus Y  
OUYA 1st gen Y  
  • 단점
    • 사용하기 조금 불편함
      • 변수 하나에 여러 버튼 값이 읽혀 나옴 (이진 연산 필요)

[bluepad32에서 읽어내는 변수와 값]

변수 읽히는 값 PS3 Sixaxis XBOX Wireless
dpad() 0x01 up up
0x02 down down
0x04 right right
0x08 left left
buttons() 0x01 X (down) A (down)
0x02 circle (right) B (right)
0x04 sqaure (left) X (left)
0x08 triangle (up) Y (up)
0x10 L1 L.up
0x20 R1 R.up
0x100 L3 (stick L) stick L
0x200 R3 (stick R) stick R
axisX()   -508 ~ 512 (4) -512 ~ 511 (16)
axisY()   -508 ~ 512 (4) -512 ~ 511 (17)
axisRX()   -508 ~ 512 (4) -512 ~ 511 (10)
axisRY()   -508 ~ 512 (4) -512 ~ 511 (14)
brake()   L2 (0~1020) L.down (0~1023)
throttle()   R2 (0~1020) R.down (0~1023)
miscButtons() 0x01    
0x02 SELECT  
0x04 START =
0x08    
gyroX()      
gyroY()      
gyroZ()      
accelX()      
accelY()      
accelZ()      

아날로그 스틱의 경우 센터 상태일 때 "0"이 읽혀야 하지만 살짝 어긋나는 것을 확인할 수 있었다.

적당히 감안해서 동작 범위를 지정해야 할 것이다.

 


ESP32는 Espressif란 회사의 제품군 이름이다. 따라서 ESP32 안에서도 여러가지 파생 모델이 있는데, 대표적인 모델 몇가지의 주요 기능을 비교해 본다.

출처는 다음과 같다.

https://docs.espressif.com/projects/esp-idf/en/v5.0.3/esp32/hw-reference/chip-series-comparison.html

 

Chip Series Comparison - ESP32 - — ESP-IDF Programming Guide v5.0.3 documentation

SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, SHA-512/t (FIPS PUB 180-4); DMA support SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256, SHA-512/t (FIPS PUB 180-4); DMA support

docs.espressif.com

Feature ESP32 Series ESP32-S2 Series ESP32-C3 Series ESP32-S3 Series
Launch year 2016 2020 2020 2020
Core Xtensa® dual-/single core 32-bit LX6 Xtensa® single-core 32-bit LX7 32-bit single-core RISC-V Xtensa® dual-core 32-bit LX7
Wi-Fi protocols 802.11 b/g/n, 2.4 GHz 802.11 b/g/n, 2.4 GHz 802.11 b/g/n, 2.4 GHz 802.11 b/g/n, 2.4 GHz
Bluetooth® Bluetooth v4.2 BR/EDR and
Bluetooth Low Energy
✖️ Bluetooth 5.0 Bluetooth 5.0
Typical frequency 240 MHz (160 MHz for ESP32-S0WD) 240 MHz 160 MHz 240 MHz
SRAM 520 KB 320 KB 400 KB 512 KB
ROM 448 KB for booting and core functions 128 KB for booting and core functions 384 KB for booting and core functions 384 KB for booting and core functions
Embedded flash 2 MB, 4 MB, or none, depending on variants 2 MB, 4 MB, or none, depending on variants 4 MB or none, depending on variants 8 MB or none, depending on variants
Temperature sensor ✖️ 1 1 1
Touch sensor 10 14 ✖️ 14
Hall sensor 1 ✖️ ✖️ ✖️
GPIO 34 43 22 45
Camera interface 1 1 ✖️ 1
Pulse counter 8 channels 4 channels 1 ✖️ 4 channels 1

흥미로운 것은 온도 센서, 터치 센서, 홀센서 등이 기본적으로 포함되어 있다. 물론 모듈로 만들어진 것에 구현이 안 되어 있을 수도 있다.


사용해본 게임 패드 3종에 대한 간단한 소감

 

플스3 Sixaxis 컨트롤러

플스3 Sixaxis 컨트롤러

  • 장점
    • 싸다 (호환 패드가 대략 $10)
  • 단점
    • 페어링을 위해 MCU의 BT MAC을 미리 심어야 한다.
    • 여러 장치를 하나의 컨트롤러로 제어하기에는 귀찮음
  • 선물용으로 만들어서 줄 때엔 최선

 

플스4 Dualshock 4 컨트롤러

플스4 컨트롤러

  • 장점
    • 페어링 쉽다
    • Bluepad32에서 위치 센서, 가속 센서 모두 잘 동작 (정품 기준. 호환 패드 테스트 필요)
  • 단점
    • 호환 패드PS3 패드에 비해 비싸다. ($17 이상)
  • 호환 패드 구매해서 배송 중 

Xbox Wireless Controller

Xbox Wireless Controller

  • 장점
    • 딱 보면 비싸고 좋아 보인다!
    • ESP32-S3 혹은 ESP32-C3도 지원한다. (BLE)
  • 단점
    • 페어링할 때 기본적으로 주변의 윈도 PC를 먼저 찾는다 (엄청 귀찮음)
    • 비싸다 (호환 패드 없음. 정품 6만원대)
    • AA 배터리 별매 (내장 충전 배터리 없음)
  • 그닥 추천할 만하지 않음

추천 ESP32 모듈 - Lolin D32

Features

  • Espressif official ESP32-WROOM-32 module
  • Lastest ESP32 Version: REV1
  • 4MB FLASH
  • Lithium battery interface, 500mA Max charging current
  • Compatible with Arduino, MicroPython
  • Default firmware: lastest MicroPython
Operating Voltage 3.3V  
Supported Battery Lipo 3.7V  
Battery Connector PH-2 2.0mm  
Digital I/O Pins 22  
Analog Input Pins 6 (VP, VN, 32, 33, 34, 35)  
Analog Output Pins 2 (25, 26) 일반 PWM은 모든 GPIO에서 구현 가능
LED_BUILTIN GPIO5  
Clock Speed(Max) 240MHz  
Flash 4M Bytes  
Size 57*25.4mm  
Weight 6.1g  
  • 장점!
    • 와이파이, 블루투스 모두 내장
    • IO핀 22개에 모든 핀 PWM 가능
    • 속도 빠르고, 프로그램 저장 가능한 공간 많음
    • 싸다! (알리 기준 $2.5 전후 + 배송비 ($1.2))
    • Arduino IDE에서 다 잘 된다!
  • 단점
    • 없다!

기타

기존 설계한 소형 자동차용 회로는 WiFi를 통해 제어하는 것으로 설계됨

2021.09.12 - [아무거나 만들기 製作 Maker/모형 완성작] - [완성] 아두이노 기반 미니RC 지프 랭글러 - ver. BAND-HAMMERING (1/35)

 

[완성] 아두이노 기반 미니RC 지프 랭글러 - ver. BAND-HAMMERING (1/35)

제작기 2020.05.19 - [1/35 RC] OH35A01 Jeep Wrangler - (1) 킷 리뷰 및 섀시 조립 2020.06.28 - [1/35 RC] OH35A01 Jeep Wrangler - (2) 컨트롤러 구성 및 테스트 / 실패 2021.01.14 - [1/35 RC] OH35A01 Jeep Wrangler - (3) 새로운 컨트롤

crazydoc.tistory.com

ESP8266 기반 보드로 설계 소형 RC카용 회로
ESP32 Mini란 보드가 기존 보드와 핀호환이 되어서 블루투스 지원하게 업그레이드가 가능하다!


ESP32 등장 이전에는 플스2 패드가 최선이라 생각했는데, 최근엔 대부분의 게임패드가 ESP32에 블루투스 연결이 가능하기에 다양하게 활용할 수 있을 것이다.

 

활용에 대해 궁금한 점이나, 논의할 내용은 댓글로 같이 얘기 나눠보아요.

반응형