Close
0%
0%

microByte

OpenSource hand-held retro console which can emulate NES, GameBoy/GameBoy Color, Game Gear, and Sega MasterSystem

Public Chat
Similar projects worth following
MicroByte is a portable open-source retro-console with a colorful and sharp 1.3" IPS screen and powered with the ESP32 Wrover. The device can emulate NES, GameBoy/GameBoy Color, Game Gear, and Sega MasterSystem, with a battery life of up to 6/7 hours all and smaller than a GameBoy game cartridge!

Intro:

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:

  • NES.
  • GameBoy
  • GameBoy Color
  • Sega Master System
  • GameGear

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.

SPECS:

I'm going to split the specifications of the device into hardware and software to give more details of each one.

HARDWARE

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:

Firmware/PCB Design

Some photos of the board:

TOP View

BOTTOM View

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 »

  • Create your games with the Stage library and microPython

    Juan Flores03/11/2021 at 16:33 2 comments

    Hi!

    I think that the microByte can be an interesting tool to developed your games. So, a while ago a saw the Stage library for microPython and CircuitPython, I was amazed at how good it looks the demos.  

    I've "ported" the Stage library to the custom version of microPython that I'm working on, but with some improvements, for example, I've integrated the library on microPython.

    One of the advantages of this approach is that now I'm able to separate the rendering process and "paint" processes on differents cores and tasks, or use the ST7889 driver written on C, which uses the standard ESP-IDF SPI calls. All of this gives a huge improvement in performance.

    This is a pretty simple demo, but on the naked eye run very smooth:

    I'll continue working on the microPython custom version and Stage library because I think that it's possible to obtain very cool results.

  • microByte crowfunding campaign is live!

    Juan Flores01/31/2021 at 19:30 0 comments

    Hello guys, 

    I'm happy to announce that the campaign on CrowSupply just started!

    microByte | Crowd Supply

    The device is available in two different packs with 3 different colors and a translucent enclosure. 

    About the future updates, I'm working on add new emulators, and mainly I'm focused on developing an Arduino Library where you can easily use all the resources of the device and a port of microPython, which full access to the hardware.

    The interesting point is you can compile your binary on the PC, just copy to an SD card and execute it like an App, no more need to reflash the device.

    Anyways, I'll share all the project updates here and if you have any questions, please don't hesitate to ask me!

  • microByte will be on CrowSupply!

    Juan Flores01/19/2021 at 17:32 0 comments

    Hi!

    I pleased to announce that microByte will be available very very soon on CrowSupply for a crowdfunding campaign! 

    On the next link you can subscribe to know when the campaign will start:

    Email Signups | Crowd Supply

    If you like this project and want to support me, you could buy it, and you can choose from four different colors, or choose the basic one and print with your favorite philament! 

    During the campaign, I will release some major updates for the firmware and most important, and Arduino Library which will allow you to create easily your sketches or your games for microByte.

    When at the start of the campaign I will write another log update.

  • SNES emulator port for microBYTE!

    Juan Flores01/18/2021 at 20:17 0 comments

    Hi!

    In this new log, I want to show you an interesting experiment the SNES9X port for the microByte!

    I considered an experiment because the performance is not good, but you can (more or less) play some games. The FPS counter it shows between 25~30 FPS, but due to it's implemented frameskip of 4 frames, the image is not smooth.

    Anyways is more a proof of concept to show the usage of the SNES layout, but I hope to improve the performance in a future release.

    The original port for ESP32, was performed by Ducalex(ducalex/snes9x-esp32: Snes9x port to the ODROID-GO (ESP32) (github.com)) for the Odroid-Go, but I've improved the performance and ported to the microByte.

  • DOOM port for microBYTE

    Juan Flores01/01/2021 at 19:26 0 comments

    Hi!

    I did update the project for a long time because I was improving the emulator's performance, now GameGear can run up to 70 FPS! 

    But I will show in a future update with all the details. By now I want to show a port of DOOM to the microBYTE. It runs at 40~30 FPS and totally playable, even has sound. The save functionality is not fully functional but I hope to implement it soon.

    Is like a tradition that DOOM must run on every electronic device with a screen.

    You can see in the next video:

    You can find the source code here:

    microByte_external_apps/Doom at main · jfm92/microByte_external_apps (github.com)

    The initial port for ESP32 was done by Espressif, but this is a modified version for this specific device.

View all 5 project logs

Enjoy this project?

Share

Discussions

deʃhipu wrote 07/21/2021 at 11:45 point

Hi, I just received my crowdsupply unit,  and I can see that there must have been a lot of struggle. It would be great if you could write a post-mortem about this, once you have time on your hands.

  Are you sure? yes | no

Makerfabs wrote 03/18/2021 at 07:06 point

tiny and cute..how you will deal with the case?

  Are you sure? yes | no

Juan Flores wrote 03/20/2021 at 09:31 point

Hi!

This is an interesting question because being honest is the most challenging part of this project. Basically, I'm manufacturing it with silicone molds where I inject Epoxy resin. This resin when is "cured" has mechanical properties similar to the ABS plastic. It's a little slow process because it can take from 8 hours to 24 hours to be hard, but if you have a few silicone molds, the process speeds up and most important you get repetability. 

I think it's a good and way cheaper alternative to injection molding for medium/low batch. 

  Are you sure? yes | no

marazm wrote 01/19/2021 at 21:09 point

fpga in 2 version ;-)

chinese emulator work 3h This device work week?

  Are you sure? yes | no

Electromaker wrote 01/14/2021 at 11:06 point

There is a lot that we find interesting about this project! You can listen to our thoughts here:

https://youtu.be/wqk3mKFdxo0?t=431

  Are you sure? yes | no

Juan Flores wrote 01/18/2021 at 20:26 point

Hi Electromaker!

First, thank you so much for talking about this project on your channel I'm very pleased. 

Regarding your doubts about the Arduino IDE compatibility, maybe is not properly written on the pre-campaign page. But I'll try to explain.

At this moment, I'm developing a library for the Arduino IDE to develop software for the microBYTE, the idea is to give a library that gives you full access to the hardware without struggle with external libraries.

You can flash the device like any other ESP32 board, but the interesting point(almost from my point of view) is that you can compile your sketch as usual, copy the binary file to the SD card and execute it like an application. When you restart the device, it will boot up again the "main" firmware, so you can have multiple binary sketches and execute it whenever you want. 

Soon I will do a tutorial of how to do Arduino Games for the microByte. 

By the way, sorry for the delay in answering you, but I didn't receive the notification of the commentary. 

  Are you sure? yes | no

Shuesh wrote 12/11/2020 at 19:44 point

Wow, incredible design--it looks smooth and honestly pretty professional!

I have three questions for you if you don't mind answering them:

1) I'm fairly new to the engineering world and don't have a whole lot of experience with component selection. What were some of the criteria you used in choosing parts? Was there something you were specifically, did you base your design off of others, etc?

2) Not including the 3D printed casing, what was the price of the project?

3) Would it be possible to hand-solder these, or did you reflow/get them done in-house at the PCB manufacturer?

Again, looks like some incredible work!

  Are you sure? yes | no

Juan Flores wrote 12/14/2020 at 23:31 point

Hello @Shuesh !

Thank you!

I'll try to answer your questions!

1) Well, It's difficult to explain the process that I followed because the first idea was pretty simple in comparison with the final result. Basically, the idea was to create a keychain that could execute GameBoy Color games running from the internal flash memory, so it wasn't a planned roadmap. 

Basically, I've tried to use components that I've already known and the package is available on SMD. For example, the RS232 to USB adapter is a CH340 widely use on Arduino clones, so I thought that it was a good idea to add if they were available on the SMD package. On the other hand, It was required a GPIO mux to avoid a mesh on the PCB, so I went to Digikey looking for GPIO mux's and my criteria to choose one was:

- Use I2C to communicate.

- Available on SMD package.

- As cheap as possible.

I'm sorry if I'm summarizing too much, but it can be very wide to explain. But basically, I follow the next:

- Is it an already known component? (Use in a previous design)

- Fit the requirements of the project, in terms of size, communication bus, and power?

- The price is good? (You can find a wide disparity in price for the equivalent component)

- Is already use in a public design? This gives you the security that the schematics provided by the manufacture are fine.

2) The price depends heavily on the quantity that you want to manufacture but for example, for just one unit, the price can be around 30/40€ but for 500 units the price will drop to ~15€. This previous heavily depends on where you live, because most of the components are from China and here in Spain, the importation taxes for products outside E.U. can be very high.

3) Yes, you can solder by hand! Actually, the PCB photo has been solder by hand, because the assembly price for low quantity is quite high. Is not easy to solder by hand, but it's possible. If you can use a reflow oven or even a reflow gun, it will simplify dramatically the assembly difficulty. 

Thank you for being interested in the project! And if you have any questions, please ask me.

  Are you sure? yes | no

Shuesh wrote 12/15/2020 at 03:44 point

@Juan Flores Thanks so much for the detailed response! It definitely helps clarify how the project got to where it is now. I'm looking forward to seeing if/how this progresses as well as any other projects you decide to take up!

  Are you sure? yes | no

Juan Flores wrote 12/11/2020 at 09:38 point

Hello @Christopher Erickson , sorry for the delay in the answer, but I was very busy. And don't worry about your previous question.

Well, I suppose that depends a little bit on your hand size, but for example, I have medium-size hands and I can play for a pair of hours comfortably. 

The buttons are very similar to what you can find on a Nintendo Switch in terms of size and distance between the buttons. Also is quite similar to play with this device:

Amazon.com: 8Bitdo Zero 2 Bluetooth Gamepad(Turquoise Edition) - Nintendo Switch: Video Games

Regarding the back part arc, is quite easy to obtain. For example, this case was printed with an Ender 3 with a 0.1mm layer high in horizontal orientation and 20% support (I will add to the repository the instructions to print the case). By default the result that you will obtain is fine, but there are some "steps" on the print, so with a little bit of sand work and paint, you can achieve the same result. Or if you print with an SLA print, you don't need to sand anything. 

Thank you! 

  Are you sure? yes | no

Christopher Erickson wrote 12/07/2020 at 19:56 point

I really dig your case design. What's the performance like in the real world? Also have considered a 'cartridge' system using a secondary microSD?

  Are you sure? yes | no

Juan Flores wrote 12/08/2020 at 14:25 point

Hello Christopher,  

Do you mean real world performance, impacts resitance, water or dust protection? 

If so, I've tested with PLA, PTEG, and SLA resin. It has a huge dependency on the material that you made the case, but with PLA and PTEG, it can resist quite aggressive impacts without damaging the electronics and the case itself. 

About the water and dust protection, it doesn't have any protection. So, it's better to avoid water contact.

About the second microSD card slot to have a kind of "cartridge" system, it possible to add because it works via SPI bus, but it could be very challenging to add the second slot because the free space on the PCB is very limited.

A possible solution is to do a huge modification on the FW to avoid the graphical interface execution and run directly the ROM from the SD card. All the firmware runs on internal flash memory, so it shouldn't be problematic.

  Are you sure? yes | no

Christopher Erickson wrote 12/08/2020 at 21:24 point

Apologies, probably should have worded my questions better.

How is like to play? Cramped and uncomfortable? Does it fit the niche it was built for? (I.E. A quick game on the bus)

Maybe I am a little wet behind the ear when it comes to 3D printing, but how did you get that wonderful smooth arc on the back?

The extra slot issue makes sense. Very good job on the project :)
Reminds me of this project: https://www.crackedconsole.com/community/raspberrypi-gaming/pinkypi-pro-build-log/


  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates