Skip to content

Site Table of Contents

Home

Welcome to DCC-EX

What is DCC-EX

DCC-EX Product Overview

Conductor Level

Tinkerer level

Engineer level

Getting Started with DCC-EX

The DCC-EX Command Station

EX-CSB1 CommandStation Booster

Features

Connecting

Booster mode

Running a Legacy DC layout

Advantages of using a EX-CommandStation to run a DC layout

Basic functionality

Configuring Default Outputs

Switching between tracks

Reversing Loops

More blocks

Build configuration (config.h)

Motor shield definition (Mandatory)

WiFi settings

Ethernet settings

LCD/OLED support

Disable EEPROM

Delayed startup

WiFi configuration (EX-CSB1 or ESP32 ONLY. Version 5.7.0+ ONLY)

Operating Modes

Changing to Station Mode (ie your home router)

Changing the Access Point defaults

Configuring the Host Name

Turning WiFi On/Off

Clearing WiFi settings

Visiting another router

Displaying WiFi settings

Wifi configuration (Not CSB1 or ESP32)

Setup STA (Station) mode

Setup AP (Access Point) default mode

Setup AP (Access Point) advanced mode

Testing your Command Station

Serial Monitors

Simple testing commands (Main track)

Things to remember

TrackManager

Defaults

myAutomation.h

Engine Driver

Notes

EX-CSB1 in DCC Booster Mode

Configuring the EX-CSB1 as a DCC Booster

Programming DCC locos

The PROG track

Reading/Writing decoder settings

Programming using Serial input commands

Programming using Engine Driver

Programming using EX-Toolbox

Programming with JMRI DecoderPro

Programming using Serial commands

Reading a loco id

Setting a loco id

Reading a CV value

Setting a CV value

DCC Consists

Bit management

Diagnostics when things don't work

ACK detector tuning parameters

Programming with EX-WebThrottle

Programming with Engine Driver

Accessing the DCC-EX page

Read loco address

Write loco address

Read and write CVs of decoders on the Programming Track

More Information

If things dont work

Programming with EX-Toolbox

Using JMRI DecoderPro

Making Changes

Overview - What are Accessories?

Accessory Types

Connecting Accessories

Voltage Differences

Actuators - to make stuff happen

Servo actuators

Digital actuators

Sensors

Track/Layout sensors for automation

Defining sensors

Connecting a servo turnout

Follow the steps below

Define your Turnouts

Test your turnout definitions

Connect your servos to turnouts

PCA9685 Configure additional boards

Hardware device list

I2C – An Introduction

What is I2C?

How does it help?

Buying I2C devices

Rosscoe Trains

DFPlayer Sound player

Suggested uses

Hardware connection

Audio file storage and naming convention

Providing sound files

Testing DFPlayer

Serial connected DFPlayer

CSB1 and ESP32 Serial connections

I2C Connected DFPlayer

SC16IS750 - SC16IS752 Breakout board hookup

I2C address selection

Configuring in myAutomation.h

DS1307 Real Time clock chip

What is EXRAIL?

You DON’T need

Important Background Information

Basic building blocks

A users story

Virtual Bitmap device pins (VPINs)

Creating virtual pins

Using OUTPUT VPINS

Using INPUT VPINs

Using INPUT/OUTPUT VPINs

Buttons and Switches

Detecting a button press

Detecting a switch change

DC Track Control

Emergency stop button

ESTOPALL

ESTOP_PAUSE

ESTOP_RESUME

Advanced scenarios

ESTOP serial commands

Roster for Similar Sound Locos

Route button control

Simple light switch route

Changing button captions

Two separate routes example

Time Control

Time Command

Repeating Time events

Testing Timed Sequences

Display Loco speeds on OLED (Advanced)

Display Track Status on OLED

myAutomation.h

myTrackStatus.h

Lines displayed

Analog sensors

Command Filters

Passing locos between sequences

START(sequence_id)

SENDLOCO(loco_id,sequence_id)

START_SEND(sequence_id)

START_SHARED(sequence_id)

Building a speed test track

Basic driving functions

Loco Functions

AUTOMATIONS

Simple shuttle

Sensor positioning

Creating the basic AUTOMATION

Improved shuttle

Speed changes

Sounds and lights

Signals

Passing loop shuttle

Block Reservations

Basic passing-loop logic

Starting the shuttle

Handling facing trains

