Réglages à faire dans DCC++ Base Station

En premier lieu, vous devrez régler quelques paramètres à l'intérieur du programme ARDUINO de DCC++ Base Station

Dans DCC++, c'est dans le fichier Config.h que l'on sélectionne la communication par Ethernet. Ligne 34 : #define COMM_INTERFACE à 1,2 ou 3 selon votre shield.

Par ailleurs, si cela n'est pas déja fait, vous décommenterez #define IP_ADDRESS { 192, 168, 1, 200 } et vous profiterez pour donner au shield ethernet l'adresse IP 192.168.1.200.

Vous vous assurerez également que #define ETHERNET_PORT a bien pour valeur 2560.

Si vous rencontrez des difficultés avec la connexion internet et ethernet, reportez-vous à un post que j'ai rédigé sur Locoduino : ici

Config.h de DCC++ Base Station

    /////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE COMMUNICATIONS INTERFACE
//
//  0 = Built-in Serial Port
//  1 = Arduino.cc Ethernet/SD-Card Shield
//  2 = Arduino.org Ethernet/SD-Card Shield
//  3 = Seeed Studio Ethernet/SD-Card Shield W5200

#define COMM_INTERFACE   1      // A modifier pour ethernet

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE STATIC IP ADDRESS *OR* COMMENT OUT TO USE DHCP
//

#define IP_ADDRESS { 10, 0, 1, 200 }
//#define IP_ADDRESS { 192, 168, 1, 200 } // A modifier pour ethernet
//#define GATEWAY { 192, 168, 1, 254 }
//#define SUBNET{ 255, 255, 255, 0 }

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE PORT TO USE FOR ETHERNET COMMUNICATIONS INTERFACE
//

#define ETHERNET_PORT 2560  // Nécessaire pour ethernet

Dans le fichier SerialCommand.cpp de DCC++,

vous devrez ajouter après la ligne 64 ce qui est inclus entre // ajout et // fin ajout :

client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Access-Control-Allow-Origin: *");

client.println("Connection: close");

client.println();

Puis à la ligne 88 :

client.stop();

SerialCommand.cpp de DCC++ Base Station

///////////////////////////////////////////////////////////////////////////////

void SerialCommand::process(){
  char c;
    
  #if COMM_TYPE == 0

    while(INTERFACE.available()>0){    // while there is data on the serial line
     c=INTERFACE.read();
     if(c=='<')                    // start of new command
       sprintf(commandString,"");
     else if(c=='>')               // end of new command
       parse(commandString);                    
     else if(strlen(commandString)')
    } // while
  
  #elif COMM_TYPE == 1

    EthernetClient client=INTERFACE.available();

    if(client){
    // ajout
    client.println("HTTP/1.1 200 OK");
    client.println("Content-Type: text/html");
    client.println("Access-Control-Allow-Origin: *");
    client.println("Connection: close");
    client.println();
    // fin ajout
    
      while(client.connected() && client.available()){        // while there is data on the network
      c=client.read();
      if(c=='<')                    // start of new command
        sprintf(commandString,"");
      else if(c=='>')               // end of new command
        parse(commandString);                    
      else if(strlen(commandString)')
      } // while
      // ajout
      client.stop();
      // fin ajout
    }

  #endif

} // SerialCommand:process