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