Advanced Extras

Saving and Restoring speeds

Random selection

Random time delay

Random choice on a given percentage

Random selection of a path to follow

Consists

Consist Types

Command Station consists with EXRAIL

Controlling trains and decoders directly

Multiple Files in EXRAIL

Maintaining multiple command stations

Naming sequences for easy commands

Using CALL and RETURN

Notes

Using C++ Macros

Flags, Counters and Bitmaps

Creating virtual pins

Use as flags

Use as counters

Use as analogue values (advanced)

Use as binary flag groups (advanced)

Latches

Using STASH to remember where locos are parked

NeoPixel support

Defining the hardware driver

Setting neopixels

Signal Basics

LED Signals

Neopixel signals

Signals with flashing

Amber and Flashing Amber

Semaphore (servo) Signals

DCC Signals

Common signals

Advanced aspect signals

Controlling Sounds in EXRAIL

Playing a sound (PLAY_TRACK, PLAY_REPEAT)

Pause and Resume (PLAY_PAUSE, PLAY_RESUME)

Changing default volume (PLAY_VOLUME)

Stop playing (PLAY_STOP)

Changing current folder (PLAY_FOLDER)

Things that happen at startup

Startup power

Startup - Define Tracks

Defining DCC turnouts

Defining PIN turnouts

Defining Servo turnouts

Important considerations for servo operation

Defining servo based turnout objects

Facing turnouts

Animated turnouts

Toggle turnouts with button or sensor

Lew's Duino Gear boards

DNIN8 8 Input board

DNIN8K 8 Input board

DNOU8 8 Output board

I2C Multiplexors

MCP23017, PCA955x and TCA955x devices

Device variations

Defining devices

TCA8418 keyboard scanner

TM1638 Buttons, leds and 7 segment display

Using buttons and LEDs

Using the 7 Segment display

Trainbrains Devices

Turnout drivers (solenoid and servo)

Signal controller

Sensors

XL9535 Relay Board

EX‑MotorShield8874

Features

Why did we make it

Purchase

Licensing

Assembly with EX-MotorShield8874

Engineering notes

Stacking two motor shields

EX-WiFiShield 8266

Overview

Features

Purchase

Assembly

EX-FastClock

Background

What is EX-FastClock?

Credit where credit is due

Next Steps

Hardware

What you need for EX-FastClock

Calibration

Installation

Libraries

Configuration

Standalone use

Serial Mode

I2C mode

Screen Header

Configure existing clock

Connecting your own FastClock

Operation

Time Control

EXRAIL Commands

Testing Timed Sequences

EX-IOExpander

EX-Turntable

EX-SensorCAM

Introduction

Hardware

Software requirements

Documentation

Outline of install process

Installation Guide

EX-SensorCAM Manual

CONTENTS

Appendix

1. Overview

2. ESP32-CAM

3. Physical Installation

4. Notation & Help commands

5. Configuration

6 PROCESSING4 monitor/console

7 Wiring Requirements

8 Host Communication

9. Methodology of operation

APPENDIX A

APPENDIX B

APPENDIX C

APPENDIX D

APPENDIX E

APPENDIX F

APPENDIX G

APPENDIX H

APPENDIX I

APPENDIX J

APPENDIX K

ADDITIONAL RANDOM NOTES:

Native EX-SensorCAM Command List

Conventions used on this page

Native cam USB & CS cmd formats

EX-SensorCAM Abridged Manual

CONTENTS

Appendix

1. Overview

2. ESP32/WROVER-CAM

3. Physical Installation

4. Notation

5. Configuration

6 PROCESSING4 monitor/console

7 Wiring Requirements

8 Host Communication

APPENDIX A

APPENDIX B

APPENDIX C

APPENDIX E

APPENDIX F

APPENDIX H

APPENDIX J

EX-Toolbox - Overview

Features

Installing EX-Toolbox

Installing EX-Toolbox on an Android phone or tablet

Installing EX-Toolbox on MS Windows & macOS

Connecting to your Command Station

Starting EX-Toolbox

EX-Toolbox User Guide

CV Programming

Issuing DCC-EX Serial Commands (<>)

Speed Matching

Speedometer

Loco Status

Track Manager

Servo Motor Testing and Adjustment

Sensor testing

Current Meter

Roster

Neopixel Setup

Power

Preferences

View log

About

