Status: Rev 0.1 Carrier Built → Phase 2 Console Expansion Project ESP32-S3-N16R8 · 2.4 GHz RF · ESP-IDF C99

Multi-Functional RC Controller (MFC)

A custom 2.4 GHz wireless transmitter and embedded control console powered by an ESP32-S3-N16R8 (Dual-Core LX7 @ 240 MHz, 16 MB Flash, 8 MB Octal PSRAM) and an nRF24L01+ PA+LNA RF transceiver.

Designed to serve as a universal handheld and desktop transmitter for external robotic platforms (such as my 4WD RC & Autonomous Vehicle) while integrating dual K-Silver Hall-effect joysticks, a 1.3" ST7789 IPS TFT display, MicroSD storage, and MAX4466 audio capture.

YouTube Proof-of-Concept Demonstration

YouTube PoC Video - Recording / Coming Soon
ESP32-S3 Multi-Functional Controller - Hardware & 2.4 GHz RF Telemetry Demo

Upcoming YouTube demonstration covering the Rev 0.1 perfboard carrier power-on test, 2.4 GHz nRF24L01+ packet transmission, Hall-effect gimbal ADC sampling, and ST7789 IPS TFT UI rendering.

Note: The photos below show the very early Phase 1 (Rev 0.1) perfboard carrier build. Currently populated: female/male pin header sockets, 100 µF electrolytic bulk decoupling capacitor, ESP32-S3-N16R8 module, nRF24L01+ 2.4 GHz radio header, and 3.3V/5V/GND power distribution rails. These photos will be updated as the Phase 2 DT-100 desktop console modules are installed.

Top view of the early Rev 0.1 Multi-Functional Controller perfboard carrier
Top View (Rev 0.1): Early perfboard carrier showing dual 22-pin female header sockets for the ESP32-S3, power rail pin headers, and the 100 µF bulk capacitor.
Side view of the Multi-Functional Controller with 2.4 GHz nRF24L01+ SMA duck antenna
RF Transceiver Profile: Side profile with the nRF24L01+ PA+LNA 2.4 GHz module and external SMA whip antenna mounted on the carrier.
Bottom solder-side point-to-point wiring of the Rev 0.1 perfboard carrier
Bottom Solder Routing: Hand-soldered point-to-point bus and power distribution traces on the underside of the phenolic perfboard.

Clone, Build & Flash Commands (ESP-IDF v5.2.2)

To build and flash the ESP32-S3 master firmware on Arch Linux (or any Linux system with ESP-IDF v5.2.2 installed), run the following commands:

bash - Clone, Configure Target (esp32s3), Build & Flash
# 1. Clone the Multi-Functional Controller repository
git clone https://git.ertuncozbay.dev/ertunc-ozbay/multi-functional-controller.git
cd multi-functional-controller/firmware

# 2. Export the ESP-IDF v5.2.2 toolchain environment
source ~/esp/esp-idf/export.sh

# 3. Verify target is set to esp32s3 and compile the firmware
idf.py set-target esp32s3
idf.py build

# 4. Flash over USB-JTAG/UART and open real-time serial telemetry monitor
idf.py -p /dev/ttyACM0 flash monitor

Master Node Pinout & Telemetry Firmware Snippet (firmware/main/mmcontroller.c)

Below is the hardware pinout and hardware `PCNT` quadrature rotary encoder / ADC1 setup from firmware/main/mmcontroller.c:

c99 - firmware/main/mmcontroller.c (ESP32-S3-N16R8 Hardware Definitions)
// --- 1. ADC1 ANALOG INPUTS (K-Silver Hall-Effect Joysticks & MAX4466 Mic) ---
#define PIN_JOY_LX      GPIO_NUM_4   // ADC1_CH3
#define PIN_JOY_LY      GPIO_NUM_5   // ADC1_CH4
#define PIN_JOY_RX      GPIO_NUM_6   // ADC1_CH5
#define PIN_JOY_RY      GPIO_NUM_7   // ADC1_CH6
#define PIN_MIC_OUT     GPIO_NUM_1   // ADC1_CH0 (MAX4466 Audio Preamp)

