Example Code for Arduino-Modify Module Address
Last revision 2025/12/20
This article provides a detailed guide on modifying module addresses using Arduino, including hardware preparation, software setup, and sample code implementation for effective use with RS485 shield.
Hardware Preparation
- 1 x Arduino Leonardo (Since RS485 to TTL will occupy one serial port, it is recommended using a device with two or more serial ports like Arduino Leonardo. Arduino Modbus protocol takes up a lot of memory, so we recommend to use Arduino mega2560 board.)
- 1 x RS485 Shield for Arduino
- 1 x DC Power Supply (DC 24V)
- 1 x USB Cable (Connect Arduino board and a PC)
Software Preparation
- Arduino IDE
- Open "Library Manager"(Ctrl+Shift+I) in IDE, find and install ArduinoModbus and ArduinoRS485 libraries.

Wiring Diagram

Other Preparation Work
Install ArduinoModbus and ArduinoRS485 libraries via Arduino IDE's Library Manager.
Sample Code
/**************************************************************************************************************
*This code tests the address modification function of the URM12 ultrasonic sensor(1500cm&RS485)
*@ author : [email protected]
*@ data : 30.09.2019
*@ version: 1.0
*RX(RS485 Shield) -> TX1/D1 (Arduino Leonardo) TX(RS485 Shield)-> RX1/D0 (Arduino Leonardo)
**************************************************************************************************************/
#include <ArduinoModbus.h>
#include <ArduinoRS485.h>
#define addr_public 0x00
typedef enum
{
PID,
VID,
SLAVE_ADDR,
COM_BAUDRATE,
COM_PARITY_STOP,
DISTANCE,
INTERNAL_TEMP,
EXTERN_TEMP,
CR
} regindex;
uint16_t cr_t = 0;
uint16_t read_data(uint16_t addr_t, uint16_t reg)
{
uint16_t data_t;
if (!ModbusRTUClient.requestFrom(addr_t, HOLDING_REGISTERS, reg, 1))
{
Serial.print("failed to read registers! ");
Serial.println(ModbusRTUClient.lastError());
data_t = 0xffff;
}
else
{
data_t = ModbusRTUClient.read();
}
return data_t;
}
uint16_t write_data(uint16_t addr_t, uint16_t reg, uint16_t data)
{
if (!ModbusRTUClient.holdingRegisterWrite(addr_t, reg, data))
{
//Serial.print("Failed to write coil! ");
//Serial.println(ModbusRTUClient.lastError());
return 0;
}
else
return 1;
}
void setup() {
Serial.begin(9600);
ModbusRTUClient.begin(19200);
delay(3000);
}
volatile uint16_t addr, res;
void loop() {
addr = 0x11;
res = write_data(addr_public, SLAVE_ADDR, addr);
Serial.print("The device address has been modified as ");
Serial.print(addr);
Serial.println(".please power off and restart the device");
while (1);
}
Result

Was this article helpful?
