DIY

ESP32 데브킷 이용한 플스1/플스2 용 BlueRetro 자작

일렉트릭캣 2024. 12. 6. 03:28

서론


이상하게 플4/플5 같은 최신 콘솔보다 플1/플2 구형 콘솔을 더 많이 플레이한다.

뭔가 초등학생이였던 당시의 추억을 상기 시키기 때문이 아닐까 싶은데.. 아.. 이런거 보면 나이 먹긴했다.

 

다만, 플1/플2 콘솔의 문제는 컨트롤러가 유선이다. 이게 콘솔이 한두대면 모르겠는데 콘솔이 많아지면 선 때문에 너저분해진다.

무선이여도 너저분해지는건 마찬가지지만, 무선은 유선보다 한쪽에 대충 몰아서 거치해두면 되니깐 낫다.

 

플1/플2 콘솔용 무선 리시버는 시중에 많이 존재 한다. 8BitDo 여기서도 만들고 다른 중국제도 많이 존재 한다.

사실 고민 했다. 8BitDo 여기가 완성도가 높기에 구매하려고 했지만 가격의 압박이 있다.

 

다른 중국제를 고민하다가 BlueRetro 라는 리시버가 눈에 띈다. 근데 개나소나 BlueRetro라고 하는거 아닌가? 뭐 중국제 짝퉁이야 한두번 보는건 아니지만 아니 모양이나 색깔부터가 다른데 같은 BlueRetro라니..?

 

찾아보니 BlueRetro는 ESP32 MCU를 기반으로 하여 구형 콘솔들의 무선 리시버를 구현해주는 오픈소스 프로젝트더라.

https://github.com/darthcloud/BlueRetro

 

GitHub - darthcloud/BlueRetro: Multiplayer Bluetooth controllers adapter for retro video game consoles

Multiplayer Bluetooth controllers adapter for retro video game consoles - darthcloud/BlueRetro

github.com

 

 

벌써 여기서부터 내 DIY 욕구를 자극한다. 알리에서 1.8만원이면 구할 수 있지만 일단 합리화를 시도해보자

1. 알리에서 구매하면 일주일 정도 기다려야한다. 하지만 당장 쓰고 싶다.

2. ESP-WROOM-32 데브킷을 배송비 포함해도 9천원밖에 안한다. 즉, 반값에 쓸 수 있다.

 

시간과 가격에서 이미 결정됬다. 바로 시도해본다.

 

준비물


ESP32 데브킷과 PS1/PS2 컨트롤러 소켓

1. ESP-WROOM32-DEVKIT

2. PS1/PS2 전용 컨트롤러 소켓

 

1번은 그냥 인터넷에서 아무거나 사면되고, 2번은 차피 플스2 정크 매입하면서 고장난 듀쇽2만 해도 엄청많기에 그걸 사용하면된다. 뭐 알리에서 파는것 같기도한다. 근데 DIY용은 알리에서 파는게 적합하다.

 

펌웨어 다운로드


사실 펌웨어 다운로드를 먼저하든, 납땜을 먼저하든 상관 없다. 다만, 데브킷이 불량일 경우 납땜을 했을때는 반품할 수 없기 때문이다.

펌웨어 다운로드는 Windows 기준으로 설명한다. macOS나 Linux 사용자분은 CLI 환경에 친숙 하실테니 알아서 하시겠지..

 

아래 링크에서 펌웨어를 다운로드 받자

https://github.com/darthcloud/BlueRetro/releases

 

Releases · darthcloud/BlueRetro

Multiplayer Bluetooth controllers adapter for retro video game consoles - darthcloud/BlueRetro

github.com

 

펌웨어 종류는 HW1, HW2 이렇게 두개가 있는데, HW1만 받아도 무방하다

 

아래 링크에서 Flash Download Tools를 다운로드 받자 (Windows 기준)

https://www.espressif.com/en/support/download/other-tools

 

Tools | Espressif Systems

Quickly get Espressif's RF performance test tool, test firmware, test guide and certification test guide for ESP32, ESP32-C3, ESP32-S2,ESP32-C6,ESP32-C2,ESP32-H2, and ESP8266 series of product.

www.espressif.com

 

 

Flash Download Tools 디렉토리 내부의 "flash_download_tool_버전.exe" 실행하고 아래처럼 펌웨어 파일 경로와 플래시 어드레스를 지정한다.

펌웨어 파일 별 플래시 어드레스는 아래와 같다.

bootloader.bin@0x1000

partition-table.bin@0x8000

ota_data_initial.bin@0xd000

