Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )

Bon alors avec ton code cela ne fonctionne pas, voila l’erreur …

J’ai donc repris le premier code que tu m’avait donné mais ou l’image ne changeait pas et j’ai déplacer les “byte on_off et byte on_off2” comme cela

// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN  4
#define LED_PIN2  5

byte on_off = 1;
byte on_off2 = 1;

La le compilateur ne détecte pas d’erreur (bizarre d’ailleurs car c’est la même chose que ton code non ? :astonished: j’ai pas trouver d’autres différences que le déplacement de ces deux choses ), mais ça ne fonctionne pas quand je veut accéder a l’arduino par internet … “serveur introuvable”

arf vi pour les erreurs c’est de ma fautes mauvais copier coller j’ai oublier de fermer “)” la fonction PSTR et de modifier les méthodes print_webpage() avec le on_off2.

modifie myip et base url

#include "etherShield.h"


// please modify the following two lines. mac and ip have to be unique
// in your local area network. You can not have the same numbers in
// two devices:
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}; 
static uint8_t myip[4] = {1,1,1,1};
static char baseurl[]="http://xxxxxxx.dyndns-home.com/";
static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)



#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

EtherShield es=EtherShield();

// prepare the webpage by writing the data to the tcp send buffer
uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2);
int8_t analyse_cmd(char *str);

// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN  4
#define LED_PIN2  5


byte on_off = 1;
byte on_off2 = 1;

void setup(){
  
   /*initialize enc28j60*/
	 es.ES_enc28j60Init(mymac);
   es.ES_enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
   delay(10);
        
	/* Magjack leds configuration, see enc28j60 datasheet, page 11 */
	// LEDA=greed LEDB=yellow
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
  // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
  // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
  es.ES_enc28j60PhyWrite(PHLCON,0x476);
	delay(100);
        
  //init the ethernet/ip layer:
  es.ES_init_ip_arp_udp_tcp(mymac,myip,80);
  
 	pinMode(LED_PIN, OUTPUT); 
 	digitalWrite(LED_PIN, LOW);  // switch on LED
         pinMode(LED_PIN2, OUTPUT); 
 	digitalWrite(LED_PIN2, LOW); 
}

void loop(){
  uint16_t plen, dat_p;
  int8_t cmd;

  plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

	/*plen will ne unequal to zero if there is a valid packet (without crc error) */
  if(plen!=0){
	           
    // arp is broadcast if unknown but a host may also verify the mac address by sending it to a unicast address.
    if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){
      es.ES_make_arp_answer_from_request(buf);
      return;
    }

    // check if ip packets are for us:
    if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){
      return;
    }
    
    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
      es.ES_make_echo_reply_from_request(buf,plen);
      return;
    }
    
    // tcp port www start, compare only the lower byte
    if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
         es.ES_make_tcp_synack_from_syn(buf); // make_tcp_synack_from_syn does already send the syn,ack
         return;     
      }
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
        es.ES_init_len_info(buf); // init some data structures
        dat_p=es.ES_get_tcp_data_pointer();
        if (dat_p==0){ // we can possibly have no data, just ack:
          if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
            es.ES_make_tcp_ack_from_any(buf);
          }
          return;
        }
        if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0){
          	// head, post and other methods for possible status codes see:
            // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
            plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"));
            goto SENDTCP;
        }
 	if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0){
                plen=print_webpage(buf, on_off, on_off2);
            goto SENDTCP;
         }
        cmd=analyse_cmd((char *)&(buf[dat_p+5]));
        
        if (cmd==2){
                on_off=1;
        	digitalWrite(LED_PIN, LOW);  // switch on LED
        }
        else if (cmd==3){
                on_off=0;
        	digitalWrite(LED_PIN, HIGH);  // switch off LED
        }
        else if (cmd==4){
                on_off=1;
        	digitalWrite(LED_PIN2, LOW);  // switch on LED
        }
        else if (cmd==5){
                on_off=0;
        	digitalWrite(LED_PIN2, HIGH);  // switch off LED
        }
        
        plen=print_webpage(buf, on_off, on_off2);
        	
