toughc5-rs485-modbus-master.ino

M5Stack ToughC5 Weatherproof IoT Dev Kit (ESP32-C5) · File : toughc5-rs485-modbus-master.ino · Language : Arduino C++ · Use case : Lire les données d'un capteur industriel via le bus RS485 intégré.

Modbus RTU communication example using the ToughC5's RS485 bus.

Uses dedicated GPIOs for the RS485 transceiver. Requires ModbusRTU library. The RE/DE pin controls bus direction. Check slave address and baudrate.

toughc5-rs485-modbus-master.ino

#include <M5ToughC5.h>
#include <ModbusRTU.h>

#define RS485_RX_PIN 16
#define RS485_TX_PIN 17
#define RS485_RE_DE_PIN 15 // Pin de contrôle direction

ModbusRTU mb;

void setup() {
  M5.begin();
  M5.Display.init();
  M5.Display.setTextColor(WHITE);
  M5.Display.drawString("RS485 Master", 10, 10);

  // Configuration UART2 pour RS485
  Serial2.begin(9600, SERIAL_8N1, RS485_RX_PIN, RS485_TX_PIN);
  pinMode(RS485_RE_DE_PIN, OUTPUT);
  digitalWrite(RS485_RE_DE_PIN, HIGH); // Mode réception par défaut

  mb.begin(&Serial2);
  mb.master();
}

void loop() {
  uint16_t regs[10];
  uint16_t regAddr = 0;
  uint16_t regNum = 10;
  uint8_t slaveId = 1;

  digitalWrite(RS485_RE_DE_PIN, LOW); // Mode émission
  delayMicroseconds(50);
  
  if (mb.readHreg(slaveId, regAddr, regs, regNum)) {
    digitalWrite(RS485_RE_DE_PIN, HIGH); // Retour en réception
    delay(100);
    
    M5.Display.setCursor(10, 30);
    M5.Display.printf("Reg 0: %d\n", regs[0]);
    M5.Display.printf("Reg 1: %d\n", regs[1]);
  } else {
    M5.Display.setCursor(10, 30);
    M5.Display.println("Comm Error");
  }
  
  delay(1000);
}

← Back to the board