The latest development version of this page may be more current than this released 2.7.5 version.

Modbus RTU Client Sample


This is a simple application demonstrating a Modbus RTU client implementation in Zephyr RTOS.


This sample has been tested with the nRF52840-DK and FRDM-K64F boards, but it should work with any board that has a free UART interface.

RTU client example is running on an evaluation board and communicates with another board that has been prepared according to the description Modbus RTU Server Sample.

In addition to the evaluation board a RS-485 shield may be used. The shield converts UART TX, RX signals to RS-485. An Arduino header compatible shield like joy-it RS-485 shield for Arduino can be used. This example uses DE signal, which is controlled by pin D9 on the JOY-IT shield. For other shields, de-gpios property must be adapted or removed in the application overlay file samples/subsys/modbus/rtu_client/app.overlay

The A+, B- lines of the RS-485 shields should be connected together.

Alternatively UART RX,TX signals of two boards can be connected crosswise.

Building and Running

This sample can be found under samples/subsys/modbus/rtu_client in the Zephyr tree.

The following commands build and flash RTU client sample.

west build -b frdm_k64f samples/subsys/modbus/rtu_client
west flash

The example communicates with the RTU server and lets the LEDs light up one after the other.

*** Booting Zephyr OS build zephyr-v2.3.0-1993-g07e8d80ae028  ***
[00:00:00.005,000] <inf> mb_rtu: RTU timeout 2005 us
[00:00:00.050,000] <inf> mbc_sample: WR|RD holding register:
48 00 65 00 6c 00 6c 00  6f 00 00 00 00 00 00 00 |H.e.l.l. o.......
[00:00:00.062,000] <inf> mbc_sample: Coils state 0x00
[00:00:00.864,000] <inf> mbc_sample: Coils state 0x07