toughc5_rs485_modbus_master.ino
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);
}