NOMO.asia

앞선 글에서 Python 개발 환경을 구성하였고, 이번 글에서는 실제 코드를 실행하여 작동이 되는 것을 확인하는 과정을 정리하였다.

배선 연결

일단 FT232RL USB to UART(Serial) 모듈과 아두이노 우노 R3간 케이블을 아래 사진과 같이 연결해주었다. (RX-RX(로 향하는), TX-TX(가 들어오는), VCC-5V, GND-GND)

코드 수정

https://github.com/ItsDeidara/CommunityController 에서 코드를 내려받아 개발 환경을 구축하고, Twitch Plays Nintendo Switch/CommunityController v3/BOTW/ 경로의 코드를 테스트삼아 RUN 해보기로 계획했다. 다만 코드를 실행해보니 몇 군데 수정할 부분이 있었고, 이것을 아래에 정리해보았다.

twitch.json 파일 수정

일단 코드를 첫 실행하는 경우, config\twitch.json 파일이 존재하지 않아 해당 파일을 생성하도록 되어있다. 이 파일의 내용은 아래와 같다.

{"port": 6667, "host": "irc.chat.twitch.tv", "mainUsername": "", "mainPassword": ""}

이 파일의 내용을 본인에 맞게 수정해주어야 했다. mainUsername 에는 본인의 Twitch 아이디를, mainPassword 에는 실제 로그인할 때 사용하는 패스워드가 아닌 Twitch Chat OAuth Token 값을 입력해주면 되었다. API를 이용해서 발급받을 수도 있지만 https://twitchapps.com/tmi/ 에 접속하니 쉽게 발급받을 수 있었다. 최종적으로는 아래와 같은 형태가 될 것이다.

{"port": 6667, "host": "irc.chat.twitch.tv", "mainUsername": "abcdefgh", "mainPassword": "oauth:abcdefghabcdefghabcdefghabcdefgh"}

find_arduino 함수 에러 해결

위 오류를 수정하고 코드를 실행하자 아래와 같은 에러가 발생했다.

디버깅을 해보니, switch_controller.py 파일에 vid 값과 pid 값이 특정 값으로 하드코딩 되어 있었다. 아마도 사용할 장치의 COM port를 찾기 위해 vid 값과 pid 값으로 장치를 필터링을 하기 위한 용도의 코드였던 것같다. 다만 내가 구입한 장치인 FT232RL USB to UART(Serial) 모듈의 vid 값과 pid 값은 하드코딩 된 것과 달랐다.

따라서 그냥 pid 값과 vid 값을 코드에서 바꿔주는 것으로 해결하였다. 본인 장치의 pid 값과 vid 값을 찾는 방법은, 위에서처럼 중단점을 찍어 확인하거나 아니면 아래 그림처럼 장치관리자에서 장치의 하드웨어 ID 를 읽으면 된다. 다만 이곳에 표시되는 값은 16진수이므로 python 코드로 변환하든 계산기를 이용해 계산하든 알아서 10진수로 변환해 코드에 입력해주면 된다.

CommunityControllerAPI 사용하지 않기

아무래도 개발자는 직접 개발한 별도의 API 를 이용하여 추가 기능을 구현한 듯하다. 다만 테스트를 해보니 API 토큰이 필요한데, 토큰이 없어서 그런지 제대로 작동하지 않고 오류가 발생했다.

따라서 아래와 같이 코드를 수정하여 비활성화 시켰다.

코드를 리뷰해보면 알겠지만 생각 이상으로 코드가 단순한 구조로 되어있어서, Twitch 채팅과 컨트롤러의 연동이 필요 없는 사용자는 쉽게 코드를 수정하여 입맛에 맞게 사용할 수 있을 것이다.

추가로 수정할만한 부분

코드를 리뷰해보니 Python 2.x 버전대에서 작성된 코드라고 생각되어지는 부분들이 있었다(asyncore). Python 3.5 에서 문제없이 돌아가기는 하지만 수정할 여지는 있다.

코드 실행 / 트위치 채팅 연동 테스트

PC-USB to UART-아두이노-닌텐도 스위치 순서로 연결했다. 기존에 PC에 연결했던 아두이노의 USB 케이블은 그냥 스위치 독 옆구리에 있는 USB 포트에 연결하면 된다. 스위치의 [설정] - [컨트롤러와 센서] - [Pro 컨트롤러 유선 통신] 설정을 ON 으로 바꿔주어야 한다.

스위치에 아두이노의 USB를 연결하면 POKKEN CONTROLLER 로 제대로 인식된다.

코드를 실행하여 트위치 채팅과 연동해본 결과는 아래와 같다.


마무리

생각보다 많은 시행착오 없이 깔끔하게 작업이 끝났다. 어느정도 사전 조사가 있기는 했지만 직접 시도하여 일을 종결짓는데 3시간, 블로그 글을 쓰는데 3시간이 걸렸다. 떠먹기만 하면 되도록 모든 것을 미리 작업해준 CommunityController 의 개발자에게 감사의 말을 전하고싶다. 일단 코드에서 오류가 발생하는 부분만 수정하고 작동이 되는지 테스트만 해본 것이라서, 이것을 기본으로 많은 것을 입맛에 맞게 수정해야 할듯하다.