What?
I recently got my hands on an Odroid Go Game Kit.
It's an amazing piece of tech that have these features in its small formfactor & affordable price:
MCU | Custom ESP32-WROVER(16 MB Flash Memory) | |
CPU & RAM | 80MHz - 240MHz(Adjustable), 4MB PSRAM | |
Wi-Fi | 802.11 b/g/n 2.4GHz - 2.5GHz | |
Bluetooth | Bluetooth v4.2 BR/EDR, BLE | |
Display | 2.4inch 320×240 TFT LCD (SPI interface) | |
Battery | Li-Polymer 3.7V/1200mAh, Up to 10 hours of continuous game playing time | |
Speaker | 0.5Watt 8Ω Mono | |
Micro SD card slot | 20Mhz SPI interface | |
Micro USB port | Battery charging(500mA) and USB-UART data communication | |
Expansion Port | 10Pin port(I2C, GPIO, IRQ at 3.3Volt) | |
Input Buttons | Menu, Volume, Select, Start, A, B, Direction Pad | |
Power consumption | Game emulation: 100~115mA, Sleep mode: 5.3~5.8mA, Power off: 0.1mA |
As a quick project I ported the (in)famous 2048 game to it: Check the repository: 0xbsec/odroid-go-2048
Where to Start
- Setup Arduino for Odroid
- Hello World Example
Setup Arduino software to support Odroid GO
I used nix-shell -p arduino
to download and setup the IDE.
Odroid Go uses the ESP32 chip. To add it to the Arduino software: Nagivate to File
>
Preferences
> Addtional Boards Manager Url.
Add add this url: https://dl.espressif.com/dl/package_esp32_index.json
(mirrored here).
Navigate to Tools
> Boards
> Boards Manager
> Search for: ESP32
and install it.
Hello World
Load this example:
#include <odroid_go.h>
void setup() {
GO.begin();
GO.lcd.println("Hello, ODROID-GO");
}
void loop() {
}
If everything works as expected you should see a hello message.
Porting 2048 game
The game code is similar to the above code with some fancy additions and multiplications. You can check it here.
At first I faced an issue with screen flickering while updating the state. Turns out I was clearning the screen &
redrawing multiple times before updating the state.
Other than this issue, everything else went smoothly.
Note: I had to reflash the board to be able to boot back into the original firmware:
esptool.py write_flash 0 odroid-go-firmware-20181001.img
Game Control
- Restart: B
- Undo: A
- Brightness control: Start + Up/Down
- Darkmode switch: Start + left
Excert from the control code: (full code here)
// undo: A
if (GO.BtnA.wasPressed()) {
d.undo();
return;
}
// restart: B
if (GO.BtnB.wasPressed()) {
d.init();
return;
}
// UP
if (GO.JOY_Y.wasAxisPressed() == 2) {
d.log("u");
Move::up();
d.tick();
return;
}
Read more
Check the Odroid Go Wiki for more info.