Your layout. Your way. One board at a time.
User Reference — Release 25 and later
The Panel Controller is a System2 board designed for mimic panels and control desks. It connects your physical push buttons and toggle switches to the rest of your layout, and drives LEDs to show the current state of points, signals, and track occupancy.
It provides:
System2 is a modern, British-designed control platform for model railway layouts of every size. It was built from the ground up to be simple for newcomers, yet powerful enough for the largest exhibition layouts. System2 is the exclusive control system behind Pete Waterman's The Grand Challenge — holder of the Guinness World Record for the largest portable model railway at 694.9 metres of track.
Every System2 board carries its own built-in administration page, so there is no single computer or central controller that everything depends on. You configure each board from any web browser on a phone, tablet, or PC — no special software to install, no apps to download.
This guide covers Release 25 and later of the Panel Controller firmware. If your board is running an earlier version, you can update it over the internet in minutes (see Software Updates).
Before diving into the software, let’s get your Panel Controller physically connected. This section walks you through the board layout, what each connector and button does, and how to wire boards together on the CAN bus.
The annotated photograph below shows a Panel Controller with all its connectors and key features identified.
| Feature | Description |
|---|---|
| Dual LED connectors × 16 | 16 pairs of header pins along the top edge. Each pair drives one LED (or LED pair). Plug in the LED leads with the black lead towards the outer edge of the board. The three-position jumper block (NORM / LEDS / COMP) selects the output wiring mode for your LEDs. |
| Input connectors × 16 | 16 pairs of header pins along the bottom edge, labelled SIG (signal) and GND (ground). Plug in the leads with the black lead towards the outer edge. Connect your push buttons, toggle switches, or sensors here. |
| Power Connector | 12 V DC, any polarity, 1.5 A maximum. Two-position screw terminal on the right-hand side of the board. |
| Network Connector | Two-position screw terminal for the CAN bus: CAN-H and CAN-L. Observe polarity — connect H to H and L to L on every board. |
| CAN Network termination jumper | Activates a built-in 120 Ω termination resistor. Leave this jumper fitted on the first and last boards of the CAN bus, and remove it from all boards in between (see Termination Jumpers). |
| Board name and serial number | Printed on the left edge. The board name (e.g. panel-d07c10) is also the Wi-Fi hotspot name and the hostname you type into a browser to access the board. |
| Wi-Fi Hotspot start button | Press and hold during power-up to force the board into Wi-Fi hotspot mode. Useful for initial setup or if the board cannot reach your Wi-Fi network. |
| RUN LED | Status indicator (not shown in the photo — located near the centre of the board, labelled RUN). In normal operation it flashes at 1 Hz (once per second). A fast flash (10 Hz) means the board is in hotspot/access-point mode. A rapid flutter indicates the board is being identified from the web interface. |
| PWR LED | Power indicator. Lights up when the board is receiving 12 V power. |
When your Panel Controller is brand new (or after a Wi-Fi reset), it does not yet know your Wi-Fi network name and password. It will create its own temporary hotspot so you can tell it which network to join. You only need to do this once — the board remembers your Wi-Fi details permanently, even after power cuts and software updates.
Even better, once one board knows your Wi-Fi credentials you can share them across the wired CAN network to every other System2 board with a single button press (see Sharing Wi-Fi Credentials). So in practice, you only ever type your Wi-Fi password once for your entire layout.
http://4.3.2.1.
http://panel-64ee04.local) or by using the IP address shown in the
status bar.
Once connected to Wi-Fi, open a web browser and navigate to your board. The main page gives you complete control of your Panel Controller. It is divided into clear sections, from top to bottom:
| # | Section | What it does |
|---|---|---|
| 1 | Header | Shows board name, product image, and your location description. |
| 2 | Live Charts | Wi-Fi signal, traffic, CAN activity, and MQTT activity (toggle with Show/Hide Charts). |
| 3 | Port Configuration | Set up all 16 input and 16 output channels. |
| 4 | EasyConfig | Quickly assign V-Port addresses for a whole board in one go. |
| 5 | CAN Bus | CAN ID settings. |
| 6 | Wi-Fi | Roaming, boot delay, and credential sharing. |
| 7 | Navigation Links | Save, Load, Backup, Restore, Update, Reboot, Network Monitor, and Documentation. |
| 8 | Status Bar | Software version, IP address, board name, and connected Wi-Fi network. |
| 9 | Protocol | Switch between CAN, Native MQTT, and JMRI. |
| 10 | Status Log | Live messages showing network activity, board reports, and system events. |
The port configuration table is the heart of the Panel Controller. Each of the 16 rows represents one physical input (button/switch) and one physical output (LED) on the board.
| Column | What it controls |
|---|---|
| Phys Port | The physical connector number on the board (1–16). This is fixed. |
| V-Port | The virtual port number this input sends when activated. Match it to the V-Port on the device you want to control (e.g. a Servo-8 output). |
| Latch (ms) | How long the input signal is held before it can change again. Prevents accidental double-presses. 600 ms is a good default. |
| Input Type | The type of switch or sensor connected (see below). |
| Invert | Reverses the sense of the input — useful if your wiring reads backwards. |
| RGB / LED Colour | Sets the Red, Green, and Blue brightness for this channel's LED (0–255 each). Combine values to create any colour. |
| B/G | Background mode — when ticked, the LED shows a dim background colour when off, rather than being completely dark. |
| Type | Best for |
|---|---|
| Stateless | The default switch type. Click to toggle the V-Port. |
| Push to make btn | Momentary push button — press to toggle the state. |
| Toggle Switch | On/off toggle switch — state follows the switch position. |
| Occupancy Sensor | Track block detector — active when the block is occupied. |
| Points Pos Sensor | Points position feedback — indicates the actual position of the turnout. |
| Column | What it controls |
|---|---|
| Phys Port | The physical LED output number on the board (1–16). |
| V-Port | The virtual port this output listens to. When a matching V-Port message arrives (from any board on the network), this LED responds. |
| Invert | Reverses the LED state — lights when off and vice versa. |
Setting up 16 channels does not have to be slow. The interface includes several shortcuts to save you time:
| Shortcut | Where | What it does |
|---|---|---|
| + after a number | V-Port fields | Auto-fills all rows below with incrementing values. Type 100+ and rows fill with 100, 101, 102, 103… |
| - after a number | V-Port fields | Auto-fills all rows below with decrementing values. Type 200- and rows fill with 200, 199, 198… |
| . after a number | V-Port fields | Copies the same value to all rows below. Type 500. and every row gets 500. |
| . after a number | Latch (ms) field | Applies the same latch time to all 16 channels. Type 100. to set 100 ms everywhere. |
| Shift+click | Invert & B/G toggles | Hold Shift and click a toggle to apply the same state to all remaining rows in that column. |
Typing V-Port numbers one by one for all 16 channels can be tedious. EasyConfig lets you assign a complete block of V-Port addresses in one click. This feature is especially useful when setting up multiple boards — you can configure each board without having to think about individual V-Port numbers. It saves significant time and avoids mistakes when you just want to get going quickly.
Select a board number from the dropdown. The system automatically assigns a sequential range of V-Ports to all 16 input and output channels based on that board number. Board 1 starts at V-Port 1, Board 2 at V-Port 17, Board 3 at V-Port 33, and so on.
Many layouts, especially exhibition layouts, use more than one Wi-Fi access point to cover a large area. Roaming tells the board to periodically check whether a stronger access point is available, and seamlessly switch to it if so.
We recommend leaving Roaming on (the default). Even if you only have a single access point today, roaming causes no harm and means your boards are ready to take advantage of a second access point if you add one later. With roaming on, the board scans every five minutes and only switches if it finds a significantly stronger signal, so there is no disruption during normal operation.
On large layouts with many boards, enabling Boot delay adds a short pause (1–15 seconds) before the board connects to Wi-Fi at power-on. This staggers the Wi-Fi connection requests and avoids overwhelming your router when everything powers up at once. This is probably not necessary unless you have a particularly slow router and a large number of boards — say 30 or more. Most users can leave this off.
Once one Panel Controller is connected to your Wi-Fi, you can send those credentials to every other System2 board on the wired CAN network with a single button press. This means you never need to set up Wi-Fi on each board individually.
| Button | What it does |
|---|---|
| Share | Broadcasts your Wi-Fi name and password to all boards over the CAN bus. Each board saves the credentials and connects automatically. |
| Revoke | Tells all boards on the CAN network to forget the stored Wi-Fi credentials. Useful if you change your Wi-Fi password. |
| Erase | Erases the Wi-Fi credentials on this board only. The board will restart its hotspot so you can set up a new network. |
Release 25 of the Panel Controller firmware is the most feature-rich update yet. Here is a quick summary of everything that’s new or improved.
| Feature | What it does |
|---|---|
| Live Charts | Four real-time charts on the main page — Wi-Fi signal, Wi-Fi traffic, CAN bus activity, and MQTT activity — with 10 minutes of rolling history. Click to zoom. |
| Wi-Fi Roaming | The board automatically finds and switches to the strongest access point on your network. Ideal for large layouts with multiple Wi-Fi access points. |
| Signed Firmware Updates | Every firmware update is cryptographically signed with RSA-3072 and verified before installation. Rollback to any version from V25 onwards. |
| REST API | A full JSON API for reading and controlling the board from scripts, home automation systems, or custom dashboards. 16 endpoints covering every setting. |
| Backup & Restore | Export your entire board configuration as a JSON file. Restore it to the same board or use it as a template for setting up new boards. |
| CAN Bus Back-Pressure | Intelligent TX buffer management prevents message loss during heavy traffic. The board gracefully drops non-critical frames rather than overflowing. |
| Boot Delay | Optional staggered startup prevents Wi-Fi connection storms when many boards power on simultaneously. Probably not needed unless you have 30+ boards. |
| Refreshed UI | Reorganised navigation, colour-coded port sections, tooltips on every element, and a dedicated Wi-Fi settings area. Mobile-friendly responsive layout. |
| Feature | What’s improved |
|---|---|
| Network Monitor | Now shows board names alongside CAN IDs, making it easy to see which device sent each message. Colour-coded display with improved performance and appearance. |
| Wi-Fi Credential Sharing | Now supports maximum-length network names (32 characters) and passwords (64 characters) via the new Protocol v4 chunked transfer with checksum validation. |
| MQTT & JMRI | Performance enhancements to both Native MQTT and JMRI protocol modes, including improved message throughput, more reliable reconnection, and reduced latency. |
| Wi-Fi Reliability | Completely rewritten Wi-Fi connection engine with non-blocking state machine and automatic recovery from dropped connections. |
| CAN Bus Performance | Doubled receive and transmit buffer depths, improved frame processing throughput, and added intelligent back-pressure management. Tested and proven at sustained loads well beyond typical layout traffic. |
System2 uses a concept called Virtual Ports (V-Ports). Every switch, sensor, LED, or servo on your layout is assigned a V-Port number (from 1 to 60,000). When a button is pressed on one board, it sends its V-Port number across the network. Any other board listening for that same V-Port reacts — it really is that simple.
Data travels across two networks using three protocols:
The default. Ultra-reliable, two-wire connection between boards. Works without Wi-Fi, internet, or any computer at all.
System2's own wireless protocol using V-Port numbering over MQTT. Ideal for layouts where running CAN wires is impractical.
Connects directly to JMRI layout software using standard MQTT turnout and sensor topics. Two-way communication.
The Protocol button near the bottom of the main page lets you choose how your board communicates with other devices. Tap it to cycle through the three options:
| Protocol | Network | When to use it |
|---|---|---|
| CAN | Wired | Default. Best reliability. No internet or computer needed. Use when boards are connected by the two-wire CAN bus cable. |
| Native MQTT | Wi-Fi | Wireless communication using System2's own V-Port addressing over an MQTT broker. Use when you cannot run CAN wires. |
| JMRI | Wi-Fi | Connects to JMRI model railway software. Uses standard MQTT turnout/sensor topics so JMRI sees your inputs and outputs natively. |
When using Native MQTT or JMRI, you also need to provide the address and port of an MQTT broker (a small piece of software that routes messages between devices — Mosquitto is a popular free choice).
When you select Native or JMRI as the protocol, the header bar reveals two extra fields: Broker and Port.
broker1.local or 192.168.0.100).The status log will confirm the protocol change and remind you to save and reboot.
In Native MQTT mode, boards communicate wirelessly through an MQTT broker instead of the CAN bus. Each board connects to your Wi-Fi network and publishes its V-Port states to the broker. Other boards subscribe to the same topics and react accordingly — the broker handles all the message routing.
In JMRI mode, the boards communicate with JMRI (Java Model Railroad Interface) running on a computer. JMRI connects to the same MQTT broker and uses standard turnout and sensor topics. Your boards appear as native JMRI accessories — no extra hardware or adapters required.
The navigation links give you full control over your settings:
| Action | What it does |
|---|---|
| Save Changes | Writes your current settings to the board's permanent memory. Settings survive power cuts and reboots. |
| Reload Values | Discards any unsaved changes and reloads the last saved settings. |
| Reset to Defaults | Restores factory defaults for all channel and network settings. |
| Backup Data | Downloads a JSON file containing all your settings to your computer. Keep this as insurance. |
| Restore Data | Uploads a previously saved backup file and applies it to the board. |
| Reboot | Restarts the board. Any unsaved changes are lost. |
Click Show Charts at the top of the main page to reveal four real-time charts covering the last 10 minutes of activity. They update every 5 seconds. Click on any chart to expand it for a larger, more detailed view — click outside the expanded chart to close it.
| Chart | What it shows |
|---|---|
| Wi-Fi RSSI | Signal strength in dBm. Green is good (above −60), yellow is fair, red is weak. |
| Wi-Fi Traffic | Application-level packets sent (Tx) and received (Rx) per 5-second interval. |
| CAN Activity | CAN bus packets per second, averaged over 5-second windows. Shows how busy your wired network is. |
| MQTT Activity | MQTT messages sent, received, errors, and reconnection attempts (only active when using an MQTT-based protocol). |
Software updates are one of the most important features of the Panel Controller. Unlike traditional model railway electronics that are frozen at the version they ship with, your Panel Controller can update itself over the internet, gaining new features, improvements, and fixes long after you purchased it. This future-proofs your investment — the board you buy today will keep getting better over time.
The system checks for updates automatically when it starts. If a new version is available, you will see it on the Software Update page, accessible via the Update Firmware link on the main page.
When updates are available, the page shows a complete release history with summary descriptions of every version released since the one you are currently running. You can expand each release to read detailed notes about what changed.
Every firmware update is digitally signed using RSA-PSS cryptography. The board verifies the signature and signing key before applying any update. This ensures only authentic, authorised software from MegaPoints Controllers can be installed.
Yes. The full history view lets you install any previous release. Simply click the Install button next to the version you want. You can roll back to any version from V25 onwards — that is when we introduced the new update system that supports version history and rollback.
The Network Monitor (accessible from the navigation links) is a powerful diagnostic tool that shows you every CAN bus message in real time. It is invaluable for troubleshooting or simply understanding how your layout communicates.
Each row in the monitor shows:
The monitor also resolves board names automatically — when it recognises a CAN ID from a board that has reported in, it shows the board's hostname for easy identification.
The Status Log at the bottom of the main page shows live system messages as they happen. It is the first place to look if something is not behaving as expected.
Typical messages include:
If the browser loses its connection to the board (for instance if the board reboots or Wi-Fi drops briefly), a clear yellow banner appears at the top of the page and the board automatically attempts to reconnect.
We’re opening up the boards for anyone with the appropriate skill set to play with. The Panel Controller includes a full REST API that lets you read and control the board programmatically. If you enjoy scripting, building custom dashboards, or integrating with home automation systems, this is for you.
You can use the API from any tool that speaks HTTP — a web browser address bar, a
command line with curl, Python scripts, Node-RED, or even a smartphone app.
All responses are in JSON format.
Replace panel-64ee04.local with your board's name or IP address.
GET http://panel-64ee04.local/api/status
Returns hostname, IP, software version, protocol, uptime, and more:
{
"hostname": "panel-64ee04",
"ip": "192.168.0.63",
"swVersion": 25,
"protocol": "CAN",
"uptime": 86400,
"location": "Baseboard 25"
}
GET http://panel-64ee04.local/api/channels
Returns an array of all channel configurations and current states.
GET http://panel-64ee04.local/api/channel/3/toggle
Toggles channel 3 on or off and returns the new state. You can even do this from a browser address bar!
GET http://panel-64ee04.local/api/set?location=Signal+Box+North&wifiRoaming=1
Updates one or more settings in a single request.
GET http://panel-64ee04.local/api/boards?probe&json
Sends a network probe, waits 3 seconds, then returns a JSON list of every board that responded.
GET http://panel-64ee04.local/api/settings/export
Downloads a complete backup of all settings as a JSON file.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/status | Board status and identity |
| GET | /api/channels | All 16 channel configurations |
| GET | /api/channel/{n} | Single channel (1–16) |
| PUT | /api/channel/{n} | Update channel settings (JSON body) |
| GET/POST | /api/channel/{n}/toggle | Toggle channel state |
| GET | /api/wifi | Wi-Fi connection details |
| GET | /api/can | CAN bus diagnostics |
| GET | /api/mqtt | MQTT broker status |
| GET | /api/settings | All writable settings |
| PUT | /api/settings | Update settings (JSON body) |
| GET | /api/set?key=val | Update settings via URL parameters |
| GET | /api/settings/export | Download full backup |
| POST | /api/settings/import | Restore from backup file |
| GET | /api/boards | List known boards (CSV or JSON) |
| POST | /api/actions/save | Save settings to permanent memory |
| POST | /api/actions/load | Reload saved settings |
| POST | /api/actions/defaults | Reset to factory defaults |
| POST | /api/actions/reboot | Restart the board |
For complete API documentation, refer to the dedicated API reference document available through the Documentation link on your board's main page.
The System2 platform has been engineered with robustness as a top priority. The Panel Controller is the same system trusted to run The Grand Challenge, Pete Waterman's Guinness World Record-holding portable layout with nearly 700 metres of track and dozens of System2 boards operating simultaneously.
| Feature | Detail |
|---|---|
| CAN bus | The same automotive-grade serial bus used in cars, trucks, and aircraft. It features built-in error detection, automatic retransmission, and bus-off recovery. Immune to most electrical interference found on model railway layouts. |
| Auto CAN ID | Detects CAN ID collisions in real time and resolves them automatically, with NVS-backed persistence. No manual coordination needed. |
| Wi-Fi auto-reconnect | If the Wi-Fi connection drops, the board automatically reconnects. A maximum of 3 automatic reboots are attempted before stopping, to avoid reboot loops. |
| Wi-Fi roaming | Boards scan for and switch to the strongest available access point every 5 minutes when signal quality drops below −70 dBm. |
| Thread-safe design | NVS (settings storage) access is protected by FreeRTOS mutexes to prevent data corruption. MQTT receive uses a lock-free queue between the networking task and the main loop. |
| CAN TX back-pressure | When the CAN transmit buffer is more than 75% full, non-critical frames are dropped to prevent buffer overflow and keep critical messages flowing. |
| WebSocket rate limiting | Browser messages are capped at 50 per second and 200 bytes per message, protecting against runaway scripts or faulty connections. |
| Signed firmware updates | RSA-3072 PSS signature verification with key pinning. Only firmware signed with the authentic MegaPoints OTA key is accepted. |
| Credential sharing security | Wi-Fi credentials sent over CAN use source-locked assembly with timeout, preventing interleaved or spoofed packets from corrupting data. |
| NVS write optimisation | Settings are only written to flash when values actually change (dirty-check against shadow copies), preventing unnecessary flash wear. |
| Switch debounce | Configurable latch timers (default 600 ms) prevent double-triggers from noisy switches or bouncy buttons. |
Every release goes through extensive testing before publication. The firmware includes comprehensive CAN bus stress testing, Wi-Fi failover testing, NVS integrity verification, MQTT broker disconnect/reconnect cycles, and over-the-air update validation including signature verification. The Status Log, Network Monitor, and live charts provide full visibility into the system's operation, making it straightforward to verify that everything is working correctly.
| Processor | ESP32 dual-core |
| Inputs | 16 channels via shift register (active scanning) |
| Outputs | 16 LED channels via shift register |
| CAN bus | 125 kbit/s, standard frames, 64-deep RX buffer, 32-deep TX buffer |
| Wi-Fi | 802.11 b/g/n, 2.4 GHz, WPA2, mDNS hostname resolution |
| V-Port range | 1 – 60,000 |
| MQTT | Async client, QoS 1, auto-reconnect with 30s back-off |
| Settings storage | Non-volatile (NVS) — survives power loss and updates |
| OTA updates | HTTPS from AWS S3, RSA-3072 PSS signed, MD5 verified |
| Web interface | Async web server, WebSocket + SSE live updates |
The CAN bus is the wired backbone of a System2 layout. It runs at 125 kbit/s over a simple two-wire connection, and is extremely reliable — the same technology used in cars, aircraft, and industrial machinery.
Each board on the CAN network needs a unique CAN ID. With Auto CAN ID turned on (the green toggle), the system manages this for you automatically. If two boards accidentally share an ID, they will detect the collision and pick new, unique IDs within seconds.
The CAN bus is a simple two-wire network that connects all your System2 boards together. It carries switch states, LED commands, and management messages between boards at 125 kbit/s. The wiring is straightforward: run a twisted-pair cable from board to board, connecting H to H and L to L in a daisy-chain.
The simplest setup is two boards connected by a single cable:
When you add more boards, they simply tap into the same pair of wires. The CAN bus is a linear bus — branch it out from board to board rather than running separate cables back to a central point.
Every System2 board has a built-in 120 Ω termination resistor that is activated by a small jumper on the board, labelled TERM. The CAN bus standard requires exactly two termination resistors — one at each physical end of the bus cable. The rule is simple: