Skip to the content
2 layers90 × 60 mmEsp32 control node, the printed circuit board in 3D

Esp32 control node

avolk201/RTOS-Demo

A functioning RTOS project for an ESP32

Size
90 × 60 mm
Copper layers
2
Thickness
1.6 mm
Parts
48
Nets
27
Pads
219
Tracks, vias
156, 29
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20241229)
Created
11 Sep 2026
Updated
15 Sep 2026

Overview

Esp32 control node is an open-source printed circuit board by avolk201, from the avolk201/RTOS-Demo repository on GitHub. It is a 2-layer board of 90 × 60 mm with 48 parts on 27 nets, routed with 156 tracks and 29 vias.

It is built around the CH340C, ESP32-WROOM-32E and AMS1117-3.3, with the MPU-6050, MMBT3904 and SS34 among its other parts. Its parts include 17 capacitors, 11 resistors, 5 connectors, 4 ICs and 3 switches. It belongs with the ESP32 boards of this library.

Main components

6

README

README.md

ESP32 RTOS Sensor Fusion & Control Node

Real-time embedded control node on ESP32 (FreeRTOS): reads an IMU, fuses sensor data, runs a closed-loop PID controller, drives a servo, streams telemetry, and handles faults. Built with PlatformIO / Arduino-ESP32 core; all core modules are plain C with a thin C++ glue layer for Arduino peripherals.

Status

  • Firmware compiles clean (pio run).
  • No IMU hardware yet: the firmware auto-detects an MPU-6050 at boot and falls back to a simulated IMU (synthetic 0.5 Hz ±20° pitch + noise) so the full control pipeline is testable hardware-in-the-loop. See docs/PROJECT_LOG.md.

Hardware

PartPinNotes
MPU-6050 (not yet owned)SDA 21 / SCL 22I2C @ 400 kHz, addr 0x68, runtime-detected
SSD1306 OLED 0.96"SDA 21 / SCL 22shares I2C bus, addr 0x3C
Servo (PWM)GPIO 25LEDC 50 Hz, 500–2400 µs
NeoPixelGPIO 26fault/state indicator
Button MODEGPIO 0 (BOOT)recenters setpoint to 0° + saves
Button TARGETGPIO 34steps setpoint +5° (wraps at +45° → −45°)

Tasks

TaskPrioRateCoreJob
sensor5100 Hz1IMU read, push to sample queue
control6100 Hz1fusion + PID + servo, WDT-subscribed
telemetry320 HzanyCSV stream + command parsing
monitor22 Hzanycontrol-stall detection → safe mode
oled25 Hzanystatus display
led14 HzanyNeoPixel fault colors
buttons220 Hzanydebounced setpoint buttons

Telemetry & Commands

Serial @ 115200. CSV lines:

text
T,<t_ms>,<angle_deg>,<rate_dps>,<setpoint>,<pid_out>,<servo_us>,<faults_hex>,<invalid_samples>,<jitter_us>,<free_heap>,<sim_mode>

Commands: set kp|ki|kd|target <float>, get, save (NVS), faults, help.

Build & Flash

sh
pio run              # build
pio run -t upload    # flash
pio device monitor   # telemetry + commands