//        	   plen=print_webpage(buf, on_off);
SENDTCP:  es.ES_make_tcp_ack_from_any(buf); // send ack for http get
           es.ES_make_tcp_ack_with_data(buf,plen); // send data       
      }
    }
  }
        
}
// The returned value is stored in the global var strbuf
uint8_t find_key_val(char *str,char *key)
{
        uint8_t found=0;
        uint8_t i=0;
        char *kp;
        kp=key;
        while(*str &&  *str!=' ' && found==0){
                if (*str == *kp){
                        kp++;
                        if (*kp == '\0'){
                                str++;
                                kp=key;
                                if (*str == '='){
                                        found=1;
                                }
                        }
                }else{
                        kp=key;
                }
                str++;
        }
        if (found==1){
                // copy the value to a buffer and terminate it with '\0'
                while(*str &&  *str!=' ' && *str!='&' && i<STR_BUFFER_SIZE){
                        strbuf[i]=*str;
                        i++;
                        str++;
                }
                strbuf[i]='\0';
        }
        return(found);
}

int8_t analyse_cmd(char *str)
{
        int8_t r=-1;
     
        if (find_key_val(str,"cmd")){
                if (*strbuf < 0x3a && *strbuf > 0x2f){
                        // is a ASCII number, return it
                        r=(*strbuf-0x30);
                }
        }
        return r;
}


uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2)
{

       int i=0;
    
        uint16_t plen;
        
        plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<body bgcolor=\"#EFECCA\"> "));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  >"));
 
      	plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=2\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=3\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        if(on_off2)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=4\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=5\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
        
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</body> "));
                
        return(plen);
}

Encore a little problème ^^ j'essaye de regarder s'il n'y a pas une "(" manquante quelque part

Oups , c’est le résultat de mon mauvais copier coller

#include "etherShield.h"


// please modify the following two lines. mac and ip have to be unique
// in your local area network. You can not have the same numbers in
// two devices:
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}; 
static uint8_t myip[4] = {1,1,1,1};
static char baseurl[]="http://xxxx.dyndns-home.com/";
static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)



#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

EtherShield es=EtherShield();

// prepare the webpage by writing the data to the tcp send buffer
uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2);
int8_t analyse_cmd(char *str);

// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN  4
#define LED_PIN2  5


byte on_off = 1;
byte on_off2 = 1;

void setup(){
  
   /*initialize enc28j60*/
	 es.ES_enc28j60Init(mymac);
   es.ES_enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
   delay(10);
        
	/* Magjack leds configuration, see enc28j60 datasheet, page 11 */
	// LEDA=greed LEDB=yellow
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
  // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
  // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
  es.ES_enc28j60PhyWrite(PHLCON,0x476);
	delay(100);
        
  //init the ethernet/ip layer:
  es.ES_init_ip_arp_udp_tcp(mymac,myip,80);
  
 	pinMode(LED_PIN, OUTPUT); 
 	digitalWrite(LED_PIN, LOW);  // switch on LED
         pinMode(LED_PIN2, OUTPUT); 
 	digitalWrite(LED_PIN2, LOW); 
}

void loop(){
  uint16_t plen, dat_p;
  int8_t cmd;

  plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

	/*plen will ne unequal to zero if there is a valid packet (without crc error) */
  if(plen!=0){
	           
    // arp is broadcast if unknown but a host may also verify the mac address by sending it to a unicast address.
    if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){
      es.ES_make_arp_answer_from_request(buf);
      return;
    }

    // check if ip packets are for us:
    if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){
      return;
    }
    
    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
      es.ES_make_echo_reply_from_request(buf,plen);
      return;
    }
    
    // tcp port www start, compare only the lower byte
    if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
         es.ES_make_tcp_synack_from_syn(buf); // make_tcp_synack_from_syn does already send the syn,ack
         return;     
      }
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
        es.ES_init_len_info(buf); // init some data structures
        dat_p=es.ES_get_tcp_data_pointer();
        if (dat_p==0){ // we can possibly have no data, just ack:
          if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
            es.ES_make_tcp_ack_from_any(buf);
          }
          return;
        }
        if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0){
          	// head, post and other methods for possible status codes see:
            // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
            plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"));
            goto SENDTCP;
        }
 	if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0){
                plen=print_webpage(buf, on_off, on_off2);
            goto SENDTCP;
         }
        cmd=analyse_cmd((char *)&(buf[dat_p+5]));
        
        if (cmd==2){
                on_off=1;
        	digitalWrite(LED_PIN, LOW);  // switch on LED
        }
        else if (cmd==3){
                on_off=0;
        	digitalWrite(LED_PIN, HIGH);  // switch off LED
        }
        else if (cmd==4){
                on_off=1;
        	digitalWrite(LED_PIN2, LOW);  // switch on LED
        }
        else if (cmd==5){
                on_off=0;
        	digitalWrite(LED_PIN2, HIGH);  // switch off LED
        }
        
        plen=print_webpage(buf, on_off, on_off2);
        	
