Skip to the content
PCBKitNew board
2 layers23 × 76 mmAM03127-Controller, the printed circuit board in 3D

AM03127-Controller

giomf/AM03127-Controller3

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

4

README

README.md

AM03127 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.

DirectoryWhat it is
am03127-firmwareFirmware 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-webuiWeb UI written in Rust with Leptos (WebAssembly). Edit pages and schedules, sync the clock, upload firmware.
am03127-serverServer that consolidates all panels into one web UI and forwards each panel's API.
am03127-cliCommand line tool to control several panels at once.
am03127-clientShared HTTP client for the panel API and the panel-config.toml parser. Used by the CLI, the web UI and the server.
am03127-commandsShared 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:

sh
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, -dirty if the tree had uncommitted changes
  • uptime_secs, rssi (Wi-Fi dBm), heap_free / heap_used (bytes)
  • panel_ok: whether the panel answered the last command (null before 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.

sh
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:

sh
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 options

Panel configuration

The CLI and the server read the panels from a panel-config.toml:

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 --panels

Nix

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.
nix
services.am03127-server = {
  enable = true;
  configFile = ./panel-config.toml;
  port = 80;
  openFirewall = true;
};

Development

RecipeWhat it does
just webuiWeb UI (device variant) with live reload against a mock panel (am03127-webui/mock.py).
just webui-serverWeb UI (server variant) with am03127-server and two mock panels.
just webui-firmwareBuilds the gzipped web UI the firmware embeds.
just save-imageBuilds 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
QtyValueFootprintReferences
6100nFPCM_JLCPCB:C_0402C4, C5, C7, C8, C9, C10
422uFPCM_JLCPCB:C_1206C1, C2, C3, C6
11N5819WSPCM_JLCPCB:D_SOD-323D1
14.7uHInductor_SMD:L_1008_2520MetricL1
1AP63205WUPackage_TO_SOT_SMD:TSOT-23-6U1
1DC050-TDC_PowerJack:DC-IN_DC050-TDC1
1MAX3232Package_SO:SOIC-16_3.9x9.9mm_P1.27mmU3
1PCB-6P4C-90_C189746RJ11:RJ11-TH_PCB-6P4C-90_C189746RJ11
1XIAO-ESP32-C3-DIPesp32:XIAO-ESP32C3-DIPU2

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 mmSFduino UNO S2, the printed circuit board in 3D

    SFduino UNO S2

    HalfSweet/SFduino-UNO-S2

    SF32LB52 Devkit

    133 parts2
  • 2 layers125 × 45 mmPromatrix-4000-IO, the printed circuit board in 3D

    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 mmFTUno, the printed circuit board in 3D

    FTUno

    HackableElectronics/FTUno

    Arduino Uno R3 compatible development board

    60 partsGPL-3.0
  • 2 layers139 × 45 mmNewbatt, the printed circuit board in 3D

    Newbatt

    jlab-sensing/ENTS-node-hardware

    Schematics and design for soil MFC voltage and current sensing

    33 parts
  • 2 layers108.5 × 69.9 mmUsbpd adapter, the printed circuit board in 3D

    Usbpd adapter

    fachat/pcb_bits

    Various libs for symbols, footprints, partial schematics

    132 parts
  • 2 layers70 × 60 mmResistojetV1, the printed circuit board in 3D

    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 mmSmartSpin2k Panelized, the printed circuit board in 3D

    SmartSpin2k Panelized

    doudar/SmartSpin2k

    Transform your spin bike into a Smart Trainer!

    749 parts292GPL-2.0
  • 2 layers193 × 113 mmSerial hat, the printed circuit board in 3D

    Serial hat

    colinleroy/a2tools

    Stuff I write for my Apple //c

    35 parts92