toughc5-rs485-modbus-master.ino

Kit de desarrollo IoT resistente a la intemperie M5Stack ToughC5 (ESP32-C5) · Archivo : toughc5-rs485-modbus-master.ino · Lenguaje : Arduino C++ · Uso : Lire les données d'un capteur industriel via le bus RS485 intégré.

Ejemplo de comunicación Modbus RTU usando el bus RS485 del ToughC5.

Usa GPIOs dedicados para el transceptor RS485. Requiere la biblioteca ModbusRTU. El pin RE/DE controla la dirección del bus. Verifique la dirección del esclavo y el 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);
}

← Volver a la ficha