skip to content
Calebe94

ESPBoy: Um Gameboy com o ESP32

/

Especificação:

Desenvolver um console portátil utilizando o microcontrolador ESP32 para ser apresentado na Mostra de Profissões da Universidade Positivo no dia 1.º de agosto de 2018.

O console deverá conseguir emular jogos da (4.º) geração de consoles portáteis como o Gameboy e Game Gear e também consoles da (3.º) geração como Master System e NES. Sendo que, console seja capaz de rodar pelo menos 1(um) jogo de qualquer um dos consoles acima durante a apresentação, ou seja, não há a necessidade de implementar todos os emuladores e nem a capacidade de inserir diversos jogos no mesmo dispositivo.

Para o desenvolvimento do ESPBoy, iremos utilizar como base o projeto da empresa Hardkernel chamado ODROID-GO. O ODROID-GO é um projeto desenvolvido para a comemoração do 10.º aniversario do ODROID que consiste em um dispositivo capaz de emular jogos dos consoles portáteis de 4.ª geração e consoles de mesa da 3.ª geração e capaz também de reproduzir os sons dos games e ler os jogos armazenados em um cartão SD. Além da emulação, o dispositivo pode ser programado utilizando a IDE do Arduino.

Software:

Downloads:

Para baixar os jogos, ou melhor, os melhores jogos das plataformas suportadas pelo ESPBoy podemos utilizar os links a seguir:

  • Archieve.org - Para realizar o download precisa especificar o arquivo na (URL)
  • Zach-Morris dat_files - Nesse repositório o Zach-Morris fez um compilado dos melhores jogos por plataforma em arquivos .xml.

Hardware:

Nomenclatura dos Componentes:

Chaves e Switches:

PrefixoNome
Key 1UP
SW 1UP
Key 3DOWN
SW3DOWN
Key 2RIGHT
SW 2RIGHT
Key 4LEFT
SW 4LEFT
KEY 8A
SW 5A
Key 7B
SW 6B
KEY 9MENU
KEY 5SELECT
KEY 6START
KEY 10VOL +
KEY 11VOL -

Dimensões:

Projeto:


ESPBoy BOM

QuantityComponentImagePrice
1ESP32 DevKitdrawingR$ 42
1Display 2,4” TFT 320x240drawingR$ 55
1Módulo Amplificador PAM8403drawingR$ 5
1Módulo Carregador de Bateria de Lítio TP4056drawingR$ 5
1Mini Alto Falante 2W 8 OhmsdrawingR$ 8
1Bateria de Litio >600mAhdrawingR$ 35
10Push ButtondrawingR$3
  • TOTAL: R$152

LOGS:

DIA 1:

Clonei os Seguintes repositórios:

Fiz o teste do ESP32 Game Playes with NES, porém, nos primeiros testes o ESP32 informava no log que havia pouca RAM disponível, e o ESP32 reiniciava a todo momento. Assistindo ao vídeo e vi ser recomendado desativar ao módulo WIFI no menuconfig.

Resolvi testar o porte “oficial” realizado pela empresa espressif o esp32-nesemu. Ao iniciar o programa(make flash monitor), o log não informava nenhum erro. Então resolvi gravar a ROM na memória Flash do ESP32 utilizando o script que veio com o projeto chamado flashrom.sh (é… o nome é sujestivo). Para tal, eu tive que editar o script para informar a porta serial e o arquivo .nes para gravar no endereço 0x100000 da (FLASH). Ao terminar a gravação eu reiniciei o programa, dando o comando make monitor, e voilá! O ESP32 “piscava” com a imagem de abertura do Super Mário. E o LOG informava estar tudo correto. Porém, a imagem não ficava fixa no jogo, ele desligava a todo momento como se estivesse reiniciando.

Depois de muito ler e estudar o projeto eu percebi haver a opção de inverter o backlight. E esse foi o grand finalle do 1.º dia de execução do projeto. O resultado foi esse:

