toughc5_rs485_modbus_master.ino

Kit de desarrollo IoT resistente a la intemperie M5Stack ToughC5 (ESP32-C5) · Archivo : toughc5_rs485_modbus_master.ino · Lenguaje : C++ (Arduino) · Uso : Communiquer avec un périphérique industriel via le port RS485 intégré.

Ejemplo de maestro Modbus RTU en el bus RS485 para comunicación industrial.

El ToughC5 tiene un transceptor RS485. Este código usa UART2. Asegúrese de verificar los pines GPIO exactos para TX/RX/DE en el esquema oficial de ToughC5, ya que pueden variar según la revisión. El modo RS485 a menudo requiere un manejo preciso del temporizador de dirección (DE/RE).

toughc5_rs485_modbus_master.ino

#include <M5ToughC5.h>
#include <RS485.h>

// Le ToughC5 a un transceiver RS485 intégré.
// La broche de contrôle de direction (DE/RE) est souvent gérée automatiquement 
// ou doit être mappée selon le schéma spécifique (vérifier GPIO pour DE).
// Ici, nous utilisons l'interface série UART2 mappée sur les broches RS485.

HardwareSerial RS485Serial(2); // UART2 pour RS485

void setup() {
    M5.begin();
    Serial.begin(115200);
    
    // Initialiser RS485 à 9600 bauds (standard Modbus RTU)
    // Note: Vérifier les broches TX/RX spécifiques du connecteur HY2.0 RS485
    // Sur ToughC5, RS485 est souvent sur UART2 avec gestion auto-direction si câblé correctement
    RS485Serial.begin(9600, SERIAL_8N1, 16, 17); // Ajuster les broches TX/RX selon le schéma officiel
    
    Serial.println("RS485 Master Ready");
}

void loop() {
    // Envoyer une commande Modbus RTU simple (ex: lire registre 0)
    // Adresse 1, Fonction 3 (Read Holding Registers), Start 0, Qty 1, CRC
    uint8_t modbusCmd[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A};
    
    // Mettre en mode transmission (si gestion manuelle du DE est nécessaire)
    // digitalWrite(DE_PIN, HIGH); 
    
    RS485Serial.write(modbusCmd, sizeof(modbusCmd));
    RS485Serial.flush(); // Attendre que le buffer soit vide
    
    // Attendre la réponse (timeout simple)
    delay(100);
    
    if (RS485Serial.available()) {
        Serial.print("Received: ");
        while (RS485Serial.available()) {
            Serial.print(RS485Serial.read(), HEX);
            Serial.print(" ");
        }
        Serial.println();
    } else {
        Serial.println("No response from RS485 slave");
    }
    
    delay(2000);
}

← Volver a la ficha