$
pwd

Índice

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:

Hardware:

Nomenclatura dos Componentes:

Chaves e Switches:

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

Dimensões:

Projeto:


ESPBoy BOM

Quantity Component Image Price
1 ESP32 DevKit drawing R$ 42
1 Display 2,4" TFT 320x240 drawing R$ 55
1 Módulo Amplificador PAM8403 drawing R$ 5
1 Módulo Carregador de Bateria de Lítio TP4056 drawing R$ 5
1 Mini Alto Falante 2W 8 Ohms drawing R$ 8
1 Bateria de Litio >600mAh drawing R$ 35
10 Push Button drawing R$3

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

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
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:

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
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.

TFT ESP32
DC 21
CS 5
BKL 4
MOSI 23
MISO 19
SCLK 18
RST EN
SD ESP32
MISO 19
MOSI 23
CLK 18
CS 22

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
cnc

O resultado pode ser verificado na imagem abaixo:

ESPBoy-PCB
ESPBoy-PCB