Skip to Content

Welcome!

This community is for professionals and enthusiasts of our products and services. Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

This question has been flagged
1 Reply
2404 Views

Hi,

I'm trying to connect a modbus-device to my ESP32 10 io relay module, but cannot get it to work.

I have connected an EM340 energy meeter, and have verified the modbus communication with one of my other arduino PLCS (controllino)


I think I have tried everyting, including

* Used external power

* Swapped A/B lines


The behaviour is that I simply get no answer. My code attached below. What have I missed? There arent any jumpers that needs to be configured for rs485 right? Any suggestions?


Output from skecth below is:sending
sending
sending
sending
sending
sending
sending
sending
etc....




#include <ModbusRTUMaster.h>

#include <RS485.h>
ModbusRTUMaster master(RS485);

uint32_t lastSentTime = 0UL;
const uint32_t baudrate = 9600UL;

////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600UL);

  // Start the serial port

  RS485.begin(baudrate, HALFDUPLEX, SERIAL_8N1);
  RS485.setTimeout(1000);


  master.begin(baudrate);
}

////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
 

  // Check available responses often
  if (master.isWaitingResponse()) {
    ModbusResponse response = master.available();
    if (response) {
      if (response.hasError()) {
        
        Serial.print("Error ");
        Serial.println(response.getErrorCode());
      } else {       
          Serial.print("Holding Register values: ");
          for (int i = 0; i < 1; ++i) {
            Serial.print(response.getRegister(i));
            Serial.print(',');
        
          Serial.println();
        }
      }
    }
  }
  else {
    // Send a request every 1000ms
    if (millis() - lastSentTime > 1000) {
      Serial.println("sending");
   
      if (!master.readHoldingRegisters(1, 0, 1)) {
 
        Serial.println("Could not send");
      }
 
      lastSentTime = millis();
    }  
  }
}

Avatar
Discard
Best Answer

Recently there was a bug fix in the RS485 library that affects all ESP32 based products. Try to update the boards version to 2.1.3, and check if it solves the issue.

Avatar
Discard
Related Posts Replies Views Activity
1
Jul 23
1741
1
Oct 24
1377
1
Oct 24
2617
0
Sep 24
1557
2
Jul 23
2441