Imagine a pocket sized device straight out of a cyberpunk novel: a glowing OLED display, pulsating selector with menus, and tactile feedback that hums with every twist of a rotary encoder. Meet ELLA-Box, a versatile ESP32-C3-based gadget that combines a futuristic interface with practical functionality. Whether you’re controlling smart home devices, monitoring environmental sensors, or crafting a wearable notification badge, this project is your gateway to building a sleek, low-cost IoT device with a cyberpunk feel and look (I am personally tired of touch screens and lifeless apps :P ).
I started this project 2 years agoto explore the ESP32-C3’s potential. A tiny, affordable (€2–3) microcontroller with Wi-Fi and BLE and to create a device that feels like it belongs in a sci-fi universe. The result is simple handy gadget with a 128x64 OLED, haptic feedback, a customizable UI, ready to be hacked for countless applications and I used it for learning and testings other projects. Here I pass it on for anyone interested!
I KNOW ! , I REALLY NEED A PCB!
Project OverviewElla-Box is a handheld gadget built around the ESP32-C3, featuring:
- Display: A 1.3” SH1106 OLED (128x64)
- Input: A rotary encoder for scrolling and a pushbutton for selection.
- Feedback: Vibration motor and buzzer with adjustable intensity and volume for tactile/audio cues.
- UI: A cyberpunk-themed interface with large fonts (u8g2_font_profont17_tf, profont22_tf), glowing borders, scanline effects, and pulsing animations. I have experimented with so many themes and I will drop it down in github in the future.
- Settings: Persistent options (sound, vibration, sleep timer, intensity, volume) values are stored in EEPROM.
- Power: Deep sleep mode for battery efficiency, woken by encoder or button.
- Size: 310–510KB binary, fitting comfortably in the ESP32-C3’s 1.2MB flash.
The project’s menu system (Main, Settings, Tools, System, Scan, About) is designed for extensibility, with placeholder actions ready for customization. Its cyberpunk look and feel with “Hepltic feedback” branding and. I think it standout for hobbyists, cosplayers, or anyone wanting a futuristic gadget.
Features and Capabilities- Futuristic UI: The OLED displays a “ELLA-Box v1.0” splash screen, followed by smooth-scrolling menus with pulsing selection boxes, evoking a cyberpunk terminal.
- Interactive Control: Navigate menus with the encoder, select with the button, and feel haptic/audio feedback (customizable via Settings).
- Low Power: Deep sleep reduces consumption to 5µA, ideal for battery-powered use.
- Extensible Menus: Placeholder menus (Tools, Scan, System) support new features like BLE scanning or sensor integration.
- Modular Code: Written in Arduino C++ with U8g2 for display, EEPROM for settings, and clean classes (SettingsManager, FeedbackManager, etc.).
- Applications: Smart home remote, wearable notifier, environmental monitor, debug tool, or interactive art piece.
The idea for ELLA-Box sparked from the love I have for my children and ELLA is my daughter's name. I wanted a device that felt alive just like my kids and makes your life easier, and you give them this toy they enjoy it beeping and buzzing in the process they get to learn and play with.With glowing visuals and tactile feedback, but was affordable and hackable. The ESP32-C3 was the perfect project : compact, powerful, and loaded with Wi-Fi/BLE for future expansions.
Challenges- Font Size: Fitting larger fonts (profont17_tf, profont22_tf) on a 128x64 OLED required reducing menu items to three and optimizing spacing (16 pixels).
- Memory: The initial binary (300KB) grew with fonts and animations (510KB). Using PROGMEM for strings and enabling LTO kept it under 1.2MB.
- Feedback Tuning: Balancing haptic and buzzer feedback was tricky. I settled on a quad-tone buzzer (800–2000Hz) and adjustable vibration intensities (96–255 PWM).
- Deep Sleep: Ensuring reliable wake-up via GPIO interrupts took careful configuration how ever with a slider switch on and of once wakes the device for now...
- Cyberpunk UI: Adding scanlines, pulsing borders, and centered text transformed the OLED into a cool display.
- Modularity: Structuring code with classes (DisplayManager, MenuManager) made it easy to add features without breaking the core.
- Haptic Feedback: The heptic buzz (a playful typo I kept for cool) feels satisfying, especially for menu navigation, gaming and notification purposes.
Hardware Setup:
- Connect the OLED to GPIO20 (SDA) and GPIO21 (SCL).
- Wire the rotary encoder to GPIO8 (A), GPIO9 (B), and GPIO10 (SW).
- Attach the vibration motor to GPIO7 and buzzer to GPIO6 (use PWM for passive buzzer).
- Optionally, add a LiPo battery with a TP4056 charger for portability. the full schematic is linked below.
Software Setup:
- Install Arduino IDE and ESP32 core (select ESP32-C3 Dev Module).
- Add libraries: U8g2 (for OLED), EEPROM (included with ESP32 core).
- Download the ella-box_OS code from the GitHub repo (link below).
- Set compiler options: Optimize: Smallest Code, enable LTO.!
Upload and Test:
- Flash the code (310–510KB, fits 1.2MB flash). Yeah size matters in this project. You can only upload an optimized code and not so many thing can run at once, even though the kickstarter code has many menu, I put that for the demo purpose.
Customization:
- Add BLE/Wi-Fi for IoT or notifications (use ESP32 BLE Arduino or WiFi.h).
- Integrate sensors (e.g., BME280) for environmental data.
- Create games or animations in “Tools” or “About” menus.
In the future I want to take this project to the next level!! Here are some in my mind:
- Definitely need a PCB design and case redesign!
- BLE Smart Remote: Add startScanAction to list nearby BLE devices in “Scan” menu.
- Sensor Hub: Integrate eg.BME280 for temp/humidity.
- Wearable: Use the OLED display to show notifications.
- Game Mode: Code Snake in “Tools” using encoder input and OLED pixels.
- OTA Updates: Add Wi-Fi-based firmware updates for seamless upgrades.
- AI/ML integration probably with tiny models.
- Gaming Console: definitely for this competition ("Junk Drawer") as well! I am going to deploy retro games and enjoy this project!
I remind you again here Keep binary size less than 1MB by using smaller fonts (profont15_tf) or removing debug prints if adding features like BLE.
Gamer's gambitNow let me demonstrate the use of this "box" by dropping a retro but unique styled, custom, snake game on it...
At the heart of Ella-Box is an ESP32-C3, I have chosen not for brute force, but for efficiency. Every byte matters. By keeping the binary size under 1 MB, using lightweight fonts like profont15_tf, and stripping unnecessary debug output, so that Ella-Box maintains room for creativity including games.
The rotary encoder becomes a surprisingly versatile game controller:
- Rotate to move
- Press to select or confirm
- Navigate menus with satisfying physical feedback
Paired with the 128×64 OLED, this creates a retro-console vibe reminiscent of early handheld gaming devices simple, readable, and charming.
you can find the detailed wiring of this project below as well as the mini OS with snake game on it linked below in my GitHub. Just a quick reminder: just do not forget to throw a diode across the coin motor and resistor on the LED (back-light). Project Junk Drawer finished and the year 2025 as well :).
ConclusionThis ESP32-C3 based project offers endless possibilities. Its sleek UI, haptic feedback, and low-cost hardware make it accessible for beginners and seasoned makers alike. For anyone who is interested in learning, hacking and developing hardware handheld projects!
Got questions or cool extensions? Drop me a comment below or join the discussion on GitHub.
Acknowledgments
- Inspired by cyberpunk themed Gadgets.
- Thanks to the Arduino and U8g2 communities for awesome libraries.
- Shoutout to my my wife and kids, for moral support during late-night soldering, CAD designing, Coding and 3D printing :)!
Wish happy new year (2026) and Awesome hacking the ELLA-BOX!












Comments