Auteur Sujet: Retour Railcom ou RFID ou IR dans Rocrail.  (Lu 669 fois)

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1178
  • HO avec DCC++
    • Voir le profil
Retour Railcom ou RFID ou IR dans Rocrail.
« le: mai 11, 2025, 09:27:18 am »
Bonjour à tous,

Ce fil est principalement une réponse à Jean-Baptiste à sa question posée sur un autre fil.

Retour Railcom ou RFID ou IR dans Rocrail.

Faire remonter à Rocrail une information de détection à partir du réseau est assez simple. Mais on parle ici d’identification, on ne parle plus de données binaires comme dans le cas d’un capteur (HIGH – LOW) mais de plusieurs bits pouvant former 1 ou 2 octets dans le cas de l’adresse d’une locomotive. Car c’est bien l’adresse d’une locomotive que retourne le détecteur Railcom.

Dans Rocrail, on commence par créer un nouveau contrôleur

 

On choisit le protocole lan

 

Dans les réglages du protocole, on choisit un port ou on laisse le port proposé par défaut 8051,


 
Il faut redémarrer Rocrail pour qu’il prenne en compte la création de ce contrôleur

C’est tout côté Rocrail.

Le protocole lan de Rocrail est un peu verbeux et à mon sens un peu vieillot, mais bon ! Il utilise une syntaxe xml.

Voici un programme testé sur ESP32 (mais qui doit aussi fonctionner avec un Raspberry Pi WiFi ou un Arduino + Ethernet ou WiFi).

/*

   Programme de test pour envoi d'une adresse Railcom à Rocrail

   christophe.bobille 05/2025 - LOCODUINO - www.locoduino.org

*/


#include <WiFi.h>
#include <WiFiClient.h>
 
// === Configuration Wi-Fi ===
const char* ssid = "SSID";
const char* password = "PASSWORD";
 
// Adresse de Rocrail
const char* serverIP = "192.168.xxx.xxx";  // IP du PC avec Rocrail
const uint16_t serverPort = 8051;       // Port LAN configuré dans Rocrail
 
WiFiClient client;
 
void sendFB(const char* fbMsg) {
  String header = String("<xmlh><xml size="") + String(strlen(fbMsg)) + ""/></xmlh>";
  String fullMessage = header + String(fbMsg);
 
  client.print(fullMessage);
  Serial.println("Message envoyé :");
  Serial.println(fullMessage);
}
 
void setup() {
  Serial.begin(115200);
  delay(500);
 
  // === Connexion Wi-Fi ===
  Serial.print("Connexion à : ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWi-Fi connecté !");
  Serial.print("Adresse IP : ");
  Serial.println(WiFi.localIP());
 
  // === Connexion à Rocrail ===
  Serial.print("Connexion à Rocrail : ");
  Serial.print(serverIP);
  Serial.print(":");
  Serial.println(serverPort);
 
  if (client.connect(serverIP, serverPort)) {
    Serial.println("Connexion TCP OK");
 
    // Activation du capteur avec RailCom
    const char* msgOn = "<fb id="sb2e" identifier="78" state="true" bididir="1" actor="user"/>";
    sendFB(msgOn);
 
    delay(2000);  // 2 secondes
 
    // Désactivation du capteur
    const char* msgOff = "<fb id="sb1e" identifier="0" state="false"/>";
    sendFB(msgOff);
 
    client.stop();
    Serial.println("Connexion fermée");
  } else {
    Serial.println("Connexion échouée");
  }
}
 
void loop() {}

Au début du programme, on renseignera les infos pour se connecter à notre box internet

// === Configuration Wi-Fi ===
const char* ssid = "SSID";
const char* password = "PASSWORD";

puis l’adresse IP de l’ordinateur qui héberge Rocrail puis le port d’écoute renseigné plus haut : 8051

const char* serverIP = "192.168.yyy.yyy";  // IP du PC avec Rocrail
const uint16_t serverPort = 8051;       // Port LAN configuré dans Rocrail

Ligne 59 du programme, c’est ici qu’il faut renseigner l’identifiant que l’on veut communiquer à Railcom

const char* msgOn = "<fb id="sb1e" identifier="78" state="true" bididir="1" actor="user"/>";
id est l’identifiant du capteur sur le tracé Rocrail
identifier l’adresse de la locomotive.
state indique bien sûr que le capteur est actif

Une fois le programme lancé, il doit se connecter au serveur lan de Rocrail et l’on doit voir apparaitre sur le plan le nom de la locomotive dans le block à droite l’identifiant du block dans la partie gauche juste après l’adresse de la locomotive.


 
N'hésitez pas pour toutes questions.

Christophe




 
« Modifié: mai 11, 2025, 09:34:18 am par bobyAndCo »

Jean-Baptiste

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Retour Railcom ou RFID ou IR dans Rocrail.
« Réponse #1 le: mai 11, 2025, 07:12:31 pm »
Bonjour,

Merci beaucoup pour les informations.
J'imagine qu'il faut reprendre le schéma de l'article "Détection RailCom© avec ESP32 (ou Arduino)" ?
On peut intégrer directement un ESP32 sur la carte (1 ESP32 correspond à 1 détecteur avec ce sketch) ?
Sur quelle broche UART doit être connectée la sortie Railcom avec ce sketch ?
« Modifié: mai 11, 2025, 07:14:02 pm par Jean-Baptiste »

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1178
  • HO avec DCC++
    • Voir le profil
Re : Retour Railcom ou RFID ou IR dans Rocrail.
« Réponse #2 le: mai 11, 2025, 07:27:21 pm »
Euuuh, là il faut me parler plus clair car je n'ai rien compris à ta question.

J'imagine qu'il faut reprendre le schéma de l'article "Détection RailCom© avec ESP32 (ou Arduino)" ?

De quel schéma parle t'on ? le schéma de la carte de détection Railcom ? Si tu souhaites réaliser des décodeurs Railcom, oui c'est mieux de repartir sur ce schéma en effet.

On peut intégrer directement un ESP32 sur la carte (1 ESP32 correspond à 1 détecteur avec ce sketch) ?

Une fois encore, de quelle carte parles tu ? De la carte de détection Railcom ? Si c'est le cas, ce n'est pas vraiment le bon principe. Sachant qu'un ESP32 peut collecter les données de 3 détecteurs, il faudrait alors redessiner une carte à 3 détecteurs et 1 ESP pour le traitement.

Pour moi, le meilleur concept est de considérer le détecteur Railcom comme un détecteur comme un autre, IR, effet Hall, etc.. et d'utiliser les satellites comme organe central de collecte de toutes les infos. C'est le cas sur les satellites autonome qui font plein d'autres choses que de collecter Railcom. https://www.locoduino.org/spip.php?article348

Sur quelle broche UART doit être connectée la sortie Railcom avec ce sketch ?

Comme dit sur le tableau ci-dessous, l'un ou l'autre des 3 UART peuvent être utilisés, ce pourquoi j dis qu'il est possible d'implanter jusqu'à 3 détecteurs Railcom sur un seul ESP. Voici le programme qui permet cela : https://github.com/BOBILLEChristophe/Railcom-detector-freeRtos-inClass/blob/main/railcom_freeRtos_inClass.ino

UART Port   TX   RX   Remarks
UART0   GPIO 1   GPIO 3   Used for Serial Monitor and uploading code; Can be assigned to other GPIOs;
UART1   GPIO 10   GPIO 9   Must be assigned to other GPIOs
UART2   GPIO 17   GPIO 16   Can be assigned to other GPIOs

Christophe
« Modifié: mai 11, 2025, 07:45:20 pm par bobyAndCo »