toughc5_rs485_modbus_master.ino

Kit de développement IoT étanche M5Stack ToughC5 (ESP32-C5) · Fichier : toughc5_rs485_modbus_master.ino · Langage : C++ (Arduino) · Usage : Communiquer avec un périphérique industriel via le port RS485 intégré.

Exemple de maître Modbus RTU sur le bus RS485 pour la communication industrielle.

Le ToughC5 possède un transceiver RS485. Ce code utilise UART2. Assurez-vous de vérifier les broches GPIO exactes pour TX/RX/DE dans le schéma officiel du ToughC5, car elles peuvent varier selon la révision. Le mode RS485 nécessite souvent une gestion précise du timing de la direction (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);
}

← Retour à la fiche