BlueRetro_hw1_playstation.bin@0x10000

 

이제 ESP32 데브킷을 다운로드 모드로 진입 시켜야한다. 데브킷은 버튼이 2개가 있는데 BOOT 버튼을 누른채로 USB를 연결하자.

 

정상적으로 연결되었다면 FLASH DOWNLOAD TOOL 다이얼로그 오른쪽 하단에 COM 콤보박스에 `COM14`, `COM1`, `COM2` 등 시리얼 포트로 잡히게된다. 본인 ESP32 데브킷이 사용하는 시리얼 포트 번호로 지정한다. 본인은 `COM14` 포트로 잡혔다.

 

펌웨어 다운로드를 위한 보레이트 460800bps로 설정한다. (오른쪽 하단 BAUD 항목)

 

SPI SPEED와 SPI MODE는 각각 40MHz, DIO로 설정한다.

 

이제 모두 준비되었다면 START 버튼을 눌러 펌웨어 다운로드를 진행한다. 다운로드가 완료되면 아래 화면처럼 뜨게된다.

 

하단에 AP, STA, BT 등등 식별자가 뜨는데 BT에 대한 값을 따로 복사해두자. 이는 ESP32 데브킷의 블루투스 MAC 주소이고 후술할 듀얼쇼크3와 페어링에 필요하다.

 

PS1/PS2 컨트롤러 커넥터 납땜하기


작업중인 DIY에서 가장 귀찮은 부분이다. 무려 8개의 포인트를 납땜해야하기 때문이다.

 

핀아웃은 아래와 같다.

절대로 오른쪽 사진의 와이어 색상을 보고 납땜하면 안된다. 이게 듀얼쇼크2 버전에 따라서 색상이랑 와이어 갯수도 다르기 때문이다.

 

"본 설명서는 실제와 다를 수 있습니다"의 예시 본인 듀속2 핀은 베이지색 와이어가 추가로 있다...

 

본인이 소유한 듀속2 커넥터는 베이지색 와이어가 있더라... 이거 도저히 모르겠어서 그냥 커넥터를 다 분해해버리고 직접 확인했다. 이처럼 베이지색 와이어가 있다면 검은색 와이어와 함께 그라운드(GND)에 납땜해버리면된다.

 

참고로 오른쪽 사진의 저항과 다이오드는 설치 할 필요 없다.

드디어 완.성. 했나..?

 

납땜은 완료했으나... 문제는 본인이 구매한 데브킷은 헤더핀이 달려나온다. 데브킷이므로 당연히 헤더핀이 달려나오는건 맞는데 나한테는 두께만 늘어나는 요인이다.

이 헤더핀을 제거하다가 잔납으로 인해 쇼트가 났다. 그래서 전압 레귤레이터 옆 콘덴서가 타버린 상황... 그 이후로 무슨수를 써도 블루투스가 잡히질 않는다.

 

혹시나 보드가 완전히 죽었나 확인해보기 위해 시리얼 출력을 확인해본다. 문제는 BlueRetro 펌웨어가 로그 출력으로 사용한 시리얼 포트의 보레이트를 모른다... 뭐 어쩔 수 없다. 1200bps부터 230400bps까지 전부 확인해봐야지 뭐

 

보레이트를 모르더라도 뭔가 출력이 나오는것 같긴하다. 결국 BlueRetro 펌웨어의 로그 출력 보레이트는 921600bps, 초기 부트롬은 115200bps를 사용하는걸 확인했다.

 

뭔가 부팅은 되는것같은데 자꾸 싱글코어 모드로 실행된다는 로그가 반복되는걸 보면 모종의 이유로 재시작되는듯하다. 

 

항상 `I BOD: Brownout detector was triggered` 이메시지와 함께 재시작되는걸 보면 여기서 답을 찾을 수 있을것 같았다.

답은 전압 부족으로 확인되었다. USB TTL 칩으로 전달하는 전압이 부족해서 뜬다는 말이다.

 

TTL 칩이 전력공급 하는게 아니라 VIN 핀으로 직접 공급하니 플2에 직접 물리면 문제가 없나? 그렇다. 문제가 없다.

플2, USB 둘 다 물리고 로그를 확인하니 정상작동하는것으로 확인된다.

 

쇼트로 인해 콘덴서가 손상되었고, 이로인해 USB만으로 전력 공급에 문제가 생긴 상황이였다. 불행 중 다행으로 플2에 물릴때는 정상작동 했다.

 