Layout

  • src/*.c — pure C modules (fusion, pid, imu, servo, faults, config, buttons, state)
  • src/*.cpp — C++ glue (main, telemetry, oled, status_led)
  • include/ — module headers
  • docs/ — architecture + project log (bugs, decisions)
  • hardware/ — KiCad PCB project (schematic rev 0.1, ERC clean; see hardware/README.md)
  • test/ — native Unity tests (pio test -e native)

Parts

48
QtyValueFootprintReferences
11100nFCapacitor_SMD:C_0805_2012MetricC1, C2, C4, C5, C6, C9, C10, C12, C13, C14, C16
710kResistor_SMD:R_0805_2012MetricR1, R2, R3, R8, R9, R10, R11
4M3MountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
210uFCapacitor_SMD:C_0805_2012MetricC7, C11
25.1kResistor_SMD:R_0805_2012MetricR6, R7
2MMBT3904Package_TO_SOT_SMD:SOT-23Q1, Q2
2SS34Diode_SMD:D_SMAD1, D2
1100RResistor_SMD:R_0805_2012MetricR5
1100uFCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC3
110nFCapacitor_SMD:C_0805_2012MetricC17
12.2nFCapacitor_SMD:C_0805_2012MetricC15
122uFCapacitor_SMD:C_0805_2012MetricC8
1330RResistor_SMD:R_0805_2012MetricR4
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U4
1CH340CPackage_SO:SOIC-16_3.9x9.9mm_P1.27mmU3
1ESP32-WROOM-32ERF_Module:ESP32-WROOM-32EU1
1MODE_BOOTButton_Switch_THT:SW_PUSH_6mm_H5mmSW1
1MPU-6050Sensor_Motion:InvenSense_QFN-24_4x4mm_P0.5mmU2
1NEOPIXELConnector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_VerticalJ4
1OLED_SSD1306Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ2
1PWR_IN_5VTerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_HorizontalJ5
1RESETButton_Switch_THT:SW_PUSH_6mm_H5mmSW3
1SERVOConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ3
1TARGET_IO34Button_Switch_THT:SW_PUSH_6mm_H5mmSW2
1USB_CConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J1

Similar boards

  • 4 layers67.5 × 53.5 mmFlight controller rev2, the printed circuit board in 3D

    Flight controller rev2

    shazmeenShz/ESP32-Flight-Controller

    Custom 4-layer IoT-Ready ESP32 Flight Controller PCB designed in KiCad 8 featuring USB Type-C, CH340C, MP1584 power management, MPU6050 interface, and manufacturing-ready Gerber files.

    65 parts3MIT
  • 2 layers81.3 × 72.9 mmController v4.3, the printed circuit board in 3D

    Controller v4.3

    RT-CUSTOMZ/Illumigon

    WLED-gesteuerte Lichtpanele

    48 parts1
  • 2 layers95 × 85 mmFiberboard logic min, the printed circuit board in 3D

    Fiberboard logic min

    nguyenduchan/fiberboard

    Fiberboard là bo mạch điều khiển logic tích hợp (AIO), không có driver stepper Nema. Cùng chức năng module ESP32 công nghiệp thông dụng: 4 ngõ vào cách ly + 4 relay + RS485.

    108 parts
  • 2 layers84 × 66 mmPomodoro timer v5 routed, the printed circuit board in 3D

    Pomodoro timer v5 routed

    hinewboy/pomodoro-timer

    番茄钟 PCB 项目(KiCad):原理图、布局布线自动化脚本、JLCPCB 打样生产文件

    46 partsMIT
  • 2 layers114 × 105 mmSmell monitor v1 1, the printed circuit board in 3D

    Smell monitor v1 1

    OpenSmell/smell-monitor

    The enclosure is the simple one a builder can hold in their head: an open tray, a board on four standoffs, modules plugged into eight headers, a flat lid with four M3 screws, a filter pad that drops into the front, and…

    64 parts
  • 2 layers30 × 60 mmTest routed, the printed circuit board in 3D

    Test routed

    Shmcandi/esp32-devkit-hardware

    Production-grade ESP32-WROOM-32E and ESP32-S3 (N16R8) Dual USB-C development board PCB designs created with Atopile & KiCad 10

    26 parts
  • 2 layers100 × 100 mmHour meter board microfit can handroute, the printed circuit board in 3D

    Hour meter board microfit can handroute

    ilomon10/embedded-totalizer-hour-meter

    ESP32 engine hour meter & totalizer: firmware, SensorFrame protocol, Node host tools, KiCad PCB and a Deno device simulator

    152 parts
  • 2 layers100 × 85 mmESP32 MediaCarrier routed, the printed circuit board in 3D

    ESP32 MediaCarrier routed

    xmyoot/esp32-media-carrier

    ESP32 multimedia carrier board with 7–24 V DC buck regulator, 3.2 W Class-D I2S audio amp, WS2812 LED ring driver, and SPI TFT display header

    97 partsMIT

Questions

How big is the Esp32 control node PCB?

It measures 90 × 60 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Esp32 control node use?

48 parts, built around the CH340C, ESP32-WROOM-32E, AMS1117-3.3 and MPU-6050. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Esp32 control node KiCad files?

From the avolk201/RTOS-Demo repository on GitHub, at the commit this page was made from: the board is hardware/esp32_control_node/esp32_control_node.kicad_pcb and its schematic hardware/esp32_control_node/esp32_control_node.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Esp32 control node design in my own project?

Its repository states no licence, so its author keeps all rights: ask avolk201 before reusing the design.