Yumo Roulette
Watch the full build on YouTube channel:
https://www.youtube.com/watch?v=qcGHcUHoq24&t
https://www.youtube.com/@YumoBuilds
Yumo Roulette is a spinning desk gadget built around an ESP32 and six round GC9A01 displays. Each screen shows something different: a photo slideshow from an SD card, live YouTube stats, TikTok stats, a crypto ticker, local weather, and the temperature and humidity inside the case. Touch the sensor and a small N20 motor spins the whole rig for 10 seconds, like a roulette wheel.
In this Instructable I’ll walk through the wiring, the API keys, and the code. It’s all one Arduino sketch, and the WiFi setup happens through a phone-friendly captive portal, so you don’t hard-code your network.
The code is on GitHub: https://github.com/yumobuilds/Yumo-Roulette
More builds on my YouTube channel: https://www.youtube.com/watch?v=qcGHcUHoq24
Supplies
- ESP32 dev board
- 6x GC9A01 240x240 round SPI displays
- N20 DC motor
- DRV8833 motor driver
- TTP223 capacitive touch module
- MicroSD card module + microSD card (FAT32)
- AHT10 temperature/humidity sensor (I2C)
- NeoPixel/RGB status LED
- Jumper wire, soldering gear, and a USB power supply
- Brass wire 1mm & 1.5mm
Wire the Six Displays
All six screens share one SPI bus, and each gets its own CS pin.
Signal ESP32 pin
MOSI GPIO22
SCLK GPIO18
DC GPIO2
RST (shared by all 6) GPIO0
----------------------------------------------
Display CS pin Shows
0 GPIO5 SD photo slideshow
1 GPIO17 YouTube stats
2 GPIO16 TikTok stats
3 GPIO15 Crypto ticker
4 GPIO13 Weather
5 GPIO12 Internal temp/humidity
Wire the Motor and Touch Sensor
DRV8833 to N20 motor:
- IN1 → GPIO32
- IN2 → GPIO33
- ULT (sleep) → GPIO27
- EEP (enable) → GPIO26
- OUT1/OUT2 → motor wires (either way round)
TTP223 touch module:
- VCC → 3.3V
- GND → GND
- SIG → GPIO34
Wire the SD Card, Sensor, and LED
SD card module (its own separate SPI bus):
- CS → GPIO4
- SCK → GPIO23
- MOSI → GPIO19
- MISO → GPIO21
- VCC → 3.3V, GND → GND
AHT10:
- SDA → GPIO25
- SCL → GPIO14
- VIN → 3.3V, GND → GND
Prepare the SD Card Photos
Format the card as FAT32, not exFAT. Resize your photos to about 480x480 before copying them to the root folder as .jpg or .jpeg. Full-size phone photos can take over 10 seconds to decode and will freeze the whole sketch, including the touch input and the motor timer. The sketch indexes up to 40 images and shows each for 5 seconds.
Get Your API Keys
- YouTube: create a YouTube Data API v3 key in Google Cloud Console.
- TikTok: subscribe to the TikWM API on RapidAPI and copy the key.
- Weather: create a free OpenWeatherMap account and copy the key.
Install Libraries and Add Your Keys
Download the code from GitHub: https://github.com/yumobuilds/Yumo-Roulette
Install these through the Arduino Library Manager:
- GFX Library for Arduino (Moon On Our Nation)
- Adafruit AHTX0 and Adafruit Unified Sensor
- TJpg_Decoder (Bodmer)
- ArduinoJson
- Adafruit NeoPixel (only if you use the LED)
Flash and Set Up WiFi
Select your ESP32 board, upload the sketch, and let it boot. On first boot it creates a WiFi network called YUMO ROULETTE. Connect your phone to it, and a setup page opens where you enter your WiFi details and YouTube channel URL.
Controls on the BOOT button:
- Short press: add another WiFi network (it remembers up to 10)
- Hold for 10 seconds: factory reset
Use It and Tweak It
Touch the sensor and the rig spins for 10 seconds. Touches are ignored while it’s already spinning. The “Adjustable Settings” block at the top of the sketch lets you change:
- Spin time (TOUCH_SPIN_MS)
- Slideshow speed (SD_SLIDE_MS)
- Refresh intervals for each data source
- Temperature units, via WX_UNITS ("metric" or "imperial")
- Which coins the crypto screen cycles through