ESPBoy

ESPBoy-GIF

DIA 2:

Realizei alguns testes com o emulador, gravei ROM’s diferentes na memória e modifiquei o script para permitir a passagem da porta serial como argumento.

ESPBoy-Teste2

Em seguida montei o circuito em uma protoboard para realizar alguns testes com o circuito. Montei o Joypad também, e para fazer funcionar eu tive que modificar as funções psxcontrollerInit() e psxReadInput() no arquivo psxcontroller.c. Precisei fazer a função psxcontrollerInit() retornar um inteiro com os bits com os status dos botões da seguinte forma:

  • BIT 0: SELECT;
  • BIT 1: 1;
  • BIT 2: 1;
  • BIT 3: START;
  • BIT 4: UP;
  • BIT 5: RIGHT;
  • BIT 6: DOWN;
  • BIT 7: LEFT;
  • BIT 8: 1;
  • BIT 9: 1;
  • BIT 10: 1;
  • BIT 11: 1;
  • BIT 12: SOFT_RESET;
  • BIT 13: A;
  • BIT 14: B;
  • BIT 15: HARD_RESET;

Eu não encontrei referências para o uso dos bits 1, 2, 8, 9, 10, 11, 12 e 15. Mas a emulação funcionou muito bem apenas com os demais bits.

DIA 3:

Fiz uma pequena modificação no joypad para fins de liberar algumas GPIOs para inserir botões de volume(aumentar e diminuir) e um botão de menu/reset. A modificação foi simples, ao invés de eu utilizar 1 GPIO para cada botão direcional, eu usei 2 linhas analógicas. Cada linha analógica é responsável por ler dois botões através de um divisor de tensão. O conceito pode ser visualizado na imagem abaixo:

Reading Keys by Analog lines

Na sequência inseri um buzzer no terminal D26 do ESP32 para experimentar a saída de áudio. A qualidade de som não é das melhores e falta um amplificador de áudio para a saída do som, e também o buzzer não foi feito para reproduzir tons polifônicos. O resultado pode ser observado no vídeo abaixo.

ESPBoy - Teste 2

DIA 4:

Teste com o VOLUME… sem sucesso.

DIA 5:

Teste com o Volume, um pouco de sucesso, agora consigo pelo menos alterar de leve o volume, nada considerável. A qualidade do som ainda é um problema. Mas só de conseguir alterar o volume já está ótimo.

DIA 6:

Alterar os terminais e criar o diagrama esquemático para ser confeccionado a placa de circuito impresso.

Tentatei inserir um circuito para a detecção automática do fone de ouvido e assim desligar o alto-falante.

Terminais Utilizados no projeto.

  • Display
TFTESP32
DC21
CS5
BKL4
MOSI23
MISO19
SCLK18
RSTEN
  • SD Card
SDESP32
MISO19
MOSI23
CLK18
CS22

Dia 6:

Nesse dia foi iniciado o desenho do diagrama esquemático e da placa de circuito impresso. Para isso, foi utilizado a plataforma de desenvolvimento online do EasyEDA.

Dia 7:

Para o desenvolvimento da placa de circuito impresso irei considerar as dimensões do GameBoy/GameBoy Color e GameBoy Advance. Como será confeccionado o modelo 3D do gabinete eu pretendo utilizar como base o layout dos GameBoys, e a placa deverá ter as dimensões e o layout do Gameboy. Os layouts e dimensões podem ser encontrados abaixo:

GameBoy/GameBoy Color

GameBoy Advance

Dia 8:

Foi utilizado o software de desenvolvimento de circuitos e placas de circuito impresso online EasyEDA para o desenvolvimento do diagrama esquemático e da placa de circuito impresso do ESPBoy. E para a confecção da mesma foi utilizada uma máquina CNC.

cnc

O resultado pode ser verificado na imagem abaixo:

ESPBoy-PCB