NOMO.asia

앞선 글에서, PC로 제어가능한 닌텐도 스위치 컨트롤러를 만드는 것을 간략하게 계획하고 부품을 주문했었다.

부품 도착

부품 도착!!! FT232RL USB to UART(Serial) 모듈과 아두이노 우노 R3 호환보드이다.

아두이노에 POKKEN CONTROLLER 펌웨어 설치하기

일단 가장 먼저 아두이노에 POKKEN CONTROLLER 를 역설계한 내용을 바탕으로 한 펌웨어를 설치해주어야 했다. 이를 위한 과정은 Youtube 의 Saravanan AL 가 업로드한 ARDUINO- Upgrading USB FIRMWARE using FLIP 라는 제목의 동영상을 참고하여 진행했다.

1. FLIP 다운로드 및 설치

아래의 링크에서 PC에 FLIP 을 다운로드 받아 설치했다.

https://www.microchip.com/developmenttools/ProductDetails/FLIP

본인의 PC 환경에 맞는 설치파일을 다운로드 받으면 된다. Windows 환경에서 본인 PC에 자바 런타임이 깔려있지 않거나 잘 모른다면 첫 번째 20MB 짜리 파일을, 자바 런타임이 이미 깔려있다면 두번째 5MB 짜리 파일을 다운받아서 설치하면 된다. (마인크래프트 자바 에디션 하는 사람은 다 자바 런타임 깔려있음)

설치 방법은 간단했다. 설치 파일을 실행한 후 Next 만 계속 눌러주다 보니 완료되었다.

2. 아두이노 우노 R3 를 PC에 연결

USB 케이블을 이용해 아두이노를 PC에 연결하니 장치관리자에서 아래와 같이 아두이노가 USB 직렬 장치로 잡힌 것을 볼 수 있었다. (환경에 따라 다르게 잡힐 수도 있다).

3. 아두이노의 DFU 모드 진입

아두이노의 펌웨어 업데이트를 위해서는 DFU 모드에 진입해야하고 방법은 간단했다. USB 연결이 되어있는 상태로 아래 사진처럼 아두이노의 RESET 핀과 GNU 핀을 드라이버 등을 이용해 잠깐 접촉해주면 된다. 아두이노 보드마다 생김새가 조금씩 다를 수는 있지만 저 위치에 가장 왼쪽 두 개의 핀을 접해주면 된다.

약 1~2초가 지나면 장치관리자에서 기존 장치가 사라지면 이 때 드라이버를 떼도 된다. 이후 1분 정도가 더 지나 모든 과정이 완료되니 알 수 없는 장치가 준비되었다는 메시지가 나타났다.

4. 드라이버 설치

장치관리자에서 [알 수 없는 장치를 우클릭] > [드라이버 업데이트] > [컴퓨터에서 드라이버 소프트웨어 검색] > [FLIP 설치 내 usb 폴더를 선택]하여 드라이버를 설치한다. 경로는 C:\Program Files (x86)\Atmel\Flip 3.4.7\usb 또는 C:\Program Files\Atmel\Flip 3.4.7\usb 이다.

경로를 설정한 후 다음 > 장치 소프트웨어 설치를 완료하자 아래와 같이 기존의 알 수 없는 장치가 사라지고 ATmega16U2 라는 이름으로 표시되었다.

5. FILP 실행 및 펌웨어 업데이트

1. 앞에서 설치한 FLIP을 실행하고, 칩셋 모양 버튼을 누른 후 ATmega16U2를 선택했다.

2. File - Load HEX File 에서 POKKEN CONTROLLER 펌웨어 파일에 해당하는 joystick.hex 파일을 선택했다. 이 파일은 다음 경로에서 다운받을 수 있다. https://github.com/ItsDeidara/CommunityController/tree/master/Arduino%20File (참고로 펌웨어 파일은 칩셋에 따라 달리 사용해야하며, 해당 링크에 있는 파일은 2020년 1월 31일 기준으로 동작하는 ATmega16U2 칩셋용 파일이다. 다른 칩셋용 파일은 이곳을 뒤지다 보면 찾을 수 있을 것이다.)