SENDTCP:  es.ES_make_tcp_ack_from_any(buf); // send ack for http get
           es.ES_make_tcp_ack_with_data(buf,plen); // send data       
      }
    }
  }
        
}
// The returned value is stored in the global var strbuf
uint8_t find_key_val(char *str,char *key)
{
        uint8_t found=0;
        uint8_t i=0;
        char *kp;
        kp=key;
        while(*str &&  *str!=' ' && found==0){
                if (*str == *kp){
                        kp++;
                        if (*kp == '\0'){
                                str++;
                                kp=key;
                                if (*str == '='){
                                        found=1;
                                }
                        }
                }else{
                        kp=key;
                }
                str++;
        }
        if (found==1){
                // copy the value to a buffer and terminate it with '\0'
                while(*str &&  *str!=' ' && *str!='&' && i<STR_BUFFER_SIZE){
                        strbuf[i]=*str;
                        i++;
                        str++;
                }
                strbuf[i]='\0';
        }
        return(found);
}

int8_t analyse_cmd(char *str)
{
        int8_t r=-1;
     
        if (find_key_val(str,"cmd")){
                if (*strbuf < 0x3a && *strbuf > 0x2f){
                        // is a ASCII number, return it
                        r=(*strbuf-0x30);
                }
        }
        return r;
}


uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2)
{
    
        uint16_t plen;
        
        plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<body bgcolor=\"#EFECCA\"> "));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  >"));
 
      	plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=2\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=3\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off2)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=4\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=5\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
        
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</body> "));
                
        return(plen);
}

Ouep j'avais vu l'erreur j'étais en train de poster au même moment :D par contre, les boutons restent toujours en cmd=2 et cmd=4, toujours avec l'image ON ... :roll_eyes:

teste une fois ceci, j’y ai mis quelque sortie console pour voire ce qu’il ce passe.

#include "etherShield.h"


// please modify the following two lines. mac and ip have to be unique
// in your local area network. You can not have the same numbers in
// two devices:
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}; 
static uint8_t myip[4] = {1,1,1,1};
static char baseurl[]="http://xxxxxxx.dyndns-home.com/";
static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)



#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

EtherShield es=EtherShield();

// prepare the webpage by writing the data to the tcp send buffer
uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2);
int8_t analyse_cmd(char *str);

// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN  4
#define LED_PIN2  5


byte on_off = 1;
byte on_off2 = 1;

void setup(){
  
   /*initialize enc28j60*/
	 es.ES_enc28j60Init(mymac);
   es.ES_enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
   delay(10);
        
	/* Magjack leds configuration, see enc28j60 datasheet, page 11 */
	// LEDA=greed LEDB=yellow
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
  // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
  // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
  es.ES_enc28j60PhyWrite(PHLCON,0x476);
	delay(100);
        
  //init the ethernet/ip layer:
  es.ES_init_ip_arp_udp_tcp(mymac,myip,80);
  
 	pinMode(LED_PIN, OUTPUT); 
 	digitalWrite(LED_PIN, LOW);  // switch on LED
         pinMode(LED_PIN2, OUTPUT); 
 	digitalWrite(LED_PIN2, LOW); 
}

void loop(){
  uint16_t plen, dat_p;
  int8_t cmd;

  plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

	/*plen will ne unequal to zero if there is a valid packet (without crc error) */
  if(plen!=0){
	           
    // arp is broadcast if unknown but a host may also verify the mac address by sending it to a unicast address.
    if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){
      es.ES_make_arp_answer_from_request(buf);
      return;
    }

    // check if ip packets are for us:
    if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){
      return;
    }
    
    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
      es.ES_make_echo_reply_from_request(buf,plen);
      return;
    }
    
    // tcp port www start, compare only the lower byte
    if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
         es.ES_make_tcp_synack_from_syn(buf); // make_tcp_synack_from_syn does already send the syn,ack
         return;     
      }
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
        es.ES_init_len_info(buf); // init some data structures
        dat_p=es.ES_get_tcp_data_pointer();
        if (dat_p==0){ // we can possibly have no data, just ack:
          if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
            es.ES_make_tcp_ack_from_any(buf);
          }
          return;
        }
        if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0){
          	// head, post and other methods for possible status codes see:
            // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
            plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"));
            goto SENDTCP;
        }
 	if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0){
                plen=print_webpage(buf, on_off, on_off2);
            goto SENDTCP;
         }
        cmd=analyse_cmd((char *)&(buf[dat_p+5]));
        
        Serial.print("cmd:");
        Serial.println(cmd);
        Serial.print("on_off:");
        Serial.println(on_off);
        Serial.print("on_off2:");
        Serial.println(on_off2);
        
        if (cmd==2)
        {
                Serial.println("cmd2 ok");
                on_off=1;
        	digitalWrite(LED_PIN, LOW);  // switch on LED
        }
        else if (cmd==3)
        {
                Serial.println("cmd3 ok");
                on_off=0;
        	digitalWrite(LED_PIN, HIGH);  // switch off LED
        }
        else if (cmd==4)
        {
                Serial.println("cmd4 ok");
                on_off2=1;
        	digitalWrite(LED_PIN2, LOW);  // switch on LED
        }
        else if (cmd==5)
        {
                Serial.println("cmd5 ok");
                on_off2=0;
        	digitalWrite(LED_PIN2, HIGH);  // switch off LED
        }
        
        plen=print_webpage(buf, on_off, on_off2);
        	
