An open-source remote controller based on ESP32 with dual analog joysticks, designed for DIY robotics projects.
| Component | Specification | Notes |
|---|---|---|
| MCU | ESP32 (any DevKit variant) | |
| Joysticks | 2x HW-504 | With integrated push-buttons |
| Display | SSD1306 (128x64, I2C) or ST7735 (160x128, SPI) | Selectable via compile flag |
| Communication | ESPNOW | Direct ESP32-to-ESP32 |
| Component | Name | N | Pin | ESP32-Pin |
|---|---|---|---|---|
| HW-504 | Joystick | 1 | GND | GND |
| (Left) | 2 | +5V | 3V3 | |
| 3 | VRX | GPIO 32 | ||
| 4 | VRY | GPIO 33 | ||
| 5 | SW | GPIO 14 | ||
| HW-504 | Joystick | 1 | GND | GND |
| (Right) | 2 | +5V | 3V3 | |
| 3 | VRX | GPIO 35 | ||
| 4 | VRY | GPIO 34 | ||
| 5 | SW | GPIO 4 | ||
| SSD1306 | Display | 1 | GND | GND |
| (128x64, I2C) | 2 | VDD | 3V3 | |
| 3 | SDA | GPIO 21 | ||
| 4 | SCK | GPIO 22 | ||
| ST7735 | Display | 1 | GND | GND |
| (160x128, SPI) | 2 | Reset | GPIO 15 | |
| 3 | VCC | 3V3 | ||
| 4 | DC | GPIO 2 | ||
| 5 | CS | GPIO 5 | ||
| 6 | SCK | GPIO 18 | ||
| 7 | MOSI | GPIO 23 | ||
| 8 | LED | 5V |
NOTE: ST7735 backlight LED requires a (220 + 220)Ω current-limiting resistors to 5V.
DJC-Firmware is a PlatformIO project. Configuration and dependencies are managed in platformio.ini.
This project uses KiraFlux-Toolkit, included as a submodule in /lib.
To build:
- Clone with submodules:
git clone --recursive https://github.com/KiraFlux/ESP32-DJC.git - Open DJC-Firmware in Any IDE with PlatformIO support
- Build and upload
DJC-Firmware/src/
├── main.cpp # Application entry point
└── djc/
├── Device.hpp # Main device controller
├── Periphery.hpp # Hardware abstraction
├── UI.hpp # UI system configuration
└── ui/ # Application pages
├── MainPage.hpp
├── MavLinkControlPage.hpp
└── TestPage.hpp
| Feature | Status | Notes |
|---|---|---|
| Dual joystick input | Working | With calibration |
| Display support | Working | SSD1306 (I2C) and ST7735 (SPI) |
| ESPNOW communication | Working | Broadcast mode only |
| Basic UI system | Working | Page-based navigation |
| MAVLink control | Basic | Manual control packets only |
| Limitation | Description |
|---|---|
| ESPNOW pairing | Hardcoded to broadcast MAC |
| MAVLink support | Minimal implementation (manual control + heartbeat + IMU receive) |
| Configuration | No persistent storage |
| Error handling | Limited recovery mechanisms |
The firmware is currently undergoing modernization as part of the KiraFlux-Toolkit update. Some components are in transition.
| Control | Function |
|---|---|
| Left joystick button | Toggle navigation/control modes |
| Right joystick | Navigate UI (navigation mode) or send control data (control mode) |
| Right button | Activate UI elements (navigation mode) |
| Mode | Description |
|---|---|
| Navigation Mode | Right joystick controls UI menu navigation |
| Control Mode | Right joystick values are sent via ESPNOW / MAVLink |
The repository contains 3D models in native Kompas 3D v23 Study format:
| Directory | Contents | Status |
|---|---|---|
| Models-Legacy | Original design files | Outdated, for reference only |
| Models | Current models | Minimal, under development |
NOTE: Production-ready 3D printable models are not yet available.
| Original version with SSD1306 display | Updated version with ST7735 display |
|---|---|
![]() |
![]() |
Contributions are welcome. Please:
- Report issues via GitHub Issues
- Submit pull requests for improvements
- Share your modifications in Discussions
MIT License. See LICENSE file for details.

