Dragonframe DMC v2 USB bridge for DIY motorized camera sliders — C++ / PlatformIO on a Waveshare RP2040-Zero, talking SliderMC ASCII over UART.
DF_DMC_2_MC lets Dragonframe Arc drive the same motion board as the physical panel (SliderCtrl). The PC speaks binary DMC v2 on USB CDC; this Zero translates millimetre moves, path play, GIO, camera, and live DMX onto SliderMC’s UART contract (VH, CG, MT, PG, …).
Use it instead of a UIC on that UART, not in parallel. Rail, motor, and housing stay yours.
Documentation: docs/README.md
Slider context (rail, panel, MC UART): SliderDoc.
Dragonframe (PC)
USB CDC — binary DMC v2 (device type dmc-lite)
DF_DMC_2_MC (RP2040-Zero)
UART 115200 GP12 TX / GP13 RX
SliderMC
- Connect as dmc-lite — hello name
jDF-MC V1 <motors>M+<servos>S+6L+4O+4I+CT+DMX; Arc steps per unit = 1000 - Units — 1000 DMC steps = 1 mm or 1 deg (same for speed/accel)
- Live GIO — 4 out (GP1–4) / 4 in (GP5–8) on this Zero, not MC extenders
- DMX512 — 512 channels on GP0 (PIO UART + MAX485 for a real universe). Channels 1–6 also drive DMX1–DMX6 PWM at 18 kHz on GP29, GP28, GP27, GP26, GP15, GP14 (high-active, duty = level/255)
- MOVE — GP11 high while the verbose status letter is
M,A,B,H, orP - Camera / bloop — GP9 shutter + MC
CT; GP10 buzzer + MCBE - Path upload — DF frames → SliderMC
PD/PG(0-based inclusive; reverse if start > end) - Simulator —
-DSIMULATE(default): 1-axis stand-in if no MC answers
No compiler and no PlatformIO. Board: Waveshare RP2040-Zero.
- Download
DF_DMC_2_MC-<tag>-rp2040zero.uf2from the Releases page. - Hold BOOTSEL, plug in USB, then release BOOTSEL.
- Copy the UF2 onto the
RPI-RP2drive. The board reboots into the new firmware.
The file is the default firmware, including -DSIMULATE (a 1-axis stand-in only if no SliderMC answers). USB CDC is binary DMC, not a text console.
A new file is built when a v* tag is pushed. That tag's commit must already contain this workflow. Rebuild an existing tag from the Actions page with Run workflow.
- Install VS Code and the PlatformIO IDE extension.
- File → Open Folder → this repository (
DF_DMC_2_MC). - PlatformIO: Build / Upload.
- Dragonframe: Scene → Connections → device type dmc-lite → this COM port → Connect.
- In Arc, set steps per unit = 1000.
Shared DMC framing, the path upload table, DMX, and GIO come from the sibling checkout DF_DMC_Common (../DF_DMC_Common). Clone it next to this repo before building.
USB CDC is binary DMC — do not use the PlatformIO serial monitor as a console. Details: docs/build.md.
PC smoke test (Dragonframe disconnected): python pc_dmc_test.py COM21 --sequence hi — see docs/build.md.
| Topic | Document |
|---|---|
| Overview / Connect / units | docs/overview.md |
| Build / flash / PC test | docs/build.md |
| GPIO / UART / wiring | docs/pins.md |
| DMC opcode → MC map | docs/mapping.md |
| SliderMC UART | contract/protocol.md |
| Official DMC v2 (Dragonframe) | DMC-Protocol-2024-08-13.pdf |
src/config.h Pins, limits, 1000 steps = 1 mm/deg
src/path_store DF upload → PD samples (positions in DF_DMC_Common)
src/mc_client SliderMC UART + simulator
src/status_led WS2812 / classic LED
src/bridge USB DMC dispatch
src/main.cpp setup() / loop()
pc_dmc_test.py Host DMC smoke test
Copyright (c) 2026 Jochen Krapf <jk@nerd2nerd.org>
Licensed under the MIT License.
Company names and product names mentioned in this project are trademarks or registered trademarks of their respective owners. Use here is for identification only.