// --- 2. SHARED SPI2 BUS (nRF24L01+ PA+LNA, ST7789 1.3" IPS TFT & MicroSD) ---
#define PIN_SPI_MOSI    GPIO_NUM_11
#define PIN_SPI_SCK     GPIO_NUM_12
#define PIN_SPI_MISO    GPIO_NUM_13

#define PIN_NRF_CE      GPIO_NUM_9
#define PIN_NRF_CSN     GPIO_NUM_10
#define PIN_SD_CS       GPIO_NUM_39
#define PIN_TFT_CS      GPIO_NUM_40
#define PIN_TFT_DC      GPIO_NUM_41
#define PIN_TFT_RST     GPIO_NUM_42

// --- 3. HARDWARE PCNT ROTARY ENCODER & 2N2222A BJT DRIVER ---
#define PIN_ENC_CLK     GPIO_NUM_15
#define PIN_ENC_DT      GPIO_NUM_16
#define PIN_ENC_SW      GPIO_NUM_17
#define PIN_BJT_BASE    GPIO_NUM_21  // Drives 2N2222A base via 1 kOhm resistor

Early KiCad 9.0 Schematic (mfc-1.svg)

KiCad schematic diagram of the ESP32-S3 Multi-Functional Controller
Early prototype KiCad schematic (mfc-1.kicad_sch) - click to zoom full-screen or download the raw KiCad 9.0 file.

Master Node GPIO Allocation

Subsystem / Peripheral ESP32-S3 GPIO Interface & Engineering Notes
Dual Hall-Effect Joysticks (4 Axes) GPIO 4, 5, 6, 7 12-bit SAR ADC1 (LX, LY, RX, RY) - avoids ADC2 Wi-Fi/RF conflicts
MAX4466 Electret Mic Preamp GPIO 1 ADC1_CH0 analog audio envelope & FFT voice input
Shared SPI2 Bus (MOSI / MISO / SCK) GPIO 11 / 13 / 12 High-speed SPI2 bus shared by nRF24L01+, ST7789 TFT, and MicroSD
nRF24L01+ 2.4 GHz Radio CE: 9, CSN: 10 Dedicated 100 µF electrolytic + 100 nF ceramic decoupling on 3.3V rail
1.3" ST7789 IPS TFT (240×240) CS: 40, DC: 41, RST: 42 Hardware Chip Select added so TFT shares SPI2 cleanly with nRF24 & SD
MicroSD Card Module CS: 39 Stores telemetry logs, profiles, and UI assets over SPI2
Rotary Encoder (KY-040) CLK: 15, DT: 16, SW: 17 Hardware PCNT quadrature decoder with 1000 ns glitch filter
2N2222A BJT Low-Side Switch GPIO 21 (via 1 kΩ base R) Drives external loads with 1N4001 / 1N5817 flyback protection

From Rev 0.1 Carrier to the DT-100 Desktop Console

Phase 2 Hardware Upgrade (Direnc.net Procurement List)

The controller is transitioning from the bare Rev 0.1 perfboard carrier into a professional desktop console housing. Once the Phase 2 components below are mounted, the ESP-IDF firmware will be updated with drivers for each module:

  • Enclosure: DT-100 Desktop Instrument Case (Black ABS, 190 × 137 × 59 mm)
  • Joysticks: 2× K-Silver High-Precision Hall-Effect 2-Axis Gimbals
  • Display & Storage: 1.3" ST7789 IPS TFT LCD (240×240) + SPI MicroSD Card Module
  • Audio Preamp: MAX4466 Electret Microphone Amplifier with Adjustable Gain
  • Power & Switching: MT3608 2A DC-DC Boost Converter, 12–24V White LED Waterproof Latching Switch, KTS303 3-Pin Toggle Switch, 180° Slide Switch
  • Discrete Protection: 2N2222 NPN BJT Transistor, 1N5817 1A 20V Schottky Diode, 1N4001 1A 50V Rectifier Diode (DO-41)