Waveshare Modbus RTU Relay Modbus register map
Also covers Modbus RTU Relay (8-ch)
8-channel relay module with Modbus RTU over RS485
- Official
- 21 registers
- Modbus RTU
- Revision 1 · 2026-10-18
- Identity: firmware
Official: Written from the manufacturer's documentation, but not tested on a device yet. Check the map against the manufacturer's documentation before you write to a live device. Tested it? Report a test.
Communication
- Protocol
- Modbus RTU
- Unit ID
- 1
- Serial
- 9600 8N1 · 9600 baud, 8 data bits, none parity, 1 stop bit
- Byte / word order
- ABCD · bytes big-endian, words high first
- Addresses
- 0-based
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 3 holding registers, 18 coils
- Groups
- 4
- Revision
- 1 · 2026-10-18
- Added
- ()
- File
- maps/waveshare/modbus-rtu-relay.mbmap.json · 5 KB · history
- SHA-256
- d114c085396660ff1ac866e77c3d89f72e620cb777071521597c72ce700e313f
- Manufacturer
- waveshare.com
Device identity
What a tool can read to check that this map fits the connected device (SPEC.md section 4.7). Registers with a role are read like any other register.
| Role | Register | Address | Type | Values |
|---|---|---|---|---|
| Firmware | Software version | holding 32768 | uint16 |
Sources and notes
Source: Waveshare wiki: Modbus RTU Relay, development protocol V3
- Factory settings: slave address 1, 9600 baud, 8 data bits, no parity, 1 stop bit.
- Relays 1 to 8 are coils 0 to 7 (function codes 01, 05 and 0F). Address 0x00FF switches every relay at once and 0x01FF toggles every relay; both are write-only.
- The documentation lists the parity values in the UART parameter in two different orders (0x01 odd and 0x02 even in the command, the reverse in the reply); check on the device.
- Flash commands (0x0200 to 0x0207 flash on, 0x0400 to 0x0407 flash off) are function 05 writes whose value field is the delay in units of 100 ms (0x0007 = 700 ms); they are not listed as registers.
- Broadcast address 0 is accepted for writes.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| CO | 0 | bool | RW | 1 = on, 0 = off | |||
| CO | 1 | bool | RW | 1 = on, 0 = off | |||
| CO | 2 | bool | RW | 1 = on, 0 = off | |||
| CO | 3 | bool | RW | 1 = on, 0 = off | |||
| CO | 4 | bool | RW | 1 = on, 0 = off | |||
| CO | 5 | bool | RW | 1 = on, 0 = off | |||
| CO | 6 | bool | RW | 1 = on, 0 = off | |||
| CO | 7 | bool | RW | 1 = on, 0 = off | |||
| CO | 255 | bool | W | Write-only (0x00FF): 1 turns every relay on, 0 turns every relay off | |||
| CO | 256 | bool | W | Write 1 to toggle the relay | |||
| CO | 257 | bool | W | Write 1 to toggle the relay | |||
| CO | 258 | bool | W | Write 1 to toggle the relay | |||
| CO | 259 | bool | W | Write 1 to toggle the relay | |||
| CO | 260 | bool | W | Write 1 to toggle the relay | |||
| CO | 261 | bool | W | Write 1 to toggle the relay | |||
| CO | 262 | bool | W | Write 1 to toggle the relay | |||
| CO | 263 | bool | W | Write 1 to toggle the relay | |||
| CO | 511 | bool | W | Write 1 to toggle every relay | |||
| HR | 8192 | uint16 | RW | High byte: parity (0 none, 1 even, 2 odd, see notes). Low byte: baud rate (0 4800, 1 9600, 2 19200, 3 38400, 4 57600, 5 115200, 6 128000, 7 256000) | |||
| HR | 16384 | uint16 | RW | Modbus slave address, 1 to 255 | |||
| HR | 32768 | uint16 | R | ×0.01 | 100 = V1.00 |
No registers match
Try part of the name, an address (decimal or 0x hex) or clear the filters.
Help improve this map
- I tested it on a deviceReport whether it worked, even if you did not write the map.
- Suggest a correctionEdit the file on GitHub; it opens a pull request.
- Report a problemA wrong address, type, scale or byte order.
- Read the formatWhat each key of the file means (SPEC.md).