Your layout. Your way. One board at a time.
User Reference — Release 27
Your MegaPoints Servo-8 is an eight-channel servo controller designed specifically for model railways. It gives you precise, smooth control over the small servos that move turnouts, semaphore signals, level crossing gates, barriers, and anything else on your layout that needs to swing, tilt, or rotate.
The Servo-8 is built on the System2 platform — the same proven infrastructure that powers the MegaPoints Panel Controller. That means you get:
Whether you are controlling a single set of points or an entire fiddle yard, the Servo-8 makes it straightforward. You set the travel range for each servo by dragging endpoints on a visual gauge — no need to count microseconds or guess at values.
The Servo-8 is part of the MegaPoints System2 family of controllers. System2 is an ecosystem of boards that work together to automate your model railway — all sharing a common web-based interface and the same underlying technology.
| Product | Channels | Role |
|---|---|---|
| Panel Controller | 16 in / 16 out | The heart of any System2 installation — 16 inputs (push button, toggle, block detector, or points indicator) and 16 LED pair outputs. Your layout's control desk. |
| Mini Panel | 8 in / 8 out | All the functionality of the Panel Controller in a compact form factor. Ideal for smaller panels, expansion, or getting started with System2. |
| Servo-8 | 8 servos | Eight-channel servo controller with six movement types — points, wig-wag, semaphore bounce, semaphore lever, crossing gate, and acceleration. New intuitive visual servo endpoint adjustment for precise setup. |
| Input-32 | 32 in | A 32-port input controller, functionally equivalent to the inputs on the Panel Controller. Use for large-scale track occupancy, feedback, or sensor arrays. |
| Output-32 | 32 out | A 32-port output controller, functionally equivalent to the LED outputs on the Panel Controller. High-density LED control to reduce board count on complex layouts. |
| OUT-64 RGB | 64 LEDs | Drives up to 64 individually addressable WS2812B RGB LEDs for colour signals, ground lighting, or scenic effects. |
| Solenoid Driver | 4 solenoids | 20–24V solenoid controller with integrated CDU and intelligent firing — only activates when the capacitor reaches full charge. Adjustable “thump” for each output. |
| DCC Decoder | 4000 addresses | A generic DCC accessory decoder for System2 networks. Automatically maps DCC accessory addresses (1–4000) to matching V-Ports — no complex DCC configuration needed. |
| Route Processor | 100 routes | Pre-configured route automation for all System2 motor types. Up to 100 routes with 16 elements each. Trigger by switch, block occupancy, DCC command, or RFID tag. Built-in route editor with learn-by-listening. |
| RFID Reader | 2 readers | Dual RFID reader and writer — create a 4-digit loco ID and identify trains as they pass. Works over CAN bus or via MQTT in native and JMRI modes. |
| Relay Driver | 4 relays | Multi-channel relay control for frog switching, accessory power, or any application requiring isolated contacts. |
| Stall/Kato Driver | 4 motors | Drives stall-type, Kato, and MTB point motors with adjustable current limiting and position feedback. |
Every System2 board shares the same features out of the box:
Setting up your Servo-8 takes just a few minutes. Here is what you need to connect.
Your Servo-8 needs a 12V DC power supply rated at 1.5A minimum. Connect via the power connector on the left side of the board.
Each of the 8 channels has a 3-pin header for connecting a standard hobby servo. The pins are labelled:
| Pin | Colour (typical) | Function |
|---|---|---|
| S | Orange or White | Signal (PWM) |
| + | Red | +V power |
| - | Brown or Black | Ground |
For multi-board networks, connect the CAN bus using the screw terminal:
Use twisted pair wire and keep runs under 30 metres for reliable communication. If you have only one board, you do not need the CAN bus at all.
| LED | Meaning |
|---|---|
| Power (green) | Board is powered on |
| WiFi (blue) | Solid = connected to Wi-Fi; Flashing = searching or in AP mode |
| CAN (yellow) | Blinks when CAN bus traffic is detected |
| Activity (white) | Blinks briefly when a servo moves |
When your Servo-8 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 Wi-Fi Settings & Roaming). So in practice, you only ever type your Wi-Fi password once for your entire layout.
http://4.3.2.1.
http://serv8-a1cc84.local) or by using the IP address shown in the
status bar.
Once your Servo-8 is connected to Wi-Fi, open its address in a browser and you will see the main configuration page. Everything you need is on this single page.
The main page is organised into four collapsible sections. Click any section header to expand or collapse it. Your preferences are saved automatically and remembered across sessions.
| Section | Contents |
|---|---|
| Port Configuration | The servo settings table (V-Port, Range, Speed, Type, Trigger, Feedback) and the Adjust button for each channel. |
| Charts | Four real-time monitoring charts — WiFi RSSI, WiFi traffic, CAN bus activity, and MQTT activity. |
| Network | Protocol selection (CAN / JMRI / MQTT), MQTT broker settings, CAN ID, WiFi boot delay, roaming, and credential sharing. |
| Status Log | A scrolling log of events — connections, disconnections, CAN traffic, errors, and firmware messages. |
Each of the 8 servo channels has its own set of configuration options. Let's walk through them.
| Setting | What It Does |
|---|---|
| V-Port | The virtual address that other devices use to control this servo. For example, a Panel Controller switch set to V-Port 101 will toggle servo S1 if its V-Port is also 101. |
| Range Low | The servo position (in microseconds) for the "off" or "normal" state. Default: 1000. |
| Range High | The servo position (in microseconds) for the "on" or "reverse" state. Default: 2000. |
| Speed | How fast the servo moves, from 1 (very slow) to 100 (full speed). Default: 50. |
| Type | The movement style — see Servo Types below. |
| Reversed | Swaps the meaning of "on" and "off" without changing the range values. |
| Trigger | An input V-Port address that will toggle this servo when it changes state. |
| Feedback | An output V-Port address that reports this servo's current position to other devices. |
| Adjust | Opens the visual servo endpoint adjustment popup for this channel. Drag the LO and HI endpoints on a graphical arc to set the servo's travel range, adjust the speed, and slide the entire range up or down — all while watching the servo move in real time. See section 7 for details. |
The Servo-8 supports six different movement types. Choose the one that matches what your servo is controlling:
Standard two-position movement for turnouts and points. The servo moves smoothly between its Low and High positions and holds at each end.
Continuous back-and-forth swinging motion, like a level crossing warning signal. The servo oscillates between Low and High until told to stop.
The signal arm drops to "clear" with a realistic mechanical bounce when it reaches the bottom, just like a real semaphore signal.
Smooth, lever-style movement for semaphore signals without the bounce effect. A dignified, steady travel from one position to the other.
Slow, smooth movement designed for level crossing gates and barriers. The servo eases in and out at each end for a realistic appearance.
The servo ramps up to speed and then decelerates as it approaches its target position. Useful when you want visible acceleration and braking.
When entering V-Port, Trigger, or Feedback addresses, you can append a special character to auto-fill the remaining channels in one go:
| Suffix | Effect | Example |
|---|---|---|
| + | Fills all rows below with incrementing values | Type 101+ in S1's V-Port → S2 gets 102, S3 gets 103, … S8 gets 108 |
| - | Fills all rows below with decrementing values | Type 108- in S1's V-Port → S2 gets 107, S3 gets 106, … S8 gets 101 |
| . | Fills all rows below with the same value | Type 500. in S1's Trigger → S2–S8 all get 500 |
This works in any numeric field in the port table. The suffix character is stripped after the values are applied.
The visual servo endpoint adjustment is the heart of the Servo-8 experience. Instead of guessing at microsecond values, you simply drag two endpoints on an arc to set the exact travel range for your servo, and watch it move in real time.
To open it, click the green Adjust button next to any servo in the port table. The gauge appears as a popup overlay showing an arc with two draggable thumbs (LO and HI), a needle showing the current servo position, and a speed slider.
When you are happy with the settings, close the gauge and click Save in the main page. Your LO, HI, and Speed values are written back to the port table automatically.
| Button | What It Does |
|---|---|
| Centre Servo | Moves the needle (and the real servo) to the exact midpoint between LO and HI. Useful for checking that your range is centred on the servo's travel. |
| Reset | Returns all settings to their defaults: LO = 1000, HI = 2000, Speed = 50%. Use this if you get lost or want to start over. |
| Arm Selector | Cycles through the five needle styles: Servo Arm (wide), Teardrop, Standard, Long, and Pointer. This is purely cosmetic — pick whichever you prefer. |
If you are building a multi-board layout using the standard MegaPoints addressing scheme, EasyConfig lets you set up all 8 servo channels in one click.
For each board number, EasyConfig assigns addresses in a predictable sequence. For example, if you select Board 1:
| Servo | V-Port | Trigger | Feedback |
|---|---|---|---|
| S1 | 101 | 201 | 301 |
| S2 | 102 | 202 | 302 |
| S3 | 103 | 203 | 303 |
| S4 | 104 | 204 | 304 |
| S5 | 105 | 205 | 305 |
| S6 | 106 | 206 | 306 |
| S7 | 107 | 207 | 307 |
| S8 | 108 | 208 | 308 |
Board 2 would start at V-Port 109, and so on. This keeps all your addresses unique across your entire layout.
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 board 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. |
Version 25 was the first stable release of the MegaPoints Servo-8 firmware. Version 27 brings all the latest improvements. Here is what the Servo-8 includes.
Your Servo-8 can communicate with other devices using three different protocols. You choose which one to use in the Network Configuration section of the main page.
The native System2 backbone. Direct board-to-board communication with automatic discovery, shared Wi-Fi credentials, and V-Port messaging. No computer needed. Default protocol.
Lightweight messaging through an MQTT broker. Integrates with Home Assistant, Node-RED, and custom applications. Requires a broker (e.g. Mosquitto) running on your network.
Computer-based layout control through JMRI software. Uses MQTT as the transport layer. Requires JMRI running on a PC, Mac, or Raspberry Pi, plus an MQTT broker.
The CAN bus is the native System2 communication backbone. It is a simple two-wire connection (CAN-H and CAN-L) that lets all your System2 boards talk to each other directly. CAN bus features include:
JMRI (Java Model Railroad Interface) is popular model railway control software that runs on a computer. When you select the JMRI protocol, your Servo-8 connects to JMRI over your Wi-Fi network, allowing JMRI to control your servos using its turnout and sensor tables.
MQTT is a lightweight messaging protocol widely used in home automation. When you select MQTT mode, your Servo-8 connects to an MQTT broker (server) and publishes and subscribes to topics for each servo channel. This opens up integration with:
To use MQTT, enter your broker address and port (default 1883) in the Network Configuration section.
In the Network Configuration section of the main page, you will see three protocol buttons: CAN Bus, JMRI, and MQTT. The currently active protocol is highlighted in green. To switch:
Both MQTT and JMRI modes require an MQTT broker running on your network. A broker is a small piece of software that routes messages between devices. The most popular choice is Mosquitto, which is free and runs on Windows, macOS, Linux, and Raspberry Pi.
| Field | What to Enter |
|---|---|
| MQTT Broker | The IP address or hostname of the machine running your broker (e.g. 192.168.1.10 or pi4.local) |
| Port | The broker port — almost always 1883 (the MQTT default) |
Your Servo-8 keeps all its settings in persistent storage, so they survive power cuts and reboots. However, when you make changes through the web interface, those changes live in memory until you explicitly save them.
The Save button writes all your current settings — servo positions, speeds, movement types, CAN IDs, network configuration, and everything else — to the board's non-volatile storage. Once saved, these settings are permanent until you change them again.
Changed something and want to undo it? Click Reload Values to discard any unsaved changes and reload the last saved configuration from storage. This is a quick way to back out of experimental tweaks without affecting your working setup.
If you want to start from scratch, Reset to Defaults returns every setting to its factory state:
| Setting | Default Value |
|---|---|
| LO endpoint | 1000 µs |
| HI endpoint | 2000 µs |
| Speed | 50% |
| Movement type | Smooth |
| CAN ID | Auto-assigned |
You can download a complete copy of your board's settings as a file to your computer. This is useful before making major changes, or if you want to copy a configuration from one board to another.
To restore a previously downloaded settings file:
Cloud backup gives you an automatic safety net for your board's configuration. Once your board is registered, it backs up your settings to the MegaPoints cloud whenever you make changes. If you ever need to replace a board or recover from an accidental reset, your settings are just a click away.
Before cloud backup can work, your board needs to be registered with the MegaPoints cloud. Registration is a one-time process:
Once registered, your board automatically backs up its settings to the cloud whenever you save changes. You do not need to do anything — it happens in the background. The cloud keeps up to 5 rolling backups, so you always have recent versions to choose from.
To see your cloud backups, visit the MegaPoints Dashboard in your browser. Each backup shows the date it was created and a summary of the settings it contains. To restore:
If you have a configuration you want to keep permanently, you can lock a backup. Locked backups are protected from the rolling rotation — they will not be overwritten when new backups are created. This is ideal for a known-good baseline configuration.
If you sell or give away a board, the new owner can re-register it under their own account. Re-registration clears the previous owner's cloud backups and starts fresh. The board's local settings are not affected.
Click Show Charts at the top of the main page to reveal four real-time charts covering the last 5 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. |
| Chart | What it shows |
|---|---|
| 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 Servo-8. Unlike traditional model railway electronics that are frozen at the version they ship with, your Servo-8 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 board checks for updates automatically every 4 hours. If a new version is available, you will see a notification in the Status Log on the main page with a direct link to the Update page.
The update page shows a complete release history with a summary of every version released since the one you are currently running. Click the arrow next to any release to read detailed notes about what changed.
From V25 onwards, every update includes a 10-minute validation window. After the board reboots onto the new firmware, you will see a yellow banner at the top of the page with a countdown timer:
This gives you time to check that everything is working properly before you commit to the new version. You have four choices:
| Action | What happens |
|---|---|
| Click "Keep this version" | The new firmware is accepted permanently. The validation banner disappears and the board continues running the new version. This is the normal case. |
| Click "Roll back now" | Immediately rolls back to the previous firmware without waiting for the countdown. The board reboots onto the previous version within a few seconds. This button only appears when a previous firmware version is available on the board. |
| Let the timer expire | If you do nothing for 10 minutes, the board automatically reboots back to the previous version. This protects you if the new firmware has a problem that prevents you from reaching the settings page. |
| Reboot the board | If you reboot (via the Reboot button or by cycling power) before accepting, the board reverts to the previous version immediately. |
Example: You update from V24 to V25. The board reboots and you see the validation banner. You check that your ports are working, the CAN monitor shows traffic, and the dashboard looks right. Everything is fine, so you click "Keep this version". Done -- you are now on V26 permanently.
Example: You update and the board reboots, but something does not look right -- perhaps a chart is missing or a setting looks wrong. You simply wait for the 10-minute timer to expire. The board reboots itself and you are back on the previous version, exactly as it was before the update. No harm done.
Even after accepting an update, you can roll back to the previous version at any time. On the Update page, you will see a Rollback button showing the version you can revert to. Click it and the board switches back immediately.
Example: You accepted V25 last week, but you have discovered an issue with your particular setup. Visit the Update page, click "Rollback to V24", and you are back to the version that was working. You can try V25 again later when an updated beta is available.
In the unlikely event that your board will not start properly after an update, there is a last-resort recovery option:
You can also trigger recovery mode by connecting a USB cable and typing RECOVER followed by Enter in the serial monitor.
If you would like to try new features before they are officially released, you can opt in to the pre-release channel. On the Update page, toggle the Pre-release channel switch. You will see beta versions appear alongside stable releases.
Pre-release firmware is tested but may contain bugs. It is not recommended for boards in permanent use on your layout. The firmware validation window applies to pre-release updates too, so you can always roll back if needed.
Example: You hear about an exciting new feature being tested. You toggle on pre-release, see "V22 beta 5" appear, and install it. After testing, you decide it is not ready for your layout, so you roll back to V25 stable. No problem.
Every firmware update is digitally signed using RSA-PSS cryptography. The board verifies the signature before applying any update. Only authentic software from MegaPoints Controllers can be installed.
The Network Monitor is a dedicated page at /monitor that shows you every CAN bus packet flowing through your network in real time. It is an invaluable diagnostic tool when you are setting up a multi-board layout or troubleshooting communication issues.
Navigate to http://serv8-XXXXXX.local/monitor in your browser (replacing XXXXXX with your board's ID). The monitor opens with a live scrolling log of CAN packets and a filter bar at the top.
The filter bar at the top lets you narrow down the packet stream to find exactly what you are looking for. When any filter is active, the bar turns pink to remind you that not all packets are being shown.
| Filter | How to Use |
|---|---|
| CAN ID | Filter by CAN bus address. Enter a single number (e.g. 800), a range (e.g. 800-900), or a comma-separated list (e.g. 800,900,1200). Leave blank to show all. |
| Board | Filter by board name. Partial match, case-insensitive. Enter serv8 to see only packets from Servo-8 boards. |
| V-Port | Filter by virtual port number. Supports the same syntax as CAN ID — single values, ranges, and comma-separated lists. |
| RFID | Filter by RFID tag ID. Partial match. Only shows RFID-tagged messages containing this text. |
| Type checkboxes | Port = channel state changes (D0=1). RFID = messages with decoded RFID data. Mgmt = management messages (announces, reports, credential sharing). All = show everything. |
| Pause | Freezes the display. New packets are discarded while paused. |
| Clear | Resets all filters and clears the log. |
| Column | Description |
|---|---|
| Seq | Sequence number, counting from 1 since the page was loaded. |
| HH:MM:SS.mSS | Timestamp — hours, minutes, seconds, and milliseconds since the board booted. |
| CanId | The sender's CAN bus address. Each board has a unique CAN ID, assigned automatically. |
| D0–D7 | The 8 data bytes of the CAN frame. D0 indicates message type (1 = port change, 3 = announce, 5 = RFID). D1+D2 encode the V-Port number. |
| V-Port | The decoded virtual port address (D1 x 256 + D2) for port messages. |
| Board Name | The hostname of the sending board, resolved from the board registry. Colour-coded for easy identification. |
| RFID Tag | For RFID messages, the decoded 4-character tag ID extracted from D3–D6. |
The Network Monitor includes a filter bar at the top of the packet display. This lets you focus on exactly the traffic you need to see, even on a busy layout with hundreds of messages per second.
| Filter | What it does |
|---|---|
| CAN ID | Show only packets from a specific CAN address (e.g. 1234) or a range
(e.g. 1000-2000). Leave blank to show all addresses. |
| Board | Filter by board name (partial match, not case-sensitive). Only packets from boards whose name contains the text you type will be shown. |
| V-Port | Show only packets for a specific virtual port number or range. Only applies to port-state messages (D0=1). |
| RFID | Filter by RFID tag ID (partial match). Only packets with a decoded RFID tag matching the text will be shown. |
| Type checkboxes | Toggle visibility of message types independently: Port (channel state changes), RFID (tag reads), and Mgmt (reports, announces, credential sharing). Use All to toggle all three at once. |
| Pause | Freezes the display. New packets are discarded while paused, letting you examine the current output without it scrolling away. |
When any filter is active, the filter bar turns pink and a counter shows how many packets have been shown versus filtered out. Click Clear to reset all filters and return to the unfiltered view.
All filtering runs entirely in the browser -- there is no additional load on the board and no network overhead.
Shows how long the board has been running since its last reboot (uptime), available memory (free heap), total boot count, firmware version, and the board's friendly name.
Displays the network your board is connected to, its IP address, signal strength (RSSI), the Wi-Fi channel in use, and the board's MAC address. The RSSI value tells you how strong the signal is — anything above -60 dBm is good; below -75 dBm and you may see occasional dropouts.
Tracks the number of packets sent and received, the peak packet rate, any errors, and the current buffer usage. If errors are climbing, check your wiring and termination resistors.
When MQTT is enabled, this card shows the broker address, connection status, and message counts for both transmit and receive. A green dot next to the status means the connection is healthy.
A quick-reference row showing the current microsecond position of each servo. Channels with no servo connected show a dash.
Click the Diagnostics bar to expand a detailed view of internal metrics — partition sizes, task stack usage, and other low-level information that can help with troubleshooting. Most users will never need this section, but it is there when you need it.
The Status Log is a scrolling list of timestamped events from your board. It shows you what is happening in real time, making it the first place to look when something is not working as expected.
The status log captures a wide range of events, including:
Each log entry starts with a timestamp showing the time since boot (hours, minutes, seconds). Entries are colour-coded to help you scan quickly:
If a servo is not responding, check the log for CAN bus errors or missing packet reports. If Wi-Fi is dropping out, look for roaming events or RSSI warnings. The log gives you a clear timeline of what happened and when, which is invaluable for narrowing down issues.
We'd love to hear from you. If you have an issue or want to provide feedback we've baked it right into the system.
Click the Contact Us link in the footer navigation at the bottom of any page on the Servo-8 web interface. The form automatically attaches diagnostic information from your board, making it easy for us to investigate any issues.
| Category | When to Use |
|---|---|
| Bug Report | Something is not working as expected. Describe what you did, what happened, and what you expected to happen. |
| Feature Request | You have an idea for a new feature or an improvement to an existing one. |
| General Feedback | Anything else — questions, comments, suggestions, or just to say hello. |
When you submit the form, the following information is sent along with your message:
This diagnostic data helps us understand your setup without needing to ask follow-up questions. No personal information is collected.
The feedback form requires your board to have internet access through your Wi-Fi network. Before sending, the form checks connectivity by pinging the MegaPoints cloud. If the check fails, the form will show a message explaining that internet access is needed.
The Servo-8 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, and all endpoints include CORS headers for cross-origin access.
Replace serv8-a1cc84.local with your board's hostname or IP address.
GET http://serv8-a1cc84.local/api/status
Returns hostname, IP, software version, protocol, heap memory, and more:
{
"hostname": "serv8-a1cc84",
"ip": "192.168.1.42",
"mac": "A4:CF:12:A1:CC:84",
"ssid": "ModelRailway",
"swVersion": 25,
"protocol": "CAN",
"freeHeap": 142308,
"canId": 801,
"nodeCount": 3
}
GET http://serv8-a1cc84.local/api/channels
Returns an array of all 8 channel configurations including V-Port, range, speed, type, and current position.
POST http://serv8-a1cc84.local/api/channel/3/toggle
Toggles channel 3 between its Low and High positions.
# Using curl: curl -X POST http://serv8-a1cc84.local/api/channel/3/toggle
PUT http://serv8-a1cc84.local/api/channel/1
Content-Type: application/json
{"rangeLow": 1100, "rangeHigh": 1900, "speed": 40}
# Using curl:
curl -X PUT http://serv8-a1cc84.local/api/channel/1 \
-H "Content-Type: application/json" \
-d '{"rangeLow":1100,"rangeHigh":1900,"speed":40}'
GET http://serv8-a1cc84.local/api/settings/export
Downloads a complete backup of all settings as a JSON file. You can also do this from a browser address bar.
GET http://serv8-a1cc84.local/api/boards?json
Returns a JSON list of every board discovered on the CAN bus.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/status | Board status and identity |
| GET | /api/channels | All 8 channel configurations |
| GET | /api/channel/{n} | Single channel (1–8) |
| PUT | /api/channel/{n} | Update channel settings (JSON body) |
| POST | /api/channel/{n}/toggle | Toggle servo position |
| POST | /api/channel/{n}/centre | Move servo to midpoint |
| POST | /api/channels/move | Move all servos to low or high |
| 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 (JSON file) |
| POST | /api/settings/import | Restore from backup file |
| GET | /api/diagnostics | Extended board diagnostics |
| GET | /api/products | Product database list |
| GET | /api/boards | List discovered network boards |
| GET | /api/cloud/ping | Check internet connectivity |
| POST | /api/cloud/feedback | Submit feedback form |
| POST | /api/actions/save | Save settings to permanent memory |
| POST | /api/actions/reload | Reload saved settings |
| POST | /api/actions/defaults | Reset to factory defaults |
| POST | /api/actions/reboot | Restart the board |
| POST | /api/rollback | Rollback to previous firmware |
The System2 platform has been engineered with robustness as a top priority. The Servo-8 shares the same battle-tested infrastructure 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. |
| NVS write optimisation | Settings are only written to flash when values actually change (dirty-check against shadow copies), preventing unnecessary flash wear. |
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, 240 MHz |
| Servo channels | 8 independent channels with per-channel range, speed, and type |
| Movement types | 6: Points, WigWag, Semaphore Bounce, Semaphore Lever, Gate, Accelerated |
| 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:
| Version | Date | Changes |
|---|---|---|
| V27 | 4 April 2026 | Promoted to V27 stable release. Updated screenshots throughout. Added instant rollback button to firmware validation. Added CAN bus wiring section with updated diagrams. Revised cloud backup screenshots. Updated dashboard screenshots. Cleared all change tracking markers for clean V27 baseline. |
| V25 | 1 April 2026 | Initial release of this document. Covers all V25 features including servo control, arc gauge adjustment, CAN bus, MQTT, cloud backup, OTA updates, recovery mode, and the web interface. |