Back in February, I've received an ST7789 display module, the image and color quality was impressive despite the small size, so one idea comes to mind...
What if I build a keychain that you can play Pokemon?
At that moment born the primitive idea of microByte. After more than seven months of development, the idea of keychain evolved to a fully functional hand-held console that can emulate:
- GameBoy Color
- Sega Master System
All of this in an inferior size to an original GameBoy cartridge and most important you can perfectly read the texts on the game. The dimensions are: 78x17x40 mm
(The image quality is better on the reality, but it's difficult to capture with the camera)
On the other hand, you might wonder why add SNES gamepad layout (Direction buttons, 4 action buttons, Start, Select, L, and R trigger.) if it only able to emulate 8Bit games?
Well, yes at this moment it's only able to run 8Bit games, but doing a deep search I've found that there are some early ports of SNES emulator and SCRUMV to the ESP32. So, it was clear, this device needs a full SNES gamepad layout with future updates in mind.
Finally, apart from gaming, I think that this device can be a very useful tool to develop ESP32 projects, because you can run Arduino Sketch and/or ESP-IDF project binary from the SD Card like an "App", without deleting the main firmware. I will give more details on further points.
Here you can find a video summary.
I'm going to split the specifications of the device into hardware and software to give more details of each one.
First, we will start with a general list of hardware characteristics:
- ESP32 WROVER E (16MB)
- 8MB of RAM
- 16MB of flash
- ST7789 IPS 1.3" display with a resolution of 240x240 pixels
- micro-SD card slot.
- On-Board speaker with MAX98357AETE+T I2S audio amplifier.
- 13 onboard buttons connected to TCA9555RTWR mux.
- 8 Inductive buttons with a rubber membrane. (Direction and action buttons)
- 3 done switch buttons. (Start, Select, and Menu)
- 2 horizontal switch button. (Left and Right trigger).
- Charge protection battery circuit.
- 500mAh battery (This gives an autonomy of 6/7 hours playing).
- USB-C connector.
In the next repo you can find a KiCad Project with the schematics and PCB design of the microByte project:
Some photos of the board:
I was thinking to give headphones support through the USB-C connector, but I discarded by now the idea, because, I didn't find too much information on an implementation standard. It looks that each manufacturer implements differently the audio through USB-C. So in this PCB version, the connector only works to charge the device and connect to the serial console and see the debug log.
As you can see in the second photo, I use a standard PH 2.0 connector, to attach the battery. This gives you the chance to use a higher capacity battery. If you want to use a lower capacity, it's important to change the resistor R2 to use an appropriate value. This resistor sets the current charge configuration for the TP4056 chip. If you don't change the value of the R2 resistor, it could produce damage to the Li-Po battery. Finally, regarding the power management, the device has a step-up converter which warranty a constant 3.3v output, this solution avoid dimming on the screen and unstable behavior when the battery is dying.
The audio amplifier is a MAX98357AETE+T. This driver transforms from I2S to ADC, it can be configured to work with mono/stereo sound and the gain is configurable. I set by default at 9dB of gain. I think that it's fine to avoid damage to the speaker. Regarding the speaker, it's very difficult to find an affordable SMD speaker that can fit the PCB space, so I've found a buzzer with a good frequency range, which fit properly the PCB size.
The audio quality is not the best, some audio tones are lost, but I'm generally the sound quality is pretty decent. You can...Read more »