toughc5-rs485-modbus-master.ino

Kit de développement IoT étanche M5Stack ToughC5 (ESP32-C5) · Fichier : toughc5-rs485-modbus-master.ino · Langage : Arduino C++ · Usage : Lire les données d'un capteur industriel via le bus RS485 intégré.

Exemple de communication Modbus RTU sur le bus RS485 du ToughC5.

Utilise les pins GPIO dédiés au transceiver RS485. Nécessite la bibliothèque ModbusRTU. Le pin RE/DE contrôle la direction du bus. Vérifiez l'adresse du slave et le 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);
}

← Retour à la fiche