toughc5_rs485_modbus_master.ino
Modbus RTU master example on the RS485 bus for industrial communication.
The ToughC5 has an RS485 transceiver. This code uses UART2. Ensure you check the exact GPIO pins for TX/RX/DE in the official ToughC5 schematic, as they may vary by revision. RS485 mode often requires precise direction timing (DE/RE) handling.
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);
}