Core2 with W5500 and RS485 (ModbusMaster) with more then 2 slaves



  • Hello, everyone

    I am trying to read data from 4 slaves with M5Core via Modbus RTU. Unfortunately, only communication with 2 slaves works. As soon as a third slave comes along, the connection breaks down with errorcode "E2" (Timeout).

    Here the code:

    #include <M5Stack.h>
    #include <ModbusMaster.h>

    ModbusMaster node1,node2,node3,node4;

    uint8_t result1,result2,result3,result4;
    TFT_eSprite img = TFT_eSprite(&M5.Lcd);
    int i;

    void setup() {

    M5.begin(true, false, true, false); // Init M5Core.
    M5.Power.begin(); // Init Power module.
    img.setColorDepth(8); // Set color depth.
    img.setTextSize(2);
    img.createSprite(320, 240); //Create a 320x240 canvas.

    Serial.begin(115200);
    Serial1.begin(9600,SERIAL_8N1,16,17);

    node1.begin(1, Serial1);
    node2.begin(2 , Serial1);
    node3.begin(3, Serial1);
    node4.begin(4, Serial1);

    }

    void loop() {

    Check1();
    delay(1000);
    Check2();
    delay(1000);
    Check3();
    delay(1000);
    Check4();
    delay(1000);
    }

    void Check1(){
    i=1;
    // Read 21 register starting at 0
    while ((i>0)&(i<5)) {
    result1 = node1.readInputRegisters(0,21);
    Serial.println(result1, HEX);

    if (result1 == node1.ku8MBSuccess) {
    Serial.print("Id1 ");
    Serial.print(node1.getResponseBuffer(0)/100);
    Serial.print(node1.getResponseBuffer(1)/100);
    Serial.println(node1.getResponseBuffer(2)/100);
    i=0;
    }
    else {
    Serial.print("Error ID1\n");
    delay(250);
    i++;
    }
    }
    }
    void Check2(){
    i=1;
    // Read 21 register starting at 0
    while ((i>0)&(i<5)) {
    result2 = node2.readInputRegisters(0,21);
    Serial.println(result2, HEX);

    if (result2 == node2.ku8MBSuccess) {
    Serial.print("Id2 ");
    Serial.print(node2.getResponseBuffer(0)/100);
    Serial.print(node2.getResponseBuffer(1)/100);
    Serial.println(node2.getResponseBuffer(2)/100);
    i=0;
    }
    else {
    Serial.print("Error ID2\n");
    delay(250);
    i++;
    }
    }
    }

    void Check3(){
    // Read 21 register starting at 0
    result3 = node3.readInputRegisters(0,21);

    Serial.println(result3, HEX);

    if (result3 == node3.ku8MBSuccess) {
    Serial.print("Id3 ");
    Serial.print(node3.getResponseBuffer(0)/100);
    Serial.print(node3.getResponseBuffer(1)/100);
    Serial.println(node3.getResponseBuffer(2)/100);
    }
    else {
    Serial.print("Error ID3\n");
    }
    }

    void Check4(){
    // Read 21 register starting at 0
    result4 = node4.readInputRegisters(0,21);

    Serial.println(result4, HEX);

    if (result4 == node4.ku8MBSuccess) {
    Serial.print("Id4 ");
    Serial.print(node4.getResponseBuffer(0)/100);
    Serial.print(node4.getResponseBuffer(1)/100);
    Serial.println(node4.getResponseBuffer(2)/100);
    }
    else {
    Serial.print("Error ID4\n");
    }
    }