EX-WebThrottle - Overview

What you need to run EX-WebThrottle

Getting started

Run or Install EX-WebThrottle

Run it now (Run from the cloud)

Download

Operation

Throttle

Routes/Automation

Turnouts/Points

CV Programmer

Locomotives

Function Maps

Settings

App

Official DCC-EX Suppliers

Third Party Products and Sellers

Rosscoe

David Yale

Command Station Rack (The Mac Rack)

Sumner's Mega Dual Configuration Case (3D Print)

Hans Tanner's ioTT cube case system (3D Print)

Nebbish's Arduino Mega case for DCC-EX (3D Print)

DCC-EX Merchandise

Using EX-Installer

Installing

Using Device Monitor

EX-Installer

Warning Antivirus Software

Download EX-Installer

Alternatives to the EX-Installer

First Run installer

Select Product to Install

Installing Command Station Software

Device Selection

Version Selection

Configuration

Other options

Compile and Load

Backup

Device Monitor

Stored Configuration Files

Advanced Users - VSCode/PlatformIO

Build Your Own Command Station

Getting the DCC-EX Software

Quick and Easy Arduino Mega

Slightly more difficult Mega

Selecting a power supply

Volts and Amps

Using an EX8874 or CSB1

Other motor shields

What to look for

SAFETY WARNING

Easy build - Arduino Mega

What you need

Step-by-Step Build

Alternative build - Arduino Mega

What you need

Step By Step Build

Complex Build - Nucleo

Nucleo-F4 boards supported

Reference - Nucleo

Complex Build - ESP32

WeMos D1 R32

ESP32-WROOM-32 Development boards

Reference ESP32

Optionally install Wifi

EX-WiFiShield8266

Other shields

ESP-01 or ESP-01S

Optionally install Ethernet

Arduino Network Shield 2

Wiznet WIZ850IO

Sunfounder Ethernet Shield

Installing Command Station firmware

DIY - Other devices

The following devices are NOT supported:

Throttles and Other Controllers

Throttles - By Client Technology

Throttles - By Communication technology

Comparison Table

EX-WebThrottle

Engine Driver

Platforms

Standard Features (all WiThrottle servers)

EX-CommandStation Specific or Advantageous Features

EX-CommandStation Specific Features - when using the DCC-EX Native Protocol

Screenshots

Operation

Using a Bluetooth Gamepad Controller

Adding a Physical Dial (Knob)

Recording a log file in Engine Driver

ThrottleCard

Features

DCC-EX News

Get this in your RSS feed

General DCC-EX News

Frequently Answered Questions (FAQ)

Controlling and Running Trains

Programming and reading DCC decoders

Throttle apps and software

My CSB1 OLED display isnt working or looks "wrong"

Why do I get FAULT pin warnings

Why do my I2C connections fail

Help and Support

Information required for support queries

GitHub

TrainBoard

The DCC-EX Discord Server

Joining and Using Discord

Sharing Code and Configuration Snippets

Discord Channels

Opening a Support Ticket

Raising GitHub Issues

Donations

How We Use Donations

Donation Options

Glossary of Terms

Access Point (AP) Mode

Base Station, Command Station, DCC Command Station, DCC Base Station

Consist, Multiple Unit2¶

DCC++ Commands, , DCC++ Protocol, DCC++ API

DCC-EX Serial Commands, DCC-EX Native Commands, DCC-EX Native Protocol, DCC-EX Native API

Pullup

Pulldown

Roster

SSID

Station (STA) Mode

Turnout (Point2/Switch)¶

VPIN

WiThrottle

WiThrottle Protocol

WiThrottle Server

DCC-EX Serial Command Basics

Notes

DCC-EX Command Protocol Reference

System Commands

Power Control

Locomotive Control

Function Control

Consist Control

Turnout Control

Sensor Control

CV Programming

DCC Accessory Commands

Momentum Control

Output Control

Pin Control

NeoPixel Control

Turntable Control

Sound Control

Throttle Information Commands

Track Manager

Configuration Commands

Diagnostic Commands

Raw DCC Packets

EXRAIL Command List

Advanced config.h settings for Command Station build

Non-standard Motor Shields

TCP/IP Advanced settings

LCD/OLED support

Disable EEPROM

Disable PROG

Redefine DCC boundary between SHORT and LONG loco addresses

Redefine locomotive state table size

