이 글은 모형전자공작(https://cafe.naver.com/elehobby)의 2023년 7월 월례 모임에서 자유 탐구 주제로 발표한 내용을 블로그 글로 재구성한 것이다.
조종기로서의 게임 패드의 매력은 다음과 같다.
- 게임 상에서 뭐든 조종한다!
- 비행기, 탱크, 자동차, 캐릭터 등등
- 다양한 조작 가능한 스위치들
- PS2 컨트롤러 기준
- x-y 아날로그 조이스틱 2개 (LX/LY/RX/RY)
- 아날로그 버튼 2개 (L2, R2)
- 디지털 버튼 14개
- PS2 컨트롤러 기준
- 기성품!!
아두이노에서 게임패드와 연결을 위한 대표적인 (내가 다뤄본) 라이브러리는 아래와 같다.
- arduino-ps2x
- esp32-ps3
- bluepad32
각각에 대해 얘기를 좀 더 하자면
Arduino-PS2X
- PS2 컨트롤러를 아두이노에 연결하여 조종기로 사용가능 (유선)
- SPI 통신 (전원 제외 4핀이 아두이노에 연결 필요)
- 장점
- Atmel 기반의 Arduino에서도 사용 가능
- 연결만 하면 활용은 어렵지 않다
- 굉장히 많은 이벤트를 구현해 놨다 (버튼을 누를 때와 뗄 때가 구분되어 있다)
- 단점
- 유선! >> PS2 무선 컨트롤러로 무선화 가능할 듯 (대신 공간을 많이 잡아 먹는다)
- 기본적으로 아두이노에서 4핀을 차지하기 때문에 제어를 위한 I/O 포트가 부족할 수 있다
- 활용 방안
- 기본적인 기능 확인용 프로토타입 회로 구성용으로 적합할 듯
- 하나 만들어 놓고 본격적인 회로 구성 전에 모터, 서보, LED등을 모형에 심고 테스트용도로 활용
- 아두이노 + PS2 컨트롤러 + nRF24L01 모듈로 컨트롤러 무선화하고, 제어할 장치를 nRF24L01로 구현하면 꽤 장거리 컨트롤러로 활용할 수 있을 듯 (배터리 고민해야 할 듯)
- 기존 RC 대체 고민 중
- 기본적인 기능 확인용 프로토타입 회로 구성용으로 적합할 듯
기존에 이 라이브러리와 관련해서 썼던 글들
2017.11.23 - [디지털 라이프 電子的生活 My Digital Life/아두이노 (Arduino)] - 플스2 패드를 아두이노에 연결하기...
2017.11.28 - [디지털 라이프 電子的生活 My Digital Life/아두이노 (Arduino)] - 플스2 패드를 RC 조종기로 쓰기 - 테스트 회로 및 소스
esp32-ps3
- 프로젝트 페이지: https://github.com/jvpernis/esp32-ps3
- PS3 게임패드는 기본적으로 블루투스 기반으로 무선 통신 가능
- PS3 패드는 PS3에 유선 연결하여 페어링하게 되어 있음
- ESP32 기반의 MCU에서만 사용 가능
- ESP32는 GPIO가 많아서 다양한 장치 제어를 구현 가능
- Digital I/O 22개 (모두 PWM 출력 가능)
- ESP32-S3 또는 ESP32-C3의 파생 MCU에서는 사용 불가
- 장점
- 사용하기 간편함
- 스위치 별로 변수가 1:1로 지정되어 있어 값을 읽어내기 쉽다
- 컨트롤러의 배터리 상태 모니터링 지원
- 사용하기 간편함
- 단점
- PS3 패드와 MCU에 서로의 BT MAC 주소를 심어야 함 (SixaxisPairTool)
- 하나의 패드로 여러 장치 제어에 번거로움
- PS3 패드와 MCU에 서로의 BT MAC 주소를 심어야 함 (SixaxisPairTool)
bluepad32
- 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)
- 하나의 패드로 여러 장치 제어에 번거로움
- 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
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 컨트롤러
- 장점
- 싸다 (호환 패드가 대략 $10)
- 단점
- 페어링을 위해 MCU의 BT MAC을 미리 심어야 한다.
- 여러 장치를 하나의 컨트롤러로 제어하기에는 귀찮음
- 선물용으로 만들어서 줄 때엔 최선
플스4 Dualshock 4 컨트롤러
- 장점
- 페어링 쉽다
- Bluepad32에서 위치 센서, 가속 센서 모두 잘 동작 (정품 기준. 호환 패드 테스트 필요)
- 단점
- 호환 패드PS3 패드에 비해 비싸다. ($17 이상)
- 호환 패드 구매해서 배송 중
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)
ESP32 등장 이전에는 플스2 패드가 최선이라 생각했는데, 최근엔 대부분의 게임패드가 ESP32에 블루투스 연결이 가능하기에 다양하게 활용할 수 있을 것이다.
활용에 대해 궁금한 점이나, 논의할 내용은 댓글로 같이 얘기 나눠보아요.
'디지털 라이프 電子的生活 My Digital Life > 아두이노 (Arduino)' 카테고리의 다른 글
ESP 계열 모듈 비교 / 아두이노 (0) | 2023.05.11 |
---|---|
아두이노 기반 RPM 카운터 + 서보 테스터 (0) | 2023.02.11 |
[지름신고] 아두이노 우노 미니 한정판 (0) | 2021.12.27 |
아두이노 코드 올리는 라즈베리파이 피코!!! (0) | 2021.06.07 |
팬 컨트롤 + 온습도 센싱 + LCD 디스플레이 = ?? (0) | 2021.04.15 |