DEV Community

Cover image for ESP32 with RS485 16 Channel Relay Module Connection and Code
кαтнєєѕкυмαɾ
кαтнєєѕкυмαɾ

Posted on

ESP32 with RS485 16 Channel Relay Module Connection and Code

I searched a lot of sites and more tutorials to find the accurate code to control this type of relay. but I cannot find the correct code solution. After researching for three days, I found the correct code and solution for it. I will use it in my future projects. happy to share with you.

RS485 Wiring

Image description

Code



#include <ModbusMaster.h>
int pool_size1;
#define RX2 16 //RX

define TX2 17 //TX

ModbusMaster node1; //ModbusRTU Relay Slave ID1

int8_t pool_size;

void setup()
{
Serial.begin(9600);
Serial2.begin(19200, SERIAL_8N1, RX2, TX2); //RX2=16,RO ,TX2=17, DI
node1.begin(1, Serial2);

Serial.println("successfully node bigining");
delay(1000);

pool_size = node1.writeSingleRegister(0x01, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x02, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x03, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x04, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x05, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x06, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x07, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x08, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x09, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x0A, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x0B, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x0C, 0x0100);
delay(1000);

pool_size = node1.writeSingleRegister(0x0D, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x0E, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x0F, 0x0100);
delay(1000);
pool_size = node1.writeSingleRegister(0x10, 0x0100);

delay(5000);
Serial.println("Attempting to turn off relay");

pool_size = node1.writeSingleRegister(0x01, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x02, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x03, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x04, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x05, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x06, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x07, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x08, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x09, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x0A, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x0B, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x0C, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x0D, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x0E, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x0F, 0x0200);
delay(1000);
pool_size = node1.writeSingleRegister(0x10, 0x0200);
delay(5000);

Serial.println("Attempting to turn on all relays");
pool_size = node1.writeSingleRegister(0x00, 0x0700);
delay(5000);

Serial.println("Attempting to turn off all relays");
pool_size = node1.writeSingleRegister(0x00, 0x0800);
delay(5000);
}

void loop()
{

}

Enter fullscreen mode Exit fullscreen mode




Thanks you !!!

Top comments (0)