Define TURNOUTS and ACCESSORIES to follow norm RCN-213

Handling multiple serial throttles

Bluetooth serial ON ESP32

Booster input pin on ESP32 CS

ESP32 LED Wifi Indicator

SABERTOOTH

Tuning for deprecated UNO/NANO

Track Manager

What is the Track Manager

Using the Track Manager (DCC)

Using the Track Manager (DC)

Connecting Hardware

Configuring the Software

Using EXRAIL to control Track Manager

Where and How for the Code

DC Mode - PWM Frequency

DC Mode - Logic Gate Circuits

DC Mode Track Sync

Timers / Brake Pins

Hardware considerations

HAL Device Templates

Command Station Internal Architecture

Throttle Writers Guide (doc incomplete)

General

Considerations for throttle developers

Key Throttle/Controller Commands

Roster Information

Controlling Locos

Turnouts/Points

DCC Accessories

Automations/Routes

COMMANDS TO AVOID TODO

Gauges

TCP vs UDP

Legacy Command Reference

EX-CSB1 FAQ

CH340 USB Drivers

Track voltage

OLED

Power supply

Fault reporting

Overcurrent reporting

WiFi

Discord

EX-CSB1 Technical Reference

WeMos D1 R32 + EX8874

WiFi reliability

IOREF voltage

One EX8874

Stacked EX8874

ACEBOTT + EX8874

ACEBOTT ESP32 Max v1.0

ACEBOTT vs. WeMos R1 D32

IOREF voltage

One EX8874

Stacked EX8874

Keyestudio IOT ESP32 PLUS Development Board + EX8874

Keyestudio IOT ESP32 PLUS Development Board

Keyestudio IOT ESP32 PLUS Development Board VS WeMos R1 D32

Incorrect IOREF voltage

One EX8874

Stacked EX8874

ESP32 + L298 Shields

Genuine Arduino Motor Shield R3

Clone Motor Shields

Nucleo - USB Drivers

Required for Windows

Upgrade the debugger firmware

Nucleo - Debug

Nucleo - Power

VIN from EX8874

VIN voltage

USB

Nucleo 64 - EX8874

Nucleo 64 - WiFi and Pins

MakerFabs WiFi shield

Serial pins

Pin diagram

Nucleo 144 - EX8874

Stacked EX8874 motor shields on F429ZI F439ZI

EX8874 - F413ZH F446ZE

Nucleo 144 - WiFi

MakerFabs WiFi shield

Serial pins

Pin diagram

Nucleo 144 - Pins

Pin diagrams

8 District PCB

L298P & L298HN Shields

Genuine Arduino R3

Clone shields

Voltage drop

Schematics

I2C Wiring for the Tinkerer

I2C concepts

I2C bus voltage

Qwiic/STEMMA QT

I2C wire length

Combined parallel resistance

Wiring pattern for lower capacitance

Power sources

Tuning an I2C Bus for the Engineer

Guiding Principles

Measurement in situ

Examples

About the DCC-EX Project

A Brief History of DCC-EX

The DCC-EX Team

How Can I Contribute?

Documentation

Development

Web Support

Organisation/Coordination

Code of Conduct

User Personas and Journeys - Front Page Tiles

New to DCC-EX

Ready-to-Run CSB1

DC Ready-to-Run Users

Existing Users Adding Accessories

Existing Users Looking to Automate/Animate

Large Club Layout

Downloader

Release Checklist

Content

Release QA Items

Styling

Team Info

Release To Do

Contributing to the public domain code

Development Environment

Coding Style Guidelines

Using the Repository

Pull Request Process

Contributing to Documentation

How to Contribute

What You Need to Install

Getting Started

Previewing and building MkDocs

Documentation Standards

General Content

Do Not Duplicate Content

Directory Naming, Page Naming, and Titles

Address all MkDocs Warnings and Errors

Directory Structure and Navigation

Formatting Guide

Headings

Glossary Terms and Linking

Code blocks

What the html browser sees is this

What the mkdocs author sees

Using Our Logos

Light and Dark Theme

Branded and Non-Branded Product Logos

Logo Sizing

Working with MkDocs

Previewing and Deploying MkDocs

DCC-EX CSS Styling

DCC-EX JavaScript Files

MkDocs Material Extensions

MkDocs Plugins

Mermaid Diagrams

Flowchart

Sequence Diagram

State Diagram