그러나.. 나는 이 사실을 데브킷이 고장났다고 판단하여 ESP32 데브킷을 또 했고 택배를 받은 후에 알게됬다.. ㅠㅠ

이제 원가만 보면 블루레트로가 더 이득인 상황

 

 

글루건으로 선들 고정하면 사용 할 준비는 끝났다.

 

아래는 재구매한 ESP32 데브킷으로 만든 BlueRetro.. 그냥 두개 샀다고 치자.

 

 

진동 활성화 시키기


기본적으로 BlueRetro는 진동이 꺼져있다. 따라서 진동을 켜줘야 한다. 진동을 활성화 하는 설정을 들어가기 위해서는 본인 PC가 블루투스 연결을 지원해야한다.

 

아래 링크를 들어가서 BlueRetro Advance config 메뉴를 들어간다.

https://blueretro.io/

 

BlueRetro Web config

 

blueretro.io

 

ESP32 데브킷에 전원을 넣고 Connect BlueRetro 버튼을 눌러 본인의 ESP32 데브킷을 선택한다.

 

 

연결이 완료되면, Output Config 섹션에서 악세사리를 Rumble로 선택하고 Save 버튼을 누른다.

 

 

그럼 무선으로 연결된 컨트롤러에 게임에서 발생하는 진동이 온다.

 

DualShock3 연결하기


일부 플2 게임에서는 DualShock2 감압 버튼 인식을 지원한다. 대부분은 감압 버튼 인식이 안되도 플레이에 문제가 없지만 일부게임은 문제가 되는 경우가 있다. 역대 무선 DualShock 중 감압 버튼을 지원하는 버전은 플3용 DualShock3만 지원한다. BlueRetro에서 일반적인 무선 컨트롤러를 사용해도 되지만 플2를 제대로 즐기려면 DualShock3가 최고의 선택이라고 생각된다.

 

다만, DualShock3는 자동페어링을 지원하지 않는다. 그래서 플3를 켜도 컨트롤러를 인식하려면 최초 1회는 USB를 연결해야한다.

하지만 우리가 만든 BlueRetro 리시버는 그런거 없다. 그럼 어떻게 해야할까?

다행히 SixaxisPairTool 이라는 도구를 사용하여 DualShock3의 마스터를 변경 할 수 있다.

 

SixaxisPairTool 설치

인터넷에서 찾아보니 SixaixPairTool은 설치형 프로그램이다. 괜히 뭐 설치한다고 의심하진 말자. 하긴 워낙 멀웨어가 많아서 의심해보는게 맞다. 본인은 아래 링크에서 다운로드 했다. 아래 링크에서 다운로드 하자.

https://lon-01.dlo4d.com/files/sixaxispairtool/SixaxisPairToolSetup-0.3.1.exe

 

USB 드라이버 변경

그 다음은 USB 드라이버를 바꿔줘야 한다. 나도 이걸 왜하는지는 모르겠다. 아래 프로그램을 통해 드라이버를 libusb-win32로 변경한다. 

zadig-2.9.exe
5.09MB

 

 

DualShock3 마스터 변경

SixaxisPairTool을 열면 정말 심플하다. DualShock3가 페어링할 블루투스 장비의 MAC 주소를 입력하면된다.

 

처음 펌웨어 다운로드 과정에서 우리는 ESP32 데브킷 블루투스 MAC 주소를 얻을 수 있었다. 거기서 획득한 MAC 주소에 두자리마다 콜론을 붙혀주고 입력하면된다. 대소문자는 구분하지 않는다.

 

만약 블루투스 MAC 주소를 펌웨어 다운로드 단계에서 얻어두지 못했다면 진동 활성화 하기 단계에서 BlueRetro Advance config 단계에서 상단에 MAC 주소가 표시된다. 그 MAC 주소를 사용하면된다.

 

참고로 짭 DualShock3는 저거 해도 페어링이 제대로 안된다. 정품으로 하도록 하자.

 

결과물


이제 즐겜만 남았다

 

별 문제 없이 아주 잘된다. 진동도 잘되고 감압 버튼도 잘 작동한다.

무선 컨트롤러 쓰고 싶어서 플2 게임을 플3 콘솔에서 했는데 그놈의 팬소리가 너무 시끄럽다. 이젠 플2 실기 콘솔에서 돌리니 그럴일은 없다.

 

참고자료

https://github.com/darthcloud/BlueRetro/wiki/BlueRetro-DIY-Build-Instructions

 

BlueRetro DIY Build Instructions

Multiplayer Bluetooth controllers adapter for retro video game consoles - darthcloud/BlueRetro

github.com