Skip to content

Hardware

Components

Microcontroller

ESP32-S3 DevKitC-1 (recommended)

  • Dual-core Xtensa LX7 @ 240 MHz
  • 512 KB SRAM, 8 MB Flash
  • USB-C for programming and power
  • Built-in RGB NeoPixel LED (GPIO 48)

Other ESP32-S3 boards should work with pin adjustments.

Display

2.4" TFT with ILI9341 driver + XPT2046 touch controller

  • Resolution: 320 × 240 pixels (landscape mode)
  • SPI interface for both display and touch
  • 3.3V logic (compatible with ESP32-S3)

These displays are widely available on AliExpress, Amazon, etc. Look for "2.4 inch TFT SPI ILI9341 touch".

Rotary Encoder

EC11 rotary encoder with push button

  • Rotation for value adjustment and menu navigation
  • Push button for selection/confirmation
  • Active LOW button (internal pull-up used)

Optional

  • Servo connectors – Standard 3-pin headers for servo outputs
  • Battery voltage divider – For LiPo checker function (ADC input)

Pinout

Pin configuration files

Pin assignments are defined in two places:

  • platformio.ini – Build flags for TFT_eSPI library (display, touch, SD card, NeoPixel)
  • include/pins.h – All other pins (servos, encoder, ADC, I2C, backlight)

If you use different hardware, adjust both files accordingly.

Display & Touch (SPI)

Function GPIO Notes
TFT_MOSI 11 SPI data out
TFT_MISO 13 SPI data in
TFT_SCLK 12 SPI clock
TFT_CS 10 TFT chip select
TFT_DC 8 Data/Command
TFT_RST 9 Reset
TFT_BL 5 Backlight PWM
TOUCH_CS 14 Touch chip select
TOUCH_IRQ 7 Touch interrupt

Rotary Encoder

Function GPIO Notes
ENC_CLK 35 Encoder output A
ENC_DT 36 Encoder output B
ENC_SW 37 Push button (active LOW)

Servo PWM Outputs

Servo GPIO
Servo 1 6
Servo 2 15
Servo 3 16
Servo 4 17
Servo 5 18
Servo 6 21

ADC Inputs (Battery Voltage)

Channel GPIO Notes
ADC 1 1 With voltage divider
ADC 2 2 With voltage divider
ADC 3 3 With voltage divider

Other

Function GPIO Notes
NeoPixel 48 Built-in RGB LED
SD_CS 4 SD card (optional)
I2C_SDA 47 I2C data (used by PN532 NFC)
I2C_SCL 39 I2C clock (GPIO48 reserved for NeoPixel)

NFC (PN532, I2C)

Function GPIO Notes
PN532_IRQ 41 Data-ready interrupt
PN532_RST 40 PN532 hardware reset
I2C_SDA 47 Shared I2C data
I2C_SCL 39 Shared I2C clock

PN532 DIP switch settings

Set DIP switches to 1/0 for I2C mode:

  • 0/0 = HSU (High Speed UART)
  • 1/0 = I2C ← use this
  • 0/1 = SPI

I2C pin choice

The ESP32-S3 DevKitC-1 uses GPIO48 for the built-in NeoPixel. To avoid conflicts, I2C SCL is assigned to GPIO39 (see include/pins.h).

Reserved pins / conflicts

  • SPI bus (TFT/Touch only): GPIO11 (MOSI), GPIO12 (SCLK), GPIO13 (MISO)
  • SPI chip selects: GPIO10 (TFT_CS), GPIO14 (TOUCH_CS), GPIO4 (SD_CS)
  • GPIO48 is reserved for the built-in NeoPixel
  • GPIO45/GPIO46 are available but are strapping-related pins (use with care)

Wiring Diagram

Connect the display and encoder to the ESP32-S3 according to the pinout table above.

📄 Download schematic (PDF)


Custom PCB

A custom PCB is available for a cleaner build:

Custom PCB Front

Custom PCB Back

Custom PCB Assembled

PCB design sources and manufacturing outputs live in the repository under the hardware/ folder:

  • Board layout: hardware/RC TOOLBOX.fbrd
  • Schematic: hardware/RC TOOLBOX.fsch
  • Schematic PDF: hardware/RC TOOLBOX_Schematic_v194.pdf
  • Gerbers: hardware/RC TOOLBOX_Gerber_v432.zip

Browse/download here: https://github.com/chiefenne/RC_TOOLBOX/tree/main/hardware