SENDTCP:  es.ES_make_tcp_ack_from_any(buf); // send ack for http get
           es.ES_make_tcp_ack_with_data(buf,plen); // send data       
      }
    }
  }
        
}
// The returned value is stored in the global var strbuf
uint8_t find_key_val(char *str,char *key)
{
        uint8_t found=0;
        uint8_t i=0;
        char *kp;
        kp=key;
        while(*str &&  *str!=' ' && found==0){
                if (*str == *kp){
                        kp++;
                        if (*kp == '\0'){
                                str++;
                                kp=key;
                                if (*str == '='){
                                        found=1;
                                }
                        }
                }else{
                        kp=key;
                }
                str++;
        }
        if (found==1){
                // copy the value to a buffer and terminate it with '\0'
                while(*str &&  *str!=' ' && *str!='&' && i<STR_BUFFER_SIZE){
                        strbuf[i]=*str;
                        i++;
                        str++;
                }
                strbuf[i]='\0';
        }
        return(found);
}

int8_t analyse_cmd(char *str)
{
        Serial.println("analyse_cmd ...");
        int8_t r=-1;
     
        if (find_key_val(str,"cmd")){
                if (*strbuf < 0x3a && *strbuf > 0x2f){
                        // is a ASCII number, return it
                        r=(*strbuf-0x30);
                }
        }
        return r;
}


uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2)
{
    
        uint16_t plen;
        
        plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<body bgcolor=\"#EFECCA\"> "));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  >"));
 
      	plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=2\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=3\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off2)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=4\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=5\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
        
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</body> "));
                
        return(plen);
}

Peut être inversé les valeur de “on_off” les initialisé à 0 au lieu de 1 ou inversé dans les if(cmd == 2) pour teste.

Quand j'initialise à 0 j'ai bien l'image de la LED OFF et quand j'initialise a 1 j'ai bien l'image de la LED ON ... On dirais qu'en fait le click sur l'image n'est pas prit en compte ....

En sortie console ça donnait quoi ? les Serial.print() que j’ai ajouté.

Edit: ai oublier de mettre le Serial.begin() dans le setup

ai invesré les valeurs des on_off dans les if(cmd == 2), …

#include "etherShield.h"


// please modify the following two lines. mac and ip have to be unique
// in your local area network. You can not have the same numbers in
// two devices:
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}; 
static uint8_t myip[4] = {1,1,1,1};
static char baseurl[]="http://xxxxxxx.dyndns-home.com/";
static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)



#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

EtherShield es=EtherShield();

// prepare the webpage by writing the data to the tcp send buffer
uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2);
int8_t analyse_cmd(char *str);

// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN  4
#define LED_PIN2  5


byte on_off = 1;
byte on_off2 = 1;

void setup(){
  
   /*initialize enc28j60*/
	 es.ES_enc28j60Init(mymac);
   es.ES_enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
   delay(10);
        
	/* Magjack leds configuration, see enc28j60 datasheet, page 11 */
	// LEDA=greed LEDB=yellow
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
  // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
  // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
  es.ES_enc28j60PhyWrite(PHLCON,0x476);
	delay(100);
        
  //init the ethernet/ip layer:
  es.ES_init_ip_arp_udp_tcp(mymac,myip,80);
  
        
        Serial.begin(9600);

 	pinMode(LED_PIN, OUTPUT); 
 	digitalWrite(LED_PIN, LOW);  // switch on LED
         pinMode(LED_PIN2, OUTPUT); 
 	digitalWrite(LED_PIN2, LOW); 
}