3. Settings - Communication - USB 를 누르면 뜨는 창에서 OPEN 을 눌러준다.


4. 그럼 아래 그림과 같은 창이 나타날텐데, Run 버튼을 누르면 펌웨어 덮어쓰는 것을 시작한다. 정상적으로 되었다면 창 좌측 하단에 Verify PASS 라고 표시될 것이다.

6. USB 재연결 및 POKKEN CONTROLLER 로 장치가 잡히는지 확인

PC와 아두이노 간 USB 연결을 해제했다가 PC에 재연결하여 DFU 모드를 해제했다. 만약 문제가 없다면 POKKEN CONTROLLER 의 드라이버가 설치되었다는 메시지가 나타날 것이다.

장치관리자에서는 아래와 같이 나타났다.

Window 키를 누르면 나오는 검색창에 [USB 게임 컨트롤러 설정] 라고 치면 나오는 제어판 메뉴에서도 확인할 수 있었다.

기존에는 없던 POKKEN CONTROLLER 가 새로 생겼다! 아두이노에 펌웨어 설치가 완료된 것이다!

다음 문서에서는 PC에서의 컨트롤러 제어를 위한 Python 개발 환경을 구축하는 것에 대해 정리하였다.


  • 고양순이 2020.03.25 21:34

    자료 잘 보고갑니다~ 매크로 만들고 싶어 이리저리 찾고있었는데 자세히 알려주셔 많이 도움되었습니다.

  • Favicon of https://nomo.asia 노모 2020.03.28 13:16 신고

    대댓글 남기려는데 지워져서... 예전에 자료조사할 때 알게된 것인데, 특정 아두이노 호환보드의 경우 dfu 모드 진입이 불가능한 경우가 있다고 합니다.
    해보지는 않았지만 https://pichachu.tistory.com/m/21 처럼 우회가능한 방법이 있으니 참고해보세요.

    • 김동환 2020.03.28 15:33

      제가 가지고 있는 우노가 6핀짜리가 두개가 아니고 하나만 있는 호환버전이네요;;

      micro로 해보려고 하는데 gnd + reset 접지해봐도 알수 없는 장치가 아니고 부트로더로 바뀌고 다시 micro로 바뀌던데 맞는 과정일까요?

    • Favicon of https://nomo.asia 노모 2020.03.28 15:42 신고

      호환보드마다 dfu 진입 방법이 다르니 제가 뭐라 답해드리긴 어렵고 구글링하시거나 매뉴얼을 찾아보시는 것을 추천드립니다.

      저는 미니랑 레오나르도가 있었지만 그냥 일단 시키는대로 따라해보려고 우노를 새로 샀고 그 이후 과정에 문제는 없었거든요. 얼마 안 하니 많이 막히시면 새로 구매하셔서 하시는 것이 속 편하실 수도 있겠네요.

  • Favicon of https://nomo.asia 노모 2020.03.28 13:18 신고

    그리고 micro 를 사용하시는 경우 방법은 모두 동일하나, 우노와 칩셋이 다르므로 micro 에 맞는 펌웨어를 찾아서 올리셔야 합니다

  • Favicon of https://nomo.asia 노모 2020.03.28 13:19 신고

    구글링으로 찾으시거나 https://github.com/progmem/Switch-Fightstick/network/members 에서 링크 뒤지시면서 찾으셔야 할거에요~

  • 김동환 2020.03.28 13:33

    아 답변 달아주셨네요 ㅜㅜ 다시 작성해서 질문글 올리려고 하고 있었습니다. 달아주신 댓글로 확인해보겠습니다.

  • 김동환 2020.04.04 13:29

    오늘 아두이노 받아서 진행중에 Arduino File 폴더에 hex 로드시 파일을 열 수 없다고 나오는데 제가 로드한 파일이 잘 못 된걸까요?

    • Favicon of https://nomo.asia 노모 2020.04.04 14:00 신고

      본문 5번의 flip 에서 joystick.hex 여는 과정에서 문제 생기셨다는 말씀이시죠?

    • Favicon of https://nomo.asia 노모 2020.04.04 14:04 신고

      DFU는 잘 진입 되신거죠?? 일단 본문에 링크한  ARDUINO- Upgrading USB FIRMWARE using FLIP 라는 제목의 동영상에 좀 더 자세하게 방법이 나와있으니 유투브에서 확인해보시고, 따라하신 후 잘 되시는지 말씀해주세요~~

  • 김동환 2020.04.04 14:05

    네 dfu 진입되었고 장치관리자에서 ATmega 16u2 진행 후

    https://github.com/ItsDeidara/CommunityController/tree/master/Arduino%20File

    네 이 경로로 들어가 상위폴더 압축 다운로드하여 Arduino File 폴더내의 joystick.hex 파일을 Flip 실행 후 ATmega16U2 선택 다음으로 불러와 주었는데 "Cannot open file."메세지로 진행이 멈추었습니다.

  • 김동환 2020.04.04 14:10

    네 유투브 방법으로 해봐도 joystick.hex 오픈에서 같은 에러가 발생합니다

  • 김동환 2020.04.04 14:37

    아.... hex 파일 경로에 한글이 있으면 안되는 거였습니다 ㅜ,.ㅜ

  • 김동환 2020.04.04 16:21


    단순하게 pc에서 시리얼로 해당 버든의 키값을 아두이노로 보내고 FT232RL USB to UART통해 닌텐도 스위치로 그 값만 넣으면 바로 작동할 줄 알았는데 검색해보니 그게 아니네요 ;; 관련 찾아봐도 없던데
    이런식의 방식은 안되는 걸까요?

    • Favicon of https://nomo.asia 노모 2020.04.05 01:28 신고

      네 말씀하신 방법으로 가능합니다. 그런데 말씀하신대로 "해당 버튼의 키값을 아두이노로 보낼 때" 의 방법이 중요할텐데요. 이미 있는 코드를 활용하시면 편하게 하실 수 있을 것 같네요~

      https://github.com/ItsDeidara/CommunityController/tree/master/Twitch%20Plays%20Nintendo%20Switch/CommunityController%20v3/BOTW/lib
      위 경로에 가시면 switch_controller.py 파일이 있습니다.

      파이썬을 사용하실 줄 아시면, 해당 파일과 그 안에 정의된 함수들을 이용해서 바로 제어하시면 되고요
      다른 언어를 주로 사용하시면 버튼에 따른 값만 참고하셔서, 주로 사용하시는 언어로 시리얼 신호를 보내시면 될 것 같습니다.

      python 으로 코드를 실행하실 때 패키지는 serial 정도만 설치하시면 될거구요,
      switch_controller.py 의 line 117 정도의
      p.vid == 4292 and p.pid == 60000
      는 본인이 구매한 USB to UART 제품에 맞게 수정해주셔야 합니다.
      제가 구매한 제품과 같은 것을 구매하셨으면 p.vid == 1027 and p.pid == 24577 로 수정하시면 되겠네요.
      혹은 https://nomo.asia/455 를 보고 수정하셔도 됩니다.

      python 이 아닌 다른 언어를 사용하시려는 경우에는 그에 맞게 코드를 직접 포팅하시거나, 원하시는 언어에 맞게 작성된 코드를 웹서핑을 통해 찾으시면 되겠습니다 -ㅁ-;;

    • Favicon of https://nomo.asia 노모 2020.04.05 01:29 신고

      파이썬으로 코드를 작성하시는 경우, https://github.com/ItsDeidara/CommunityController/blob/master/Twitch%20Plays%20Nintendo%20Switch/CommunityController%20v3/BOTW/main.py 의 코드를 정말 필요한 부분만 남기고 몇가지 버튼을 누르는 경우를 예로 들면 대충 아래 링크한 파일처럼 될 것 같은데요. 테스트 해보지는 않았습니다.

      https://nomo.asia/attachment/cfile25.uf@998029345E88B81C1E596D.py

Leave a comment