Note de ce sujet :
  • Moyenne : 5 (1 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Adaptation du programme sur les vitesses de communication série du module JSY-MK-194T
#1
Bonjour à toutes et à tous.

j'ai découvert une petite galère avec ce module reçu neuf.

Une fois le montage réalisé, je n'avait aucune information venant du module, sa LED restait fixe. Le montage est installé à coté du tableau électrique au sous sol, avec l'impossibilité de me connecté via le port série.
J'ai du démonter l'installation et connecter le module sur un autre esp32 pour comprendre le problème.
En résumé, la vitesse du module était réglé sur 38400 bds (aller savoir pourquoi). J'ai eu de la chance que l'ID était resté sur 1.

J'ai recompilé le programme du routeur avec cette valeur et tout semble bien fonctionner.

Pour découvrir cette bizarrerie, j'ai réalisé un petit script de scan de la vitesse de ce module.
Je vous le donne tel quel.

Ce serait peut être intéressant de rajouter dans le programme quelque chose de similaire pour adapter la vitesse du port série de l'esp32 ou changer la vitesse sur module JSY

Cordialement
Thierry

Code :
#include <Arduino.h>
#include <HardwareSerial.h>

// UART1 : broches adaptables selon le câblage
#define RXD2 21
#define TXD2 47

// Tableau des vitesses classiques à tester
int baudrates[] = {2400, 4800, 9600, 19200, 38400, 57600, 115200};

HardwareSerial JsyMkSerial(1); // Utilisation de l'UART1

byte modbusRequest[] = { 0x01, 0x03, 0x00, 0x48, 0x00, 0x0E, 0x44, 0x18 }; // lecture des registres

// Fonction pour vérifier la validité d'une réponse Modbus (simple, à améliorer selon besoin)
bool isValidModbusResponse(byte* buf, int len) {
    // Une réponse Modbus typique commence par l'adresse esclave et le code fonction
    if (len < 5) return false;
    if (buf[0] != 0x01) return false; // Adresse esclave attendue
    if (buf[1] != 0x03) return false; // Fonction attendue
    // On pourrait ajouter ici une vérification CRC (optionnel pour un test rapide)
    return true;
}

// Fonction pour détecter le baudrate du module
int detectBaudrate() {
    for (int i = 0; i < sizeof(baudrates)/sizeof(baudrates[0]); i++) {
        int baud = baudrates[i];
        Serial.printf("Test du baudrate : %d\n", baud);
        // Initialisation de l'UART1 à la vitesse testée
        JsyMkSerial.end();
        JsyMkSerial.begin(baud, SERIAL_8N1, RXD2, TXD2);
        delay(50); // Laisse le temps à l'UART et au module de se stabiliser
        // Vider le buffer de réception
        while (JsyMkSerial.available()) JsyMkSerial.read();
        // Envoi de la trame Modbus
        for (int k = 0; k < 8 ; k++) {
          JsyMkSerial.write(modbusRequest[k]);
        }
        // JsyMkSerial.write(modbusRequest, sizeof(modbusRequest));
        Serial.print("Trame envoyée : ");
        for (int j = 0; j < sizeof(modbusRequest); j++) Serial.printf("%02X ", modbusRequest[j]);
        Serial.println();
        // JsyMkSerial.flush();
        // Attente de la réponse (timeout 200 ms)
        unsigned long start = millis();
        int idx = 0;
        byte response[64];
        while (millis() - start < 200) {
            if (JsyMkSerial.available()) {
                response[idx++] = JsyMkSerial.read();
                if (idx >= sizeof(response)) break;
            }
        }
        Serial.printf("Réponse reçue (%d octets) : ", idx);
        for (int j = 0; j < idx; j++) Serial.printf("%02X ", response[j]);
        Serial.println();
        // Vérification de la réponse
        if (isValidModbusResponse(response, idx)) {
            Serial.printf("Baudrate trouvé : %d\n", baud);
            return baud;
        }
    }
    Serial.println("Aucun baudrate valide trouvé.");
    return -1;
}

void setup() {
    Serial.begin(115200); // Port série USB pour debug
    delay(2500);
    Serial.println("Détection du baudrate du module JSY-MK-194T...");
    int foundBaud = detectBaudrate();
    if (foundBaud > 0) {
        Serial.printf("Communication établie à %d bauds !\n", foundBaud);
    } else {
        Serial.println("Impossible de communiquer avec le module.");
    }
}

void loop() {

}
Configuration
1 ESP32 Maitre V15
1 JSY-MK-194T
1 Triac

1 ESP32-S3 Esclave V15
2 sondes Températures

HomeAssistant
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)