Modbus RTU client
Overview
This is a simple application demonstrating a Modbus RTU client implementation in Zephyr RTOS.
Requirements
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 running the 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