
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.

A functioning RTOS project for an ESP32
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.
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.
pio run).docs/PROJECT_LOG.md.| Part | Pin | Notes |
|---|---|---|
| MPU-6050 (not yet owned) | SDA 21 / SCL 22 | I2C @ 400 kHz, addr 0x68, runtime-detected |
| SSD1306 OLED 0.96" | SDA 21 / SCL 22 | shares I2C bus, addr 0x3C |
| Servo (PWM) | GPIO 25 | LEDC 50 Hz, 500–2400 µs |
| NeoPixel | GPIO 26 | fault/state indicator |
| Button MODE | GPIO 0 (BOOT) | recenters setpoint to 0° + saves |
| Button TARGET | GPIO 34 | steps setpoint +5° (wraps at +45° → −45°) |
| Task | Prio | Rate | Core | Job |
|---|---|---|---|---|
| sensor | 5 | 100 Hz | 1 | IMU read, push to sample queue |
| control | 6 | 100 Hz | 1 | fusion + PID + servo, WDT-subscribed |
| telemetry | 3 | 20 Hz | any | CSV stream + command parsing |
| monitor | 2 | 2 Hz | any | control-stall detection → safe mode |
| oled | 2 | 5 Hz | any | status display |
| led | 1 | 4 Hz | any | NeoPixel fault colors |
| buttons | 2 | 20 Hz | any | debounced setpoint buttons |
Serial @ 115200. CSV lines:
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.
pio run # build
pio run -t upload # flash
pio device monitor # telemetry + commandssrc/*.c — pure C modules (fusion, pid, imu, servo, faults, config, buttons, state)src/*.cpp — C++ glue (main, telemetry, oled, status_led)include/ — module headersdocs/ — 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)| Qty | Value | Footprint | References |
|---|---|---|---|
| 11 | 100nF | Capacitor_SMD:C_0805_2012Metric | C1, C2, C4, C5, C6, C9, C10, C12, C13, C14, C16 |
| 7 | 10k | Resistor_SMD:R_0805_2012Metric | R1, R2, R3, R8, R9, R10, R11 |
| 4 | M3 | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 2 | 10uF | Capacitor_SMD:C_0805_2012Metric | C7, C11 |
| 2 | 5.1k | Resistor_SMD:R_0805_2012Metric | R6, R7 |
| 2 | MMBT3904 | Package_TO_SOT_SMD:SOT-23 | Q1, Q2 |
| 2 | SS34 | Diode_SMD:D_SMA | D1, D2 |
| 1 | 100R | Resistor_SMD:R_0805_2012Metric | R5 |
| 1 | 100uF | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C3 |
| 1 | 10nF | Capacitor_SMD:C_0805_2012Metric | C17 |
| 1 | 2.2nF | Capacitor_SMD:C_0805_2012Metric | C15 |
| 1 | 22uF | Capacitor_SMD:C_0805_2012Metric | C8 |
| 1 | 330R | Resistor_SMD:R_0805_2012Metric | R4 |
| 1 | AMS1117-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U4 |
| 1 | CH340C | Package_SO:SOIC-16_3.9x9.9mm_P1.27mm | U3 |
| 1 | ESP32-WROOM-32E | RF_Module:ESP32-WROOM-32E | U1 |
| 1 | MODE_BOOT | Button_Switch_THT:SW_PUSH_6mm_H5mm | SW1 |
| 1 | MPU-6050 | Sensor_Motion:InvenSense_QFN-24_4x4mm_P0.5mm | U2 |
| 1 | NEOPIXEL | Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_Vertical | J4 |
| 1 | OLED_SSD1306 | Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical | J2 |
| 1 | PWR_IN_5V | TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2-5.08_1x02_P5.08mm_Horizontal | J5 |
| 1 | RESET | Button_Switch_THT:SW_PUSH_6mm_H5mm | SW3 |
| 1 | SERVO | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J3 |
| 1 | TARGET_IO34 | Button_Switch_THT:SW_PUSH_6mm_H5mm | SW2 |
| 1 | USB_C | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J1 |

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.


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.

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

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…

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

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

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
It measures 90 × 60 mm and has 2 copper layers, 1.6 mm thick.
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.
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.
Its repository states no licence, so its author keeps all rights: ask avolk201 before reusing the design.