Retropie - Utilizando um controle original de NES, SNES, N64, PX2/PS2 e Gamecube

Melhor que jogar um bom game retro é poder jogá-lo com um controle original da plataforma e o Retropie permite isso sem muita dificuldade. Para a ligação elétrica, é necessário ligar o controle pela interface GPIO do Raspberry Pi.

As opções de controle disponíveis são:
NES, SNES, PSX/PS2,N64, Atari, Commodore, Amiga, Sega Mega Drive, Sega Saturn, Amiga CD32.

Eu fiz o teste com um de Super Nintendo. Uma observação importante é que a GPIO do Raspberry Pi trabalha com 3,3V, porém controles trabalham com 5V e até mais, ligar mais de 3,3V na GPIO é risco de queimar o Raspberry Pi.
No caso do controle de SNES, ele funcionou com 3,3V apesar de trabalhar com 5V. Mas apenas o controle original funcionou com 3,3V, um Cirka e outro Chinês não funcionaram. A dica é, caso precise alimentar o controle com tensões maiores, é preciso usar um conversor de nível logico como este ou este. Você alimenta o controle com 5V e suas saídas terão nível logico em 5V, com o conversor você transforma essas saídas em 3,3V, o que é preciso para a GPIO do RPi.


O primeiro passo é instalar os drivers, no menu do EmulationStation escolha Retropie e RETROPIE-SETUP. Dentro do menu que irá abrir vá em:

3 Setup / Configuration
809 Gamecon & db9 drivers

É necessário estar na internet para a instalação, a instalação irá durar em torno de 10 min e ao final se aparecer uma pergunta sobre atualizar o firmware, escolha sim (YES), esta instalação irá demorar mais uns 10min.

Caso esteja rodando os drivers de controle de XBOX 360, desabilite pelo menu RETROPIE-SETUP, pois este driver pode dar conflito.

Será instalado dois drivers o gamecon e o db9. O Gamecon irá servir para os controles:

-NES
-SNES
-PSX/PS2
-N64
-Gamecube

E o db9 para os controles:

-Atari, Commodore, Amiga e outros controles com conector db9 de 1 a 3 botões
-Sega Mega Drive (Genesis)
-Sega Saturn
-Amiga CD32

Para a ligação física e utilização do driver, vou mostrar como fazer com o controle de SNES, para outros basta seguir o mesmo procedimento. Os controles db9 são um pouco mais trabalhosos, porque cada botão usa um fio, ao contrario do Gamecon que utiliza um protocolo e assim usa em torno de apenas 3 fios (clock, latch e data). Como os db9 são controles menos comuns, não vou detalhar aqui, mas quem quiser aprofundar pode ler o readme disponível após a instalação dos drivers em /usr/share/doc/db9_gpio_rpi/README.gz ou aqui.

Continuando, procure na internet por "pinout SNES" para ter a pinagem do conector. Na minha procura fui levado a este link. Com a pinagem em mãos vamos para a interface GPIO, a imagem abaixo será nosso guia:

 

Aqui é importante observar que para o Pi B, existe as placas Rev1 e Rev2, você precisa saber qual sua placa. Na ligação física, use os 3,3V e GND para alimentar o controle e no caso do SNES vou usar o GPIO 10 para o clock e GPIO 11 para o latch conforme está no readme disponível em /usr/share/doc/gamecon_gpio_rpi/README.gz ou aqui. Para os dados (DATA) é que entra a importância de saber qual a rev da placa. No meu caso que é rev 2, preciso usar a GPIO 2 ou GPIO 3, mas veja que na rev 1 nesta mesma posição física é GPIO 0 e GPIO 1. Além destas duas posições, podemos ligar mais controles em GPIO 4 e GPIO 7, estes comuns para as duas placas. Com as conexões feitas o ultimo passo é subir o driver. Temos então 6 posições de controles onde usaremos no máximo 4 já que existe as diferenças das placas, o comando usado para subir o driver é:

sudo modprobe gamecon_gpio_rpi map=x,x,x,x,x,x

Onde no lugar de cada x colocaremos o tipo de controle correspondente conforme a tabela abaixo, sendo na sequencia map=GPIO 0, GPIO1, GPIO 4, GPIO7, GPIO 2, GPIO 3:

0 = no connection
1 = SNES pad
2 = NES pad
3 = Gamecube pad
6 = N64 pad
7 = PSX/PS2 pad
8 = PSX DDR controller
9 = SNES mouse

Portanto no meu caso, os dois primeiros deixo em 0, já que minha placa é rev 2 e não tenho GPIO 0 e GPIO 1. Como liguei fisicamente na GPIO 2 meu comando ficou:

sudo modprobe gamecon_gpio_rpi map=0,0,0,0,1,0

Caso eu ligasse outro controle além do de SNES, um de N64 por exemplo, na GPIO 7 o comando ficaria:

sudo modprobe gamecon_gpio_rpi map=0,0,0,6,1,0

Para confirmar se o modulo está ok dê o comando:

tail /var/log/kern.log

