$ 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:
- 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:
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 | R$ 42 | |
1 | Display 2,4" TFT 320x240 | R$ 55 | |
1 | Módulo Amplificador PAM8403 | R$ 5 | |
1 | Módulo Carregador de Bateria de Lítio TP4056 | R$ 5 | |
1 | Mini Alto Falante 2W 8 Ohms | R$ 8 | |
1 | Bateria de Litio >600mAh | R$ 35 | |
10 | Push Button | R$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:
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.
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:
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.
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
TFT | ESP32 |
---|---|
DC | 21 |
CS | 5 |
BKL | 4 |
MOSI | 23 |
MISO | 19 |
SCLK | 18 |
RST | EN |
- SD Card
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.
O resultado pode ser verificado na imagem abaixo: