colourful words and phrases

techy tangents and general life chatter from a tired sysadmin

Thoughts on the ODROID Go series

Thoughts Programming Hardware Gaming Emulation Embedded

For reasons of “push button, receive serotonin and electronic gubbins”, I have both the original ODROID Go and the newer Go Advance. I’ll try to give a rundown of the two, my thoughts on the final assembled kit, the modifications I’ve made, and the potential future for them.

The ODROID Go

This was an odd one when it first dropped. Intended as a product to celebrate the 10th anniversary of ODROID/HardKernel, this appears to be the one and only product released by them which..doesn’t run Linux.

It’s a neat little kit which, when assembled, roughly resembles the GameBoy Colour. It has an LCD screen, mono speaker, D-pad, A and B buttons, four buttons below the LCD, MicroUSB port for charging, and a 10-pin header at the top for hardware hacking.

As an added nicety, it also has that toggle switch for power that the original GameBoys had. For storage, it features a tiny MicroSD card slot on the back, near the side, which is cleverly integrated into the chassis.

Where it really differs is the brains of the whole thing. Unlike seemingly every single other ODROID product, the Go is based on an ESP32-WROVER microcontroller from Espressif, featuring a 16MB EEPROM, 4MB of PSRAM, WiFi a/b/g/n 2.4GHz, and Bluetooth 4.2+LE. The MCU itself runs at between 80MHz and 240MHz, is dual-core, and has a third core for low-power operation.

The MicroUSB port connects to a CP2102 USB-to-UART IC, providing serial access to the ESP32 itself, useful for updating the bootloader, or for programming and debugging.

The ODROID Go Advance

Seemingly spurred on by the success of the original Go, the Go Advance was released. Bearing a passing resemblance to the GameBoy Micro (due to the rectangular shape), the Go Advance features a full Rockchip ARM SoC, running at 1.3GHz, accompanied by 1GB of LPDDR3 RAM. Still featuring a MicroSD card slot as the primary storage, and a 16MB EEPROM internally, it now runs full-fat Linux, enabling a whole host of emulators (and, of course, other things).

The MicroUSB port has been eschewed for a USB-C port (on the “Black Edition” revised version, the original release featured a barrel jack for charging). A USB2.0 port is present, and the UART is no longer exposed over USB, but instead is a dedicated internal port. The four buttons below the LCD are now six buttons, and the A & B buttons now have X & Y counterparts. There are now shoulder buttons (L1 and R1, the “Black Edition” added L2 and R2), and a left analogue stick.

At launch, it didn’t include WiFi, but this is another omission addressed by the “Black Edition” variant, which includes 2.4GHz WiFi and Bluetooth 4.2+LE powered by the single-core variant of the module powering the whole original ODROID Go – the ESP32-WROVER-S2.

My thoughts – the Go

It’s definitely a weird one. It stands out as the only device from ODROID to not have a processor capable of running a full OS, and stands out as one of only a handful (ha!) of retrogaming-oriented handhelds to use a microcontroller instead of a proper ARM SoC. Though it’s definitely not alone in the category, it’s.. a very small category.

Even the older retrogaming handhelds were based on some variant of Linux, running on a full ARM SoC. Heck, the 2009 GP2x Wiz (and its mid-2010 successor, the Caanoo) had a 533MHz processor. The Wiz had 64MB of RAM, and the Caanoo doubled that to 128MB. To use a microcontroller with massively tighter constraints than even these old handhelds, is definitely a weird choice.

So, do I think the Go is dead in the water? A waste of money?

Absolutely not. Despite its limited set of available emulators, it’s a fantastic device. It will never be the “perfect” device, despite how well-designed it is, but it doesn’t need to be. The use of the ESP32 as the brains of the operation, provides a great way to get into programming. You can run plenty of older games on it, but when you get bored? You can start making your own, way more easily than on a Linux-based system.

You can write software for it in C (using the Arduino IDE) or Python (using MicroPython and something such as the Mu editor). It’s the perfect combination of fun and hackable!

As an emulator, it runs very nicely using the RetroESP32 firmware, handling GB/GBC games smoothly. As a programmable device, it’s a lot of fun.

..and the Go Advance

So the Go Advance came along, and answered everyone’s prayers by including a full-fat ARM SoC and a tasty chunk of RAM, running Linux, and supporting a wider range of emulators. It had a couple of weird omissions for a new release of a device like it (USB-C and WiFi) but these were, as mentioned above, addressed in the “Black Edition” variant.

It’s fantastic from a hardware perspective, and with a faster SoC and more RAM it’d be close to perfect, but I have a couple of gripes with it that concern the physical design of the chassis.

First, the rectangular design. The edges are curved to improve comfort, but it would have benefited greatly from borrowing more of the physical design from its namesake, the GameBoy Advance. The internal board could definitely be trimmed at the corners without issue, and the GBA’s curved design would’ve fit perfectly.

Next, the buttons. They’re not super bad, and are perfectly usable, but (as a couple have noted) the shoulder buttons could definitely use springs beneath them. I get why this wasn’t included; it’s a fiddly kit to put together as-is, so putting springs in would serve to frustrate more, but it would’ve been a nice option. The buttons below the LCD, however, are.. squishy. Way too squishy. They don’t spring back quickly, and they’re way too rubbery.

Possibly the biggest gripe I have is with the analogue stick. The one included in the kit is incredibly uncomfortable, has sharp edges, and is just a smidge too small to feel right in the hand. It can be replaced with an analogue stick from the PlayStation Vita, but it would’ve been nice to have a better stick as standard. I have some theories that the Nintendo Switch analogue sticks could work as a replacement as well, but these are way more difficult.

The final, though more minor, gripe I have, is with the mechanical tolerances of the whole thing. The screen flexes when you apply any pressure to the areas surrounding it (not on it, but near it), such as if you press down on the plastic while pressing the right D-pad button. When assembling the unit, significant force must be used to “snap in” the clips that attach the front and back of the chassis, otherwise there will just be parts on the edges that bulge out uncomfortable.

So what would I change? Honestly, I think the biggest benefits would be in swapping the mono speaker out for two smaller speakers flanking the LCD near the top, and use the blank space previously occupied by the speaker, to instead have a right analogue stick. I’d also swap out the analogue stick currently in use, for the analogue stick used by the Nintendo Switch and the 8BitDo SN30 Pro+. These are slightly larger, but feel way better in the hand, and they click in, providing L3 and R3. I’m not sure how I’d address the not-great function buttons below the LCD. Finally, I’d add light pipes inside the chassis, so that the LEDs visible through the ventilation grille on the back can be seen from the front or top of the unit instead.

Final thoughts

So what would I recommend? It depends. Do you want something that you can have a lot of fun playing games on, but want to learn on as well? Get the ODROID Go. The ESP32 is a brilliant platform for getting to grips with programming devices. Do you want to just play a whole bunch of fun games? Get the Go Advance. It runs Dreamcast and PS1 games great, and it’ll take the fancier MicroSD cards with higher speeds and capacities.