Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <title>DCC-EX Serial Commands (Native API) & Arduino/ESP32 Library — Single File HTML</title>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <style>
- :root {
- --bg: #0b0b0c;
- --fg: #e7e7e9;
- --muted: #a6a6ad;
- --code-bg: #111216;
- --code-border: #22232a;
- --link: #7aa2ff;
- --accent: #c792ea;
- }
- @media (prefers-color-scheme: light) {
- :root {
- --bg: #fff;
- --fg: #222;
- --muted: #555;
- --code-bg: #f6f8fa;
- --code-border: #e1e4e8;
- --link: #0a58ca;
- --accent: #7b3fe4;
- }
- }
- html, body {
- background: var(--bg);
- color: var(--fg);
- margin: 0;
- padding: 0;
- font: 16px/1.6 system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji";
- }
- .page { max-width: 1000px; margin: 2rem auto 5rem auto; padding: 0 1.2rem; }
- h1, h2, h3, h4 { line-height: 1.25; margin: 1.6em 0 .6em; font-weight: 800; }
- h1 { font-size: 2.0rem; border-bottom: 1px solid var(--code-border); padding-bottom: .3rem; }
- h2 { font-size: 1.6rem; border-bottom: 1px solid var(--code-border); padding-bottom: .2rem; }
- h3 { font-size: 1.3rem; }
- h4 { font-size: 1.1rem; color: var(--muted); }
- p { margin: 0.8rem 0; }
- a { color: var(--link); text-decoration: none; }
- a:hover { text-decoration: underline; }
- code, pre, kbd {
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
- font-size: .925em;
- }
- pre {
- background: var(--code-bg);
- border: 1px solid var(--code-border);
- padding: 1rem;
- overflow: auto;
- border-radius: .6rem;
- }
- .note { color: var(--muted); }
- table { width: 100%; border-collapse: collapse; margin: 1rem 0 1.6rem 0; }
- th, td { border: 1px solid var(--code-border); padding: .55rem .6rem; vertical-align: top; }
- thead th { background: color-mix(in oklab, var(--accent) 12%, transparent); text-align: left; }
- .cmd code { white-space: pre-wrap; }
- ul { padding-left: 1.4rem; }
- li + li { margin-top: .2rem; }
- hr { border: 0; border-top: 1px solid var(--code-border); margin: 2rem 0; }
- .small { font-size: .95rem; color: var(--muted); }
- </style>
- </head>
- <body>
- <div class="page">
- <h1>DCC-EX Serial Commands (Native API) & Arduino/ESP32 Library</h1>
- <h1>Guide</h1>
- <h3>Quick Reference: Commands, Descriptions, and Resource Links</h3>
- <p class="small"><strong>Compiled:</strong> October 07, 2025</p>
- <h2>Power management</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><0|1 [MAIN|PROG|JOIN]></code></td><td>Turn track power off/on; <code>JOIN</code> temporarily ties PROG to MAIN (MAIN signal mirrored to PROG).</td></tr>
- <tr class="cmd"><td><code><D RESET></code></td><td>Reboot the Command Station.</td></tr>
- <tr class="cmd"><td><code><J I> / <JI></code></td><td>Report live current (mA) per track channel.</td></tr>
- <tr class="cmd"><td><code><J G> / <JG></code></td><td>Report configured max/overcurrent trip thresholds (mA) per track.</td></tr>
- </tbody>
- </table>
- <h2>Track Manager (A..H channels)</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><= track mode [cab]></code></td><td>Set channel A..H to <code>MAIN</code> | <code>MAIN_INV</code> | <code>MAIN_AUTO</code> | <code>PROG</code> | <code>DC</code> | <code>DC_INV/DCX</code> | <code>NONE</code> (cab required for DC/DCX).</td></tr>
- <tr class="cmd"><td><code><=></code></td><td>Dump Track Manager config for all channels.</td></tr>
- <tr class="cmd"><td><code><0|1 [A..H]></code></td><td>Turn power off/on for a specific Track Manager channel.</td></tr>
- </tbody>
- </table>
- <p class="note"><strong>Note:</strong> In DC/DCX mode, set PWM frequency via F29/F30/F31 from a throttle; stop before changing.</p>
- <h2>Cab (loco) control</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><t cab></code></td><td>Request a broadcast of the cab’s current speed/functions (<code><l ...></code>).</td></tr>
- <tr class="cmd"><td><code><t cab speed dir></code></td><td>Set speed (0–127, -1 = E-stop) and direction (1=forward, 0=reverse).</td></tr>
- <tr class="cmd"><td><code><!></code></td><td>Emergency stop for all cabs currently in reminders.</td></tr>
- <tr class="cmd"><td><code><F cab funct state></code></td><td>Set decoder function F0..F68 (state: 0|1).</td></tr>
- <tr class="cmd"><td><code><- [cab]></code></td><td>Forget one cab or all cabs from reminders (clears repeating throttle messages).</td></tr>
- <tr class="cmd"><td><code><D SPEEDSTEPS></code></td><td>Select SPEED28 or SPEED128 (console message).</td></tr>
- <tr class="cmd"><td><code>(legacy) <f ...>, <t reg ...></code></td><td>Deprecated legacy forms for functions/speed.</td></tr>
- </tbody>
- </table>
- <h2>Roster</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><J R> / <JR></code></td><td>List roster entry IDs.</td></tr>
- <tr class="cmd"><td><code><J R id> / <JR id></code></td><td>Get roster details for an entry (description + function labels).</td></tr>
- </tbody>
- </table>
- <h2>Turnouts / Points — operate</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><T></code></td><td>List defined turnout IDs and states.</td></tr>
- <tr class="cmd"><td><code><T id state></code></td><td>Control: 1/T=throw, 0/C=close, X=examine (returns device details).</td></tr>
- <tr class="cmd"><td><code><J T> / <JT></code></td><td>List defined turnout IDs.</td></tr>
- <tr class="cmd"><td><code><J T id> / <JT id></code></td><td>Get turnout state and optional description.</td></tr>
- </tbody>
- </table>
- <h2>Turntables / Traversers — operate</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><I></code></td><td>List defined turntable/traverser IDs and current positions.</td></tr>
- <tr class="cmd"><td><code><I id></code></td><td>Query current position.</td></tr>
- <tr class="cmd"><td><code><I id position></code></td><td>Rotate DCC turntable (no movement feedback; returns moving=0).</td></tr>
- <tr class="cmd"><td><code><I id position activity></code></td><td>Rotate EX-Turntable (reports moving status).</td></tr>
- <tr class="cmd"><td><code><J O> / <JO></code></td><td>List defined turntable/traverser IDs.</td></tr>
- <tr class="cmd"><td><code><J O id> / <JO id></code></td><td>Get device type, current position, count, description.</td></tr>
- <tr class="cmd"><td><code><J P id> / <JP id></code></td><td>List all defined positions for device id.</td></tr>
- </tbody>
- </table>
- <h2>Routes / Automations (EXRAIL objects)</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><J A></code></td><td>List available route/automation IDs.</td></tr>
- <tr class="cmd"><td><code><J A id> / <JA id></code></td><td>Get type (R/A) and description for a route/automation.</td></tr>
- </tbody>
- </table>
- <h2>System information</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><c></code></td><td>Report current draw and limits (structured).</td></tr>
- <tr class="cmd"><td><code><s></code></td><td>Report firmware/hardware and list defined turnouts.</td></tr>
- <tr class="cmd"><td><code><#></code></td><td>Report maximum supported cab (loco) slots.</td></tr>
- </tbody>
- </table>
- <h2>DCC accessories</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><a addr subaddr activate></code></td><td>Operate accessory via (address 0–511, subaddress 0–3); 0=deactivate/close, 1=activate/throw.</td></tr>
- <tr class="cmd"><td><code><a linear_addr activate></code></td><td>Operate accessory via linear address 1–2044; 0=deactivate/close, 1=activate/throw.</td></tr>
- <tr class="cmd"><td><code><A address aspect></code></td><td>Send extended accessory packet (e.g., set signal aspect).</td></tr>
- </tbody>
- </table>
- <h2>Sensors & Signals (query/control)</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><Q></code></td><td>Report active/inactive state for all defined sensors.</td></tr>
- <tr class="cmd"><td><code><S></code></td><td>List defined sensors with vpin and pullup flag.</td></tr>
- <tr class="cmd"><td><code></ RED id> / </ AMBER id> / </ GREEN id></code></td><td>Set a 3‑aspect signal via its defined vpin.</td></tr>
- </tbody>
- </table>
- <h2>WiFi control & passthrough</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><+X></code></td><td>Force “WiFi connected” mode in CS loop (useful with custom networking).</td></tr>
- <tr class="cmd"><td><code><+command></code></td><td>Send <code>AT+command</code> to the WiFi module (ESP8266/ESP32 AT firmware).</td></tr>
- <tr class="cmd"><td><code><+></code></td><td>Enter raw AT passthrough (exit with <code>!</code>).</td></tr>
- <tr class="cmd"><td><code><C WIFI "ssid" "password"></code></td><td>ESP32 only: STA connect to an existing WiFi network.</td></tr>
- </tbody>
- </table>
- <h2>EXRAIL — interactive serial controls</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><D EXRAIL ON|OFF></code></td><td>Enable/disable EXRAIL logging to serial monitor.</td></tr>
- <tr class="cmd"><td><code></PAUSE></code></td><td>Pause all EXRAIL automation (also E‑stops locos).</td></tr>
- <tr class="cmd"><td><code></RESUME></code></td><td>Resume all EXRAIL automation (restores prior speeds).</td></tr>
- <tr class="cmd"><td><code></></code></td><td>Show EXRAIL running task info.</td></tr>
- <tr class="cmd"><td><code></ START [loco_addr] route_id></code></td><td>Start a route/automation (optionally specify loco).</td></tr>
- <tr class="cmd"><td><code></ KILL task_id></code></td><td>Terminate a running EXRAIL task (advanced use).</td></tr>
- <tr class="cmd"><td><code></ RESERVE block_id> / </ FREE block_id></code></td><td>Manually reserve/free a virtual block (0–255).</td></tr>
- <tr class="cmd"><td><code></ LATCH vpin> / </ UNLATCH vpin></code></td><td>Force a sensor latch ON / release it (0–255).</td></tr>
- </tbody>
- </table>
- <h2>EX‑FastClock</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><JC minutes speed></code></td><td>Start fast clock (minutes since midnight, with speed factor).</td></tr>
- <tr class="cmd"><td><code><JC></code></td><td>Read fast clock time (minutes since midnight).</td></tr>
- </tbody>
- </table>
- <h2>CV programming — MAIN</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><b cab cv bit value></code></td><td>Write a single bit within a CV on the main track.</td></tr>
- <tr class="cmd"><td><code><w cab cv value></code></td><td>Write a CV byte on the main track.</td></tr>
- </tbody>
- </table>
- <h2>CV programming — SERVICE (PROG track)</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><R cv></code></td><td>Read CV; response: <code><v cv value></code>.</td></tr>
- <tr class="cmd"><td><code><R></code></td><td>Read decoder (cab) address.</td></tr>
- <tr class="cmd"><td><code><V cv bit onOff></code></td><td>Verify/read one bit in a CV against expected value.</td></tr>
- <tr class="cmd"><td><code><V cv value></code></td><td>Verify/read a full CV against expected value.</td></tr>
- <tr class="cmd"><td><code><B cv bit onOff></code></td><td>Write a bit to a CV (legacy response format).</td></tr>
- <tr class="cmd"><td><code><W cv value></code></td><td>Write a CV byte (echoes new value or -1).</td></tr>
- <tr class="cmd"><td><code><W address></code></td><td>Program the locomotive address and verify.</td></tr>
- <tr class="cmd"><td><code><P register hex1 [hex2..hex5]></code></td><td>Send raw DCC packet to PROG track.</td></tr>
- <tr class="cmd"><td><code>(deprecated)</code></td><td><code><B cv bit value cb cb></code>, <code><W cv value cb cb></code>, <code><R cv cb cb></code> legacy callback forms.</td></tr>
- </tbody>
- </table>
- <h2>Direct packet — MAIN</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><M register hex1 [hex2..hex5]></code></td><td>Send raw DCC packet to MAIN (debug/testing).</td></tr>
- </tbody>
- </table>
- <h2>Programming track tuning</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><D ACK LIMIT mA></code></td><td>Override ACK current threshold (mA).</td></tr>
- <tr class="cmd"><td><code><D ACK MIN uS> / <D ACK MAX uS></code></td><td>Override ACK pulse min/max duration (µs).</td></tr>
- <tr class="cmd"><td><code><D ACK RETRY num></code></td><td>Set number of CV read/write retries.</td></tr>
- <tr class="cmd"><td><code><D PROGBOOST></code></td><td>Temporarily lift PROG-track current limit while idle.</td></tr>
- </tbody>
- </table>
- <h2>Configure: Turnouts / Points</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><T id DCC addr subaddr></code></td><td>Define turnout via DCC accessory address/subaddress.</td></tr>
- <tr class="cmd"><td><code><T id DCC linearAddr></code></td><td>Define turnout via DCC linear address.</td></tr>
- <tr class="cmd"><td><code><T id VPIN vpin></code></td><td>Define turnout on a vpin/digital output.</td></tr>
- <tr class="cmd"><td><code><T id SERVO vpin thrownPos closedPos profile></code></td><td>Define servo turnout on vpin; profile 0=instant..4=bounce.</td></tr>
- <tr class="cmd"><td><code><T id></code></td><td>Delete a turnout definition by ID.</td></tr>
- <tr class="cmd"><td><code><D SERVO vpin value [profile]></code></td><td>Directly move a servo; profile 0..4.</td></tr>
- </tbody>
- </table>
- <h2>Configure: Turntables / Traversers</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><I id DCC home></code></td><td>Define a DCC turntable/traverser with home angle.</td></tr>
- <tr class="cmd"><td><code><I id EXTT vpin home></code></td><td>Define an EX‑Turntable device at vpin with home angle.</td></tr>
- <tr class="cmd"><td><code><I id ADD position value angle></code></td><td>Add a position (value=EX‑Turntable steps or DCC linear addr).</td></tr>
- </tbody>
- </table>
- <h2>Configure: Sensors</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><S id vpin pullup></code></td><td>Create/update a sensor (pullup: 1=use pull‑up=ACTIVE‑LOW, 0=no pull‑up=ACTIVE‑HIGH).</td></tr>
- <tr class="cmd"><td><code><S id></code></td><td>Delete a sensor.</td></tr>
- <tr class="cmd"><td><code></ LATCH vpin> / </ UNLATCH vpin></code></td><td>Force sensor latched ON / release (IDs 0–255).</td></tr>
- </tbody>
- </table>
- <h2>Configure: Outputs (vpins)</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><z vpin> or <z -vpin></code></td><td>Quick set output ACTIVE/HIGH or INACTIVE/LOW (no predef).</td></tr>
- <tr class="cmd"><td><code><Z id vpin iflag></code></td><td>Create/update an output with flags (invert, restore/force at boot).</td></tr>
- <tr class="cmd"><td><code><Z id></code></td><td>Delete an output.</td></tr>
- <tr class="cmd"><td><code><Z></code></td><td>List outputs (<code><Y id vpin iflag state></code>).</td></tr>
- <tr class="cmd"><td><code><Z id state></code></td><td>Set output ACTIVE/INACTIVE.</td></tr>
- </tbody>
- </table>
- <h2>EEPROM management</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><D EEPROM></code></td><td>Dump stored definitions (diagnostic).</td></tr>
- <tr class="cmd"><td><code><E></code></td><td>Store definitions (turnouts, sensors, outputs) to EEPROM.</td></tr>
- <tr class="cmd"><td><code><e></code></td><td>Erase all stored turnouts, sensors, outputs from EEPROM.</td></tr>
- </tbody>
- </table>
- <h2>Diagnostics (general/HAL/network)</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><D ACK ON|OFF></code></td><td>Toggle programming ACK diagnostics.</td></tr>
- <tr class="cmd"><td><code><D CMD ON|OFF></code></td><td>Toggle serial command parser diagnostics.</td></tr>
- <tr class="cmd"><td><code><D ETHERNET ON|OFF> / <D WIFI ON|OFF> / <D WIT ON|OFF></code></td><td>Toggle respective diagnostics.</td></tr>
- <tr class="cmd"><td><code><D LCN ON|OFF></code></td><td>Toggle LCN interface diagnostics.</td></tr>
- <tr class="cmd"><td><code><D CABS></code></td><td>Show cab slots used/max (console).</td></tr>
- <tr class="cmd"><td><code><D HAL SHOW></code></td><td>Show HAL devices (servo/GPIO expanders) and assigned vpins.</td></tr>
- <tr class="cmd"><td><code><D RAM></code></td><td>Show free RAM (console).</td></tr>
- <tr class="cmd"><td><code><D ANIN vpin></code></td><td>Read analogue value from a vpin.</td></tr>
- <tr class="cmd"><td><code><D ANOUT vpin value [param2]></code></td><td>Write analogue value to vpin (driver‑specific <code>param2</code>).</td></tr>
- </tbody>
- </table>
- <h2>Other</h2>
- <table>
- <thead><tr><th style="width:38%">Command</th><th>Description</th></tr></thead>
- <tbody>
- <tr class="cmd"><td><code><U cmd></code></td><td>Reserved user command (passes through user filter).</td></tr>
- </tbody>
- </table>
- <h2>Device‑specific consoles (add‑ons)</h2>
- <h3>EX‑Turntable</h3>
- <p><code><C></code>, <code><D></code>, <code><E></code>, <code><H></code>, <code><M steps activity></code>, <code><R></code></p>
- <p class="note">On‑device interactive serial: calibrate, debug, erase EEPROM, home, move to steps, reboot.</p>
- <h3>EX‑IOExpander</h3>
- <p><code><D> [delay]</code>, <code><T A|I|O|P></code>, <code><T S vpin value profile></code>, <code><T></code></p>
- <p class="note">On‑device diagnostics & pin test modes; toggles periodic dumps and simple I/O/servo tests.</p>
- <h2>Arduino/ESP32 Libraries for DCC / DCC‑EX</h2>
- <table>
- <thead><tr><th style="width:22%">Library</th><th style="width:38%">URL(s)</th><th>Summary</th></tr></thead>
- <tbody>
- <tr>
- <td>DCCEXProtocol</td>
- <td>
- <a href="https://github.com/DCC-EX/DCCEXProtocol">github.com/DCC-EX/DCCEXProtocol</a><br>
- <a href="https://dcc-ex.com/DCCEXProtocol/index.html">dcc-ex.com/DCCEXProtocol</a><br>
- <a href="https://docs.arduino.cc/libraries/dccexprotocol/">docs.arduino.cc/libraries/dccexprotocol</a>
- </td>
- <td>Non‑blocking C++ client for the DCC‑EX native protocol (serial/TCP). Ideal for hardware throttles on ESP32/Arduino; supports CV R/W and EXRAIL hand‑off.</td>
- </tr>
- <tr>
- <td>NmraDcc</td>
- <td>
- <a href="https://github.com/mrrwa/NmraDcc">github.com/mrrwa/NmraDcc</a><br>
- <a href="https://docs.arduino.cc/libraries/nmradcc/">docs.arduino.cc/libraries/nmradcc</a>
- </td>
- <td>Widely‑used Arduino library for NMRA DCC decoder implementations (mobile/accessory). Receives/decodes DCC from track; supports many AVR and some 32‑bit cores.</td>
- </tr>
- <tr>
- <td>AP_DCC_Library</td>
- <td>
- <a href="https://github.com/aikopras/AP_DCC_library">github.com/aikopras/AP_DCC_library</a><br>
- <a href="https://docs.arduino.cc/libraries/ap_dcc_library/">docs.arduino.cc/libraries/ap_dcc_library</a>
- </td>
- <td>Modular NMRA/RCN DCC decoder library; aims for cleaner structure vs NmraDcc and portability across MCUs.</td>
- </tr>
- <tr>
- <td>CmdrArduino</td>
- <td><a href="https://github.com/Railstars/CmdrArduino">github.com/Railstars/CmdrArduino</a></td>
- <td>C++ framework for building an NMRA‑compliant DCC command station on Arduino‑class MCUs.</td>
- </tr>
- <tr>
- <td>MynaBay DCC_Decoder</td>
- <td><a href="https://github.com/MynaBay/DCC_Decoder">github.com/MynaBay/DCC_Decoder</a></td>
- <td>Arduino DCC decoder library (classic implementation for simple decoders and experiments).</td>
- </tr>
- <tr>
- <td>OpenMRNLite (LCC/OpenLCB)</td>
- <td>
- <a href="https://github.com/openmrn/OpenMRNLite">github.com/openmrn/OpenMRNLite</a><br>
- <a href="https://docs.arduino.cc/libraries/openmrnlite/">docs.arduino.cc/libraries/openmrnlite</a>
- </td>
- <td>Arduino/ESP32 library for NMRA LCC (OpenLCB) layout control networking; complementary to DCC for signals, sensors, nodes.</td>
- </tr>
- <tr>
- <td>ESP32 hardware notes (RMT for DCC)</td>
- <td><a href="https://dcc-ex.com/reference/hardware/microcontrollers/esp32.html">dcc-ex.com/reference/hardware/microcontrollers/esp32.html</a></td>
- <td>DCC‑EX guidance on generating clean DCC with ESP32’s RMT peripheral and supported boards.</td>
- </tr>
- <tr>
- <td>DCC++ESP (third‑party command station)</td>
- <td><a href="https://github.com/WolfgangGitHub/DCCppESP32">github.com/WolfgangGitHub/DCCppESP32</a></td>
- <td>ESP32‑based DCC++‑compatible command station with web/JMRI support; useful as an alternative platform or reference.</td>
- </tr>
- </tbody>
- </table>
- <h2>Notes</h2>
- <ul>
- <li>All commands are wrapped in angle brackets, e.g., <code><t cab></code>. Opcodes (the first token) are case‑sensitive; keyword parameters are not.</li>
- <li>The Command Station broadcasts some responses (e.g., <code><l ...></code> after throttle ops); don’t expect a direct reply to every command.</li>
- <li>EXRAIL is a DSL authored in <code>myAutomation.h</code> for automations; the serial commands above under “EXRAIL — interactive” are for runtime diagnostics/control, not for defining routes/sequences.</li>
- </ul>
- <h2>References</h2>
- <ol>
- <li><a href="https://dcc-ex.com/reference/software/command-summary-consolidated.html">dcc-ex.com/reference/software/command-summary-consolidated.html</a></li>
- <li><a href="https://dcc-ex.com/exrail/exrail-command-reference.html">dcc-ex.com/exrail/exrail-command-reference.html</a></li>
- <li><a href="https://dcc-ex.com/ex-turntable/test-and-tune.html">dcc-ex.com/ex-turntable/test-and-tune.html</a></li>
- <li><a href="https://dcc-ex.com/ex-ioexpander/testing.html">dcc-ex.com/ex-ioexpander/testing.html</a></li>
- <li><a href="https://dcc-ex.com/reference/tools/serial-monitor.html">dcc-ex.com/reference/tools/serial-monitor.html</a></li>
- <li><a href="https://dcc-ex.com/ex-commandstation/advanced-setup/supported-wifi/wifi-config.html">dcc-ex.com/ex-commandstation/advanced-setup/supported-wifi/wifi-config.html</a></li>
- <li><a href="https://dcc-ex.com/DCCEXProtocol/index.html">dcc-ex.com/DCCEXProtocol/index.html</a></li>
- <li><a href="https://github.com/DCC-EX/DCCEXProtocol">github.com/DCC-EX/DCCEXProtocol</a></li>
- <li><a href="https://docs.arduino.cc/libraries/dccexprotocol/">docs.arduino.cc/libraries/dccexprotocol</a></li>
- <li><a href="https://github.com/mrrwa/NmraDcc">github.com/mrrwa/NmraDcc</a></li>
- <li><a href="https://docs.arduino.cc/libraries/nmradcc/">docs.arduino.cc/libraries/nmradcc</a></li>
- <li><a href="https://github.com/aikopras/AP_DCC_library">github.com/aikopras/AP_DCC_library</a></li>
- <li><a href="https://docs.arduino.cc/libraries/ap_dcc_library/">docs.arduino.cc/libraries/ap_dcc_library</a></li>
- <li><a href="https://github.com/Railstars/CmdrArduino">github.com/Railstars/CmdrArduino</a></li>
- <li><a href="https://github.com/MynaBay/DCC_Decoder">github.com/MynaBay/DCC_Decoder</a></li>
- <li><a href="https://github.com/openmrn/OpenMRNLite">github.com/openmrn/OpenMRNLite</a></li>
- <li><a href="https://docs.arduino.cc/libraries/openmrnlite/">docs.arduino.cc/libraries/openmrnlite</a></li>
- <li><a href="https://dcc-ex.com/reference/hardware/microcontrollers/esp32.html">dcc-ex.com/reference/hardware/microcontrollers/esp32.html</a></li>
- </ol>
- <hr>
- </div>
- </body>
- </html>
Add Comment
Please, Sign In to add comment