void loop(){
  uint16_t plen, dat_p;
  int8_t cmd;

  plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

	/*plen will ne unequal to zero if there is a valid packet (without crc error) */
  if(plen!=0){
	           
    // arp is broadcast if unknown but a host may also verify the mac address by sending it to a unicast address.
    if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){
      es.ES_make_arp_answer_from_request(buf);
      return;
    }

    // check if ip packets are for us:
    if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){
      return;
    }
    
    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
      es.ES_make_echo_reply_from_request(buf,plen);
      return;
    }
    
    // tcp port www start, compare only the lower byte
    if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
         es.ES_make_tcp_synack_from_syn(buf); // make_tcp_synack_from_syn does already send the syn,ack
         return;     
      }
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
        es.ES_init_len_info(buf); // init some data structures
        dat_p=es.ES_get_tcp_data_pointer();
        if (dat_p==0){ // we can possibly have no data, just ack:
          if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
            es.ES_make_tcp_ack_from_any(buf);
          }
          return;
        }
        if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0){
          	// head, post and other methods for possible status codes see:
            // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
            plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"));
            goto SENDTCP;
        }
 	if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0){
                plen=print_webpage(buf, on_off, on_off2);
            goto SENDTCP;
         }
        cmd=analyse_cmd((char *)&(buf[dat_p+5]));
        
        Serial.print("cmd:");
        Serial.println(cmd);
        Serial.print("on_off:");
        Serial.println(on_off);
        Serial.print("on_off2:");
        Serial.println(on_off2);
        
        if (cmd==2)
        {
                Serial.println("cmd2 ok");
                on_off=0;
        	digitalWrite(LED_PIN, LOW);  // switch on LED
        }
        else if (cmd==3)
        {
                Serial.println("cmd3 ok");
                on_off=1;
        	digitalWrite(LED_PIN, HIGH);  // switch off LED
        }
        else if (cmd==4)
        {
                Serial.println("cmd4 ok");
                on_off2=0;
        	digitalWrite(LED_PIN2, LOW);  // switch on LED
        }
        else if (cmd==5)
        {
                Serial.println("cmd5 ok");
                on_off2=1;
        	digitalWrite(LED_PIN2, HIGH);  // switch off LED
        }
        
        plen=print_webpage(buf, on_off, on_off2);
        	
SENDTCP:  es.ES_make_tcp_ack_from_any(buf); // send ack for http get
           es.ES_make_tcp_ack_with_data(buf,plen); // send data       
      }
    }
  }
        
}
// The returned value is stored in the global var strbuf
uint8_t find_key_val(char *str,char *key)
{
        uint8_t found=0;
        uint8_t i=0;
        char *kp;
        kp=key;
        while(*str &&  *str!=' ' && found==0){
                if (*str == *kp){
                        kp++;
                        if (*kp == '\0'){
                                str++;
                                kp=key;
                                if (*str == '='){
                                        found=1;
                                }
                        }
                }else{
                        kp=key;
                }
                str++;
        }
        if (found==1){
                // copy the value to a buffer and terminate it with '\0'
                while(*str &&  *str!=' ' && *str!='&' && i<STR_BUFFER_SIZE){
                        strbuf[i]=*str;
                        i++;
                        str++;
                }
                strbuf[i]='\0';
        }
        return(found);
}

int8_t analyse_cmd(char *str)
{
        Serial.println("analyse_cmd ...");
        int8_t r=-1;
     
        if (find_key_val(str,"cmd")){
                if (*strbuf < 0x3a && *strbuf > 0x2f){
                        // is a ASCII number, return it
                        r=(*strbuf-0x30);
                }
        }
        return r;
}


uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2)
{
    
        uint16_t plen;
        
        plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<body bgcolor=\"#EFECCA\"> "));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  >"));
 
      	plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=2\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=3\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off2)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=4\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=5\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
        
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</body> "));
                
        return(plen);
}

Ah voila ça fonctionne nikel, merci :smiley:

du coup j’essaye de rajouter un bouton et la forcement ça merdouille … grrrr :stuck_out_tongue_closed_eyes:

#include "etherShield.h"


// please modify the following two lines. mac and ip have to be unique
// in your local area network. You can not have the same numbers in
// two devices:
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}; 
static uint8_t myip[4] = {192,168,1,15};
static char baseurl[]="http://chicotore.dyndns-home.com/";
static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)



#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

