Montar um videogame portátil com o formato de um gameboy advance utilizando um Raspberry Pi Zero 2W.
- Raspberry Pi Zero 2W
- Gameboy Advance Case
- Bateria de lítio (1000mAh 3.7v)
- Botão de ligar/desligar (power switch)
- Módulo de carregamento de bateria (5v)
- Entrada USB tipo C
- Tela LCD TFT 2.8'' (240x320)
- Alto falante
- Amplificador de alto falante I²S
- Conector de fone de ouvido
O sistema operacional usado será o retropie. Siga a instalação normalmente com base no tutorial disponibilizado pelo site.
Adicione a configuração de tela no arquivo /boot/config.txt:
-hdmi_group=2
+hdmi_group=2
+hdmi_mode=87
+hdmi_cvt=320 240 60 1 0 0 0 # Configuração para tela 320x240
+hdmi_force_hotplug=1
-dtparam=i2c_arm=on
+#dtparam=i2c_arm=on
-dtparam=i2s_arm=on
+#dtparam=i2s_arm=on
-dtparam=spi=on
+#dtparam=spi=onInstalação do driver:
Warning
Nesse exemplo GPIO5 e GPIO6 serão usados para comunicação com a tela LCD. Mude o número dos gpio se a sua configuração for diferente.
# Instalação
sudo apt install cmake
cd ~
git clone https://github.com/juj/fbcp-ili9341.git
cd fbcp-ili9341
mkdir build
cd build
cmake -DILI9341=ON -DGPIO_TFT_DATA_CONTROL=5 -DGPIO_TFT_RESET_PIN=6 -DSPI_BUS_CLOCK_DIVISOR=6 -DSTATISTICS=0 -USE_DMA_TRANSFERS=ON ..
make -j
# Teste a tela
sudo ./fbcp-ili9341Para deixar a tela sempre ligada, adicione a seguinte linha no /etc/rc.local:
# Inicializar driver de tela
sudo /home/pi/fbcp-ili9341/build/fbcp-ili9341 &Adicione a configuração de inicialização de áudio no arquivo /boot/config.txt:
-dtparam=audio=on
+#dtparam=audio=on
+dtoverlay=hifiberry-dac
+dtoverlay=i2s-mmapCrie o arquivo /etc/asound.conf com a configuração do driver de áudio:
pcm.hifiberry {
type hw card 0
}
pcm.dmixer {
type dmix
ipc_key 1024
ipc_perm 0666
slave {
pcm "hifiberry"
period_time 0
period_size 1024
buffer_size 8192
rate 44100
channels 2
}
}
ctl.dmixer {
type hw card 0
}
pcm.softvol {
type softvol
slave.pcm "dmixer"
control.name "PCM"
control.card 0
}
ctl.softvol {
type hw card 0
}
pcm.!default {
type plug
slave.pcm "softvol"
}Teste o áudio com o comando:
speaker-test -c2 --test=wav -w /usr/share/sounds/alsa/Front_Center.wavConfigurações de áudio no sistema RetroPie:
- Audio card:
DEFAULT - Audio device:
PCM - OMX player audio device:
BOTH
Usando o comando gpio config é possível configurar os botões do controle. Segue lista de botões disponíveis de acordo com o circuito:
- Dpad UP (
pin 5) - Dpad DOWN (
pin 8) - Dpad LEFT (
pin 3) - Dpad RIGHT (
pin 10) - Start (
pin 13) - Select (
pin 15) - A (
pin 36) - B (
pin 37) - Left Trigger 1 (
pin 11) - Right Trigger 1 (
pin 33)
Para configuração de áudio, devemos criar dois comandos no GPIOnext com gpionext config:
Aumentar vôlume:
/usr/bin/amixer -q -c 0 sset PCM 5%+Diminuir vôlume:
/usr/bin/amixer -q -c 0 sset PCM 5%-Nesse exemplo, os botões para as ações serão:
- Select (
pin 15) + RIGHT (pin 10): Aumentar volume - Select (
pin 15) + LEFT (pin 3): Diminuir volume
Se a tela tem a opção de controle de brilho (backlight) é possível configurar um GPIO para:
- Durante iniciação de sistema ligar brilho
- Durante desligamento de sistema desligar o brilho
- Diminuir brilho em caso de inatividade
Warning
Nesse exemplo serão usados para ajuste de brilho da tela LCD o GPIO12. Mude o número do gpio se a sua configuração for diferente.
- Instale a biblioteca WiringPi:
# Instalação da biblioteca
cd ~
git clone https://github.com/WiringPi/WiringPi.git
cd WiringPi
sudo ./build
# Teste da biblioteca
gpio -v- Crie o script de ajuste de brilho:
O caminho será home/pi/scripts/screen.py e o conteúdo deve ser o mesmo do arquivo extras/screen.py
- Adicione o arquivo que salvará o valor de brilho no sistema:
echo "1024" > /home/pi/scripts/screen.log- Ajuste o arquivo de
/etc/rc.localpara inicializar as configurações de brilho:
# Inicializar driver de tela
sudo /home/pi/fbcp-ili9341/build/fbcp-ili9341 &
+#Inicializar brilho de tela
+python3 /home/pi/scripts/screen.py -q init- Adicione os comandos de ajuste de brilho no GPIOnext:
gpionext configAumentar brilho:
python3 /home/pi/scripts/screen.py -q incrementDiminuir brilho:
python3 /home/pi/scripts/screen.py -q decrementNesse exemplo, os botões para as ações serão:
- Select (
pin 15) + UP (pin 5): Aumentar brilho - Select (
pin 15) + DOWN (pin 8): Diminuir brilho
- (OPCIONAL) Adicione as seguintes linhas no arquivo
/boot/config.txtdesligar o brilho de tela ao desligar o console:
# Setup backlight control pin to output mode with LOW value
dtoverlay=gpio-poweroff,active_low,gpiopin=12,timeout_ms=100
gpio=12=op,dl,pnÉ possível que os comandos já estejam mapeados para outra ação no retroach, se for o caso, edite o comando conflitante no arquivo
/opt/retropie/configs/all/retroarch-joypads/GPIOnext Joypad 1.cfg
Etapas para finalização do projeto:
- Configuração de tela LCD
- Configuração de energia
- Conectar entrada USB para carregamento de bateria
- Conectar botão de ligar/desligar
- Conectar bateria de lítio ao circuito
- Configuração de som
- Habilitar som do alto falante
- Habilitar som do conector de fone
- Configurar troca de fonte de som de acordo com fone conectado
- Configurar controle de volume
- Configuração dos controles
- Criar circuito dos botões e Dpad
- Configurar controle de som
- Configurar controle de brilho