ou

lsmod | grep gamecon

Agora basta abrir o EmulationStation e configurar o controle. Para subir o modulo a cada boot é necessário editar o arquivo /etc/rc.local, para isto use o comando:

sudo nano /etc/rc.local

E adicione a linha abaixo antes do exit 0, sempre lembrando das posições do controle.

modprobe gamecon_gpio_rpi map=0,0,0,0,1,0 &

Saia do nano com CTRL + X, depois Y e ENTER.

Comentários

  1. Ronaldinho, amigo caso eu queira usar o conversor de nível lógico com um controle de PSX (que é usado os pinos VCC,GND,DAT,ATT,CLK e CMD) Ligando o VCC no 5v eu terei que passar o DAT,ATT,CLK e CMD pelo conversor de nível? ou existe algum que não precise? estou montando meu "Pistation" na marra, tenho dificuldades no inglês e o conteúdo em PT é muito escasso. desde já agradeço pelo conteúdo compartilhado.

    ResponderExcluir
    Respostas
    1. Opa! Com certeza terá que o usar o conversor de nível para cada um destes sinais. A única forma de não usar seria se o controle funcionasse em 3.3V, ou seja ligando o VCC em 3.3V.

      Excluir
    2. vou testar nos 3,3v primeiro.. Sabe se terei uma latência melhor que através de um adaptador PSx/USB ? e Obrigado por me responder :)

      Excluir
    3. Eu já até testei um de PS2 com adaptador USB, mas foi teste rápido, só para ver se funcionava e nem reparei isso. Mas acredito que usando este modulo, o tempo de resposta será mais rápido do que com um adaptador USB.

      Excluir
  2. Cara, muito bacana esse tuto!
    Teria como vc fazer um passo a passo utilizando um PSX PAD? Eu cheguei até instalar e atualizar os drivers Gamecon e Db9, mas só aparece opção para configurar os pads do SNES.
    Também estou montando meu PiStation e queria muito conectar os joysticks pela porta GPIO.

    ResponderExcluir
    Respostas
    1. Se vc instalou os drivers e fez a ligação física correta não tem segredo, já está pronto, bastando trocar o numero 1 que é do SNES para o numero 7 que é o PSX.

      Excluir
    2. Bom,sou bem novato.. como conectar o controle de PS2 pelas GPIOs? Coloca as fêmeas nos plugs do controle e onde vai cada macho na hora de colocar no Raspberry Pi 3 Model B?

      Excluir
    3. Tipo já está pronto pra conectar só não sei em quais lugares (controle de PS2)

      Excluir
  3. boa tarde, eu uso o recalbox ,mas as configuraçoes nao sao muito diferentes. Nao consegui fazer ele reconhecer os controles, onde eu coloco esse comando "pra confirmar o modulo"?

    ResponderExcluir
  4. Olá! Existe duas formas, apertar F4 no emulationstation e você irá para linha de comando. Ou o jeito que acho melhor que é conectando pela rede por ssh usando o Putty: https://github.com/retropie/RetroPie-Setup/wiki/ssh

    ResponderExcluir
  5. cara to tentando no rapsberry pi zero, porem nao deu bom, vc tem alguma info ?

    ResponderExcluir
    Respostas
    1. Opa! Não tenho ideia, deveria funcionar, afinal para a GPIO não tem diferença.

      Excluir
  6. Boa tarde! Fiz tudo como descrito mas o controle de está apertando sozinho na hora de configurar no emulationstation! Ou as vezes o botão não responde! Usando psx! Será que pode me dar alguma dica?

    ResponderExcluir
    Respostas
    1. Olá! Minha dica ficaria em ter certeza que é um controle original e se você está conectando com um conversor de nível logico.

      Excluir
    2. Sim o controle é original! Agora conversor de nível lógico não sei o que é me desculpe a burrice 1ª vez que to tentando fazer! Se falar eu posso fazer com certeza! Obrigado por me responder!

      Excluir
    3. Eu comentei no inicio do texto, terceiro paragrafo sobre isso, tem dois links lá. No mercado livre você também encontra. É possível também fazer com dois resistores para cada porta, caso você tenha conhecimento de eletrônica.

      Excluir
    4. Entendi muito obrigado por tirar minhas duvida! Vou tentar aqui e posto os resultados Blz

      Excluir
  7. cara fiz tudo, agora só não reconhece meu controle pra x-box 360, só reconhece um teclado sem fio que tenho, e agora o que faço?

    ResponderExcluir
    Respostas
    1. Não entendi. Você quer configurar um controle de X360?

      Excluir
  8. Este comentário foi removido pelo autor.

    ResponderExcluir
  9. Eu fiz o procedimento o recalbox até reconhece a gpbio mas na hora de configurar o controle de snes só reconhece o botão b o que poderia ser?

    ResponderExcluir
    Respostas
    1. Olá! O controle é original? Se não for tente usar um conversor de nível logico, pode ser problema com as tensões 3.3V / 5V.

      Excluir
  10. Fala Ronaldinho vlw pelo tutorial, consegui fazer tudo cerro funcionou ok, porém quando eu reinício o módulo não sobe a cada boot, fica tudo certo editei rc.local usando o nano porém mesmo assim não sobe já fiz e refiz tudo umas 3X o pior é que se eu digitar o comando no prompt vai normalmente ele sobe o módulo, mas toda vez tenho que subir manualmente

    ResponderExcluir
    Respostas
    1. Consegui mas tive que colocar assim no rc.local antes do exit 0 e substituindo o X pelas gpio que escolhi

      (sudo modprobe gamecon_gpio_rpi map=x,x,x,x,x,x) &

      Excluir
    2. Bacana, que bom que conseguiu :)

      Excluir
  11. Alguém sabe dizer se os analógicos funcionam ligando o controle pelo GPIO???

    ResponderExcluir
  12. Boa noite.... Liguei 2 controles snes igualmente a você, mas não estou conseguindo ligar outros 2. Minha placa é mesma revisão que a sua. Quais portas preciso ligar o data do controle 3 e o data do controle 4? Só atualizei os drivers gamecom e já funcionaram eles 2 controles. Vou precisar configurar os outros 2, igual você fez com esses??

    ResponderExcluir
  13. Outra coisa... Como acesso esse nano para configurar? Pelo que entendi, vou precisar deixar os X, como X,X,1,1,1,1 para ele reconhecer o controle 3 na gpio 4 e controle 4 na gpio 7. Como ele já estava funcionando os outros 2, preciso atribuir portas ou deixo como X mesmo nas gpio 3 e 2?

    ResponderExcluir
    Respostas
    1. Olá Jorge, no seu caso o comando será sudo modprobe gamecon_gpio_rpi map=0,0,1,1,1,1
      As portas que você vai usar para os quatro controles serão: GPIO 2, GPIO 3, GPIO 4 e GPIO 7. Sobre o nano ele já está instalado, é um editor de texto para terminal, basta digitar conforme lá no texto.

      Excluir
    2. Então..... Vou ter de acessar pela rede mesmo? Pois queria acessar pelo próprio rpi. Meu dongle USB está travando ele e usar cabo de rede não é uma opção.

      Excluir
    3. Pode fazer direto por ele mesmo, aperte F4 ou no menu do Emulation Station peça pra sair. Se quiser voltar basta digitar emulationstation e enter.

      Excluir
    4. Na hora do comando de log, ele mostra 10 linhas e algumas mensagens estranhas que não consegui interpretar direito. Tem algum email que posso enviar as linhas desse log?

      Excluir
    5. Este comentário foi removido pelo autor.

      Excluir
    6. Segui seus passos nesse tutorial e não muda a quantidade de "controles detectados". Continua aparecendo apenas dois. Deixei com e sem os parênteses como você e um colega acima haviam sugerido. Mas nada mudou. Inclusive, deixei como 0,0,1,1,1 1 e 1,1,1,1,1,1 para ver se talvez não fosse erro das portas, mas nada mudou.

      Excluir
    7. Muito estranho. Agora que nem faço ideia do que possa ser. Eu quando testei foi com apenas um controle, com você detectou dois, não consigo entender porquê ele não detecta os outros dois.

      Excluir
    8. Tô pensando em pegar outro cartão de memória e fazer tudo do zero novamente, pra ver se não posso ter feito algo que deixou o sistema assim

      Excluir
    9. É uma boa mesmo. Você tentou mudar os controles de posição um com outro para ver se funciona?

      Excluir
    10. Já sim, só funciona os que ele diz reconhecer. Pois ele acusa os controles, mesmo sem estarem conectados. A porta gpio funciona como serial, se o driver está instalado e ativado, ele acusa que está conectado, mesmo não estando. Por isso que ele deveria reconhecer os 4, mas conectei e tentei configurar ignorando que ele não os via.

      Excluir
  14. Boa tarde Ronaldinho! É o seguinte eu fiz tudo como descrito To usando Rasp 3B! O problema acontece que eu configurei 2 controles Snes! Tenho 3 os 3 funcionam no 1º controle tudo ok! Mas o segundo controle não funciona na hora de configurar! Ele detecta os dois mas só um funciona os botões! Tipo o 2º controle mesmo estando detectado na hora de configurar nenhum botão funciona então To jogando só com um controle! Espero que você possa me ajudar de alguma forma! Desde já agradeço! E obrigado pelo tutorial me ajudou muito! Usei map=0,0,1,1,0,0 e estou usando este esquema se puder dar uma olhada
    https://s3-eu-west-1.amazonaws.com/forums.recalbox.com/2715aed4-f391-4e66-b940-64a157e2b7a6

    ResponderExcluir
    Respostas
    1. Olá! Pelo que vi de seu diagrama está tudo certo. Experimente inverter os controles para ter certeza que não é alguma incompatibilidade. E também trocar as portas, tipo usar GPIO 2, GPIO 3 com map=0,0,0,0,1,1

      Excluir

Postar um comentário