

AM03127-Controller
A controller for AM03127 LED panels using an ESP32-C3 microcontroller. It communicates with the panel via RS232 and exposes a REST API through an HTTP server, along with a web interface for easy control.
- Size
- 23 × 76 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 17
- Nets
- 40
- Pads
- 86
- Tracks, vias
- 90, 6
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 31 Mar 2025
- Updated
- 5 Nov 2026
Overview
AM03127-Controller is an open-source printed circuit board by giomf, from the giomf/AM03127-Controller repository on GitHub. It is a 2-layer board of 23 × 76 mm with 17 parts on 40 nets, routed with 90 tracks and 6 vias.
It is built around the MAX3232ID, AP63205WU and 1N5819WS, with the DC050-T among its other parts. Its parts include 10 capacitors, 3 ICs, 1 diode and 1 inductor. It belongs with the computers and single-board computers and interfaces and adapters boards and the ESP32 and RISC-V boards of this library.
Main components
4MAX3232ID
SOIC-16-40℃~+85℃ 2 2 250Kbps 300uA 3V~5.5V Short-Circuit Protection Transceiver Yes ±15kV SOIC-16 RS232 ICs ROHSTexas InstrumentsRS232 ICsAP63205WU
TSOT-23-6-40℃~+85℃@(TA) 1 1.1MHz 22uA 2A 3.8V~32V 5V Buck Built-in Fixed Overcurrent Protection、Light load efficient mode、Cycle-by-cycle current limiting、Hiccup current limiting、EMI optimization (spread spectrum) Step-down type Yes TSOT-23-6 DC-DC Converters ROHSDiodes IncorporatedDC-DC Converters1N5819WS
SOD-3231 Independent 1A 25A 40V 500uA@40V 600mV@1A SOD-323 Schottky Diodes ROHSGuangdong HottechSchottky DiodesDC050-T
SMD-30℃~+70℃ 1.5A 12V 2mm 6.5mm DC Power Jack Surface Mount, Right Angle SMD DC Power Connectors ROHSSHOU HANDC Power Connectors
README
README.mdAM03127 LED Panel Controller
This project provides a controller for AM03127 LED panels using an ESP32-C3 microcontroller. It communicates with the panel via RS232 and exposes a REST API through an HTTP server, along with a web interface for easy control.
Features
- Control AM03127 LED panels via RS232 communication
- Display text with various animations and effects
- Create and manage schedules for automated content display
- Set and display the panel's internal clock
- RESTful API for programmatic control
- Web interface for easy management and OTA updates
Hardware Requirements
- ESP32-C3 microcontroller
- AM03127 LED panel
- RS232 interface between ESP32-C3 and LED panel
PCB Design
A custom PCB has been designed for this project. All PCB-related files, including schematics, board layouts, and manufacturing files, can be found in the PCB folder.
Software Architecture
The project is built with Rust and uses the following components:
- Embassy: Async runtime for embedded systems
- ESP-HAL: Hardware abstraction layer for ESP32 devices
- PicoServe: Lightweight HTTP server for embedded systems
- Heapless: Collections that don't require dynamic memory allocation
Programs
The repository is a Cargo workspace plus the firmware, which is built separately for the ESP32-C3.
| Directory | What it is |
|---|---|
am03127-firmware | Firmware for the ESP32-C3: drives the panel over RS232, stores pages and schedules in flash, serves the REST API and the web UI, accepts OTA updates. |
am03127-webui | Web UI written in Rust with Leptos (WebAssembly). Edit pages and schedules, sync the clock, upload firmware. |
am03127-server | Server that consolidates all panels into one web UI and forwards each panel's API. |
am03127-cli | Command line tool to control several panels at once. |
am03127-client | Shared HTTP client for the panel API and the panel-config.toml parser. Used by the CLI, the web UI and the server. |
am03127-commands | Shared no_std models (pages, schedules, clock) and their AM03127 command encoding. Used by the firmware and everything else. |
Firmware
The firmware connects to Wi-Fi, restores the stored pages and schedules on the panel and serves the API on port 80. The Wi-Fi credentials are compiled in:
export WIFI_SSID="MyNetwork" WIFI_PASS="secret"
just webui-firmware # build the web UI the firmware embeds
cd am03127-firmware && cargo run --release # flash over USB (also writes the partition table)For updates over Wi-Fi, just save-image builds the web UI and the release firmware into firmware.bin, and just ota <panel-ip> uploads it. The web UI's Device tab can upload it as well.
GET /status reports the build and the controller's health, shown in the web UI and by am03127-cli status:
version: short git hash of the build,-dirtyif the tree had uncommitted changesuptime_secs,rssi(Wi-Fi dBm),heap_free/heap_used(bytes)panel_ok: whether the panel answered the last command (nullbefore the first one)
Web UI
One Leptos crate, built in two variants:
- Device (default): served by the firmware for the panel it runs on.
- Server (
--features server): shows a bar with all panels and their status; click a panel to edit it.
Both share the same tables and Device tab. Pages and schedules are edited in place; the last row of each table adds a new entry.
Server
am03127-server serves the server variant of the web UI and forwards /api/panel/<name>/… to the panel's API, so the browser only talks to the server and the panels need no CORS.
am03127-server --config panel-config.toml --listen 0.0.0.0:8080 --web-root <built web UI>GET /api/panels lists the configured panels.
CLI
am03127-cli works on all (non-hidden) panels of panel-config.toml, or on the ones given with --panels:
am03127-cli status # reachability, firmware version and health of each panel
am03127-cli info firmware.bin # build info of a firmware file
am03127-cli clock # set the clocks to the local time
am03127-cli page A "Hello" --leading scroll_left # send page A
am03127-cli schedule A A --from 2026-12-24 --to 2026-12-26 # show page A in that window
am03127-cli update firmware.bin --panels Kitchen # OTA update one panel
am03127-cli --help # all commands and optionsPanel configuration
The CLI and the server read the panels from a panel-config.toml:
[[panels]]
name = "Kitchen"
address = "192.168.1.23" # host name or IP of the panel
floor = "Obergeschoss" # optional, groups the panels in the server's web UI
model = "long" # optional: "long" or "color"; omit for a standard panel
[[panels]]
name = "Spare"
address = "LED-8E-84.lan"
hidden = true # skipped unless named with --panelsNix
The flake provides:
- Packages:
am03127-cli(default),am03127-server,am03127-webui(server variant, built). - NixOS modules:
am03127-server: runs the server with the web UI (configFile,address,port,openFirewall).am03127-clock: syncs the panel clocks on a systemd timer.am03127-wednesday-schedule: programs a weekly schedule slot.
- A dev shell with the toolchain, Trunk, espflash and just.
services.am03127-server = {
enable = true;
configFile = ./panel-config.toml;
port = 80;
openFirewall = true;
};Development
| Recipe | What it does |
|---|---|
just webui | Web UI (device variant) with live reload against a mock panel (am03127-webui/mock.py). |
just webui-server | Web UI (server variant) with am03127-server and two mock panels. |
just webui-firmware | Builds the gzipped web UI the firmware embeds. |
just save-image | Builds web UI and release firmware into firmware.bin. |
just ota <ip> | Uploads firmware.bin to a panel. |
Both web UI recipes serve on http://127.0.0.1:8080/.
API Documentation
The REST API documentation is available as OpenAPI Specification
Parts
17| Qty | Value | Footprint | References |
|---|---|---|---|
| 6 | 100nF | PCM_JLCPCB:C_0402 | C4, C5, C7, C8, C9, C10 |
| 4 | 22uF | PCM_JLCPCB:C_1206 | C1, C2, C3, C6 |
| 1 | 1N5819WS | PCM_JLCPCB:D_SOD-323 | D1 |
| 1 | 4.7uH | Inductor_SMD:L_1008_2520Metric | L1 |
| 1 | AP63205WU | Package_TO_SOT_SMD:TSOT-23-6 | U1 |
| 1 | DC050-T | DC_PowerJack:DC-IN_DC050-T | DC1 |
| 1 | MAX3232 | Package_SO:SOIC-16_3.9x9.9mm_P1.27mm | U3 |
| 1 | PCB-6P4C-90_C189746 | RJ11:RJ11-TH_PCB-6P4C-90_C189746 | RJ11 |
| 1 | XIAO-ESP32-C3-DIP | esp32:XIAO-ESP32C3-DIP | U2 |
Questions
How big is the AM03127-Controller PCB?
It measures 23 × 76 mm and has 2 copper layers, 1.6 mm thick.
What parts does the AM03127-Controller use?
17 parts, built around the MAX3232ID, AP63205WU, 1N5819WS and DC050-T. 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 AM03127-Controller KiCad files?
From the giomf/AM03127-Controller repository on GitHub, at the commit this page was made from: the board is PCB/AM03127-Controller.kicad_pcb and its schematic PCB/AM03127-Controller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the AM03127-Controller design in my own project?
Its repository states no licence, so its author keeps all rights: ask giomf before reusing the design.
Similar boards
- 4 layers68.6 × 53.3 mm

- 2 layers125 × 45 mm

Promatrix-4000-IO
giomf/Promatrix-4000-IO
8-output / 7-input digital IO board (RP2040-based) with USB serial control.
30 parts - 2 layers68.6 × 53.3 mm

- 2 layers139 × 45 mm

Newbatt
jlab-sensing/ENTS-node-hardware
Schematics and design for soil MFC voltage and current sensing
33 parts - 2 layers108.5 × 69.9 mm

- 2 layers70 × 60 mm

ResistojetV1
SimonDaniel605/Development-of-a-Resistojet-Thruster
This project involves the development of a resistojet thruster for nanosatellite station-keeping.
143 partsMIT - 2 layers189.5 × 204.9 mm

SmartSpin2k Panelized
doudar/SmartSpin2k
Transform your spin bike into a Smart Trainer!
749 parts292GPL-2.0 - 2 layers193 × 113 mm