EtherShield es=EtherShield();

// prepare the webpage by writing the data to the tcp send buffer
uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2, byte on_off3);
int8_t analyse_cmd(char *str);

// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN  4
#define LED_PIN2  5
#define LED_PIN3  5


byte on_off = 1;
byte on_off2 = 1;
byte on_off3 = 1;

void setup(){
  
   /*initialize enc28j60*/
	 es.ES_enc28j60Init(mymac);
   es.ES_enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz
   delay(10);
        
	/* Magjack leds configuration, see enc28j60 datasheet, page 11 */
	// LEDA=greed LEDB=yellow
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
	// 0x880 is PHLCON LEDB=on, LEDA=on
	// enc28j60PhyWrite(PHLCON,0b0000 1000 1000 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x880);
	delay(500);
	//
	// 0x990 is PHLCON LEDB=off, LEDA=off
	// enc28j60PhyWrite(PHLCON,0b0000 1001 1001 00 00);
	es.ES_enc28j60PhyWrite(PHLCON,0x990);
	delay(500);
	//
  // 0x476 is PHLCON LEDA=links status, LEDB=receive/transmit
  // enc28j60PhyWrite(PHLCON,0b0000 0100 0111 01 10);
  es.ES_enc28j60PhyWrite(PHLCON,0x476);
	delay(100);
        
  //init the ethernet/ip layer:
  es.ES_init_ip_arp_udp_tcp(mymac,myip,80);
  
        
        Serial.begin(9600);

 	pinMode(LED_PIN, OUTPUT); 
 	digitalWrite(LED_PIN, LOW);  // switch on LED
         pinMode(LED_PIN2, OUTPUT); 
 	digitalWrite(LED_PIN2, LOW);
         pinMode(LED_PIN3, OUTPUT); 
 	digitalWrite(LED_PIN3, LOW);  
}

void loop(){
  uint16_t plen, dat_p;
  int8_t cmd;

  plen = es.ES_enc28j60PacketReceive(BUFFER_SIZE, buf);

	/*plen will ne unequal to zero if there is a valid packet (without crc error) */
  if(plen!=0){
	           
    // arp is broadcast if unknown but a host may also verify the mac address by sending it to a unicast address.
    if(es.ES_eth_type_is_arp_and_my_ip(buf,plen)){
      es.ES_make_arp_answer_from_request(buf);
      return;
    }

    // check if ip packets are for us:
    if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0){
      return;
    }
    
    if(buf[IP_PROTO_P]==IP_PROTO_ICMP_V && buf[ICMP_TYPE_P]==ICMP_TYPE_ECHOREQUEST_V){
      es.ES_make_echo_reply_from_request(buf,plen);
      return;
    }
    
    // tcp port www start, compare only the lower byte
    if (buf[IP_PROTO_P]==IP_PROTO_TCP_V&&buf[TCP_DST_PORT_H_P]==0&&buf[TCP_DST_PORT_L_P]==mywwwport){
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_SYN_V){
         es.ES_make_tcp_synack_from_syn(buf); // make_tcp_synack_from_syn does already send the syn,ack
         return;     
      }
      if (buf[TCP_FLAGS_P] & TCP_FLAGS_ACK_V){
        es.ES_init_len_info(buf); // init some data structures
        dat_p=es.ES_get_tcp_data_pointer();
        if (dat_p==0){ // we can possibly have no data, just ack:
          if (buf[TCP_FLAGS_P] & TCP_FLAGS_FIN_V){
            es.ES_make_tcp_ack_from_any(buf);
          }
          return;
        }
        if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0){
          	// head, post and other methods for possible status codes see:
            // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
            plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>200 OK</h1>"));
            goto SENDTCP;
        }
 	if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0){
                plen=print_webpage(buf, on_off, on_off2, on_off3);
            goto SENDTCP;
         }
        cmd=analyse_cmd((char *)&(buf[dat_p+5]));
        
        
        if (cmd==2)
        {
                on_off=0;
        	digitalWrite(LED_PIN, LOW);  // switch on LED
        }
        else if (cmd==3)
        {
                on_off=1;
        	digitalWrite(LED_PIN, HIGH);  // switch off LED
        }
        else if (cmd==4)
        {
                on_off2=0;
        	digitalWrite(LED_PIN2, LOW);  // switch on LED
        }
        else if (cmd==5)
        {
                on_off2=1;
        	digitalWrite(LED_PIN2, HIGH);  // switch off LED
        }
        else if (cmd==6)
        {
                on_off3=0;
        	digitalWrite(LED_PIN3, LOW);  // switch on LED
        }
        else if (cmd==7)
        {
                on_off3=1;
        	digitalWrite(LED_PIN3, HIGH);  // switch off LED
        }
        
        plen=print_webpage(buf, on_off, on_off2, on_off3);
        	
SENDTCP:  es.ES_make_tcp_ack_from_any(buf); // send ack for http get
           es.ES_make_tcp_ack_with_data(buf,plen); // send data       
      }
    }
  }
        
}
// The returned value is stored in the global var strbuf
uint8_t find_key_val(char *str,char *key)
{
        uint8_t found=0;
        uint8_t i=0;
        char *kp;
        kp=key;
        while(*str &&  *str!=' ' && found==0){
                if (*str == *kp){
                        kp++;
                        if (*kp == '\0'){
                                str++;
                                kp=key;
                                if (*str == '='){
                                        found=1;
                                }
                        }
                }else{
                        kp=key;
                }
                str++;
        }
        if (found==1){
                // copy the value to a buffer and terminate it with '\0'
                while(*str &&  *str!=' ' && *str!='&' && i<STR_BUFFER_SIZE){
                        strbuf[i]=*str;
                        i++;
                        str++;
                }
                strbuf[i]='\0';
        }
        return(found);
}

int8_t analyse_cmd(char *str)
{
        int8_t r=-1;
     
        if (find_key_val(str,"cmd")){
                if (*strbuf < 0x3a && *strbuf > 0x2f){
                        // is a ASCII number, return it
                        r=(*strbuf-0x30);
                }
        }
        return r;
}


uint16_t print_webpage(uint8_t *buf, byte on_off, byte on_off2, byte on_off3)
{
    
        uint16_t plen;
        
        plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<body bgcolor=\"#EFECCA\"> "));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  >"));
 
      	plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=2\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=3\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off2)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=4\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=5\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off3)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=6\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=7\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
        
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</body> "));
                
        return(plen);
}

J’ai bien tous relus et je n’est pas oublié de “on_off3” pourtant =(

merci a toi

Il se passe quoi ? buffer trop petit ?

define LED_PIN2 5

define LED_PIN3 5

Ca viendrait pas de là ?

EDIT: dans mon code j’avais une erreur, j’avais mis deux fois la PIN 5 pour 2 LED, mais cela ne venais pas de ça. Le soucis venait du buffer, je suis passé de 500 à 650 et ça fonctionne XD

#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

Je ne connais pas trop l’incidence d’augmenter le BUFFER mais bon ça fonctionne ^^

EDIT2: Ah bah OSAKA on c’est croisé dans nos réponses ^^ , le temps de faire une nouvelle réponse car le message précédent étais déjà trop long pour que je puisse ajouter mon EDIT ^^ merci a toi

le buffer ici c'est juste un tableau qui prend des uint8_t (8bits=1octet=byte=char), il sert à stocker l'entièreté du code html de ton site,chaque caractères remplira une case de ce tableau (nombre entier correspondant ascii), le tout sera envoyer à ton client (ici ton explorateur). Donc ici tu as un tableau de taille 500+1, tu peux l'augmenter au fur et à mesure que tu ajoute du code tout dépendra de la mémoire de ton arduino.

#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];

Ok mais il faut que je regarde le “buffer max” que supporte l’arduino ^^

Pour le moment j’ai fait ça, les 2 logos chambre correspondent a 2 pièces différentes mais je n’est pas encore faire d’autres logo donc j’ai mis deux fois les même :smiley:

Je vais essayer de faire un seul “tableau avec bordure” pour chaque pièce car ici les 2 pièces sont dans le même tableau. Il faut juste que je trouve comment séparer deux codes qui se suive car sinon les 2 tableaux sont l’un dans l’autre vu que les codes sont l’un a la suite de l’autre …

plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<body bgcolor=\"#EFECCA\"> "));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://home.iitk.ac.in/~mjakhtar/vlab/images/home.png\"  >"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
<table border=3 bgcolor=\"#f7f7f7\" width=\"1000\"><tr><td width=50% align=center>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  >"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
      	plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=2\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=3\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off2)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=4\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=5\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off3)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=6\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=7\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  >"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));
      	plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=2\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=3\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off2)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=4\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=5\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<a href=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        
        if(on_off3)
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=6\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
            
        else
                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?cmd=7\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));

       
       
       
        
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</body> "));
                
        return(plen);
}

merci beaucoup osaka !

http://www.siteduzero.com/tutoriel-3-13584-les-tableaux.html

Ce que tu devrais faire c'est une simple page .html sur ton pc avec ce que tu veux et ensuite le transposé dans ton code arduino. Tu peux déjà voir l'actuel code en affichant la source de ta page via ton explorateur (souvent: onglet Affichage -> code source de la page).

Malheureusement les diverses librairies Arduino pour ENC28J60 ne documentent pas la taille maximale de la page HTML que l’on peut envoyer. On apprend juste que ces librairies sont “optimisées pour l’envoi d’un paquet unique et donc l’envoi de pages de quelques centaines d’octets”.
Rien sur la taille maximale du buffer. Il reste soit le tâtonnement soit la plongée dans les détails de la librairie !!

Avec un sniffer de paquets (SmartSniff+Wincap) j’ai vu à l’instant que la page avec 3 lampes en alignement vertical envoie 484 octets.Il reste donc un peu de marge. Combien avec un buffer à 650 ?

En fin de fonction uint16_t print_webpage() j’ai ajouté des caractères de bourrage jusqu’à ce que cela plante. J’ai pu passer jusqu’à 113 caractères de bourrage ce qui fait un plafond vers 597 octets.

     plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</body>
"));

      //remplissage
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));      
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("1234567890"));
      plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("123"));
      return(plen);
}

Pour info je joins la capture de la requete et la réponse avec la page la plus longue possible pour cette taille de buffer.

pourchico.txt (5.62 KB)

Osaka : avec cette librairie on butte sur la “charge utile maximale” dans un paquet (1512 octets) puisque c’est le cahier des charges de l’initiateur de cette librairie. On est bien en dessous de la ram du Mega328 ainsi que de la RAM (8ko) du 28J60. Pour tirer le maximum des deux circuits intégrés en cause il faudrait une autre librairie… ça existe pour d’autres microcontrolleurs mais pas encore pour Arduino.

Sans doute logique vu la sram de 2ko de l'atmega (tout du moin pour le 328) , je n'y avais pas pensé sur le coup.

Du coup vaut mieux passer à une solution qui pour moi est plus logique de toute façons si on veut pouvoir aller plus loin. http://arduino.cc/forum/index.php/topic,68808.0.html

avec #define BUFFER_SIZE 1000 j’arrive à transférer une page de 903 octets…
Je vais chercher la limite.
avec #define BUFFER_SIZE 1500 j’arrive à transférer une page de 1432 octets
(pde test joint)

je ne cherche pas plus loin vu ce qui est défini dans enc28j60.h

// max frame length which the conroller will accept:
#define        MAX_FRAMELEN        1500        // (note: maximum ethernet frame length would be 1518)
//#define MAX_FRAMELEN     600

Bien sûr, osaka, en partant sur une base PHP…etc ça change de dimension !

Il n’en reste pas moins intéressant de tester les limites de l’Arduino ‘solo’, soit avec ENC28J60 soit avec W5100. Avec un buffer à 1500 chicotore peut envoyer des pages 3 fois plus ‘lourdes’ (tout est relatif !) que sa page initiale à 3 boutons. Reste à voir s’il reste assez de ram disponible pour le reste de l’application.

ChicoTestBufferMax_pde.pde (15.4 KB)

C'est quand même limite, on fini toujours par en vouloir plus. Pour chico Il faudrait déjà limité la taille d'une page par pièce par ex. Genre faire

if(p == 1)
{
    afficher la page chambre1;
}

...

Donc plus d'info possible par pièce et moins dans le buffer.

C'est quand même limite, on fini toujours par en vouloir plus. Pour chico Il faudrait déjà limité la taille d'une page par pièce par ex. Genre faire

Code: if(p == 1) { afficher la page chambre1; }

...

Donc plus d'info possible par pièce et moins dans le buffer.

J'avais déjà pensé a cette idée, c'est même cela que je voulais faire au début mais finalement j'ai renoncé pour deux raisons.

  • La première est que je ne savais pas faire d'index sur l'arduino avec des liens vers d'autres page et donc en fait des liens vers différentes partie de code.
  • La seconde, pour moi comme tous le code sera a la suite de l'index dans l'arduino, pour moi le buffer devra quand même "charger" l'index + les pages sous-jacentes non ?

J'aimerais me tromper comme cela je pourrais faire mon idée première et donc un index avec les différentes pièces et quand on click sur les logos des pièces on accèdes a la partie "commande" correspondante a la pièce en question !

merci a vous