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

Comme osaka je pense qu’il est tout à fait possible d’avoir en réserve dans le code (en mémoire flach) plusieurs pages html et d’envoyer dans le buffer (Ram mega328 puis Ram 28J60) la page sélectionnée.

Avec la librairie que vous utilisez pour l’Ethershield je ne sais pas faire. (c’est une librairie qui me ‘sort par les yeux’ et que j’évite autant que possible quand je veux utiliser mon Ethershield maison !)

Pour information (pas pour tester tel quel, vu qu’il utilise une autre librairie pour le 28j60) voici un pde pour mini serveur à 3 pages web pour le circuit enc28J60. Un coup d’oeil peut donner des idées pour écrire l’analyse de la requête et servir la bonne page (actualisée).

etherNode.pde (9.15 KB)

Ah ok cool parce que en plus je vient de découvrir un autre soucis en allongeant mon programme .... les "cmd==" se limite de "cmd==0 à cmd==10" à partir de 11 cela ne fonctionne plus :~

Il faut donc que je regarde comment faire un index dans ce genre la avec des liens qui pointe vers une page du même design que dans les photos précédentes avec une limitation de "chargement" du buffer !

INDEX/MENU:

PAGE PAR PIÈCE:

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;
}

pour la petite explication c’est à cause de ceci, il n’accepte que les nombres ascii (le deuxième if) de ‘0’ → ‘9’ , donc entre 0x2f (’/’ 47 décimal) et 0x3a (’:’ 58 décimal).
http://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange regarde le tableau tu comprendra mieux.

Donc tu as par exemple un char str de ‘0’ (48 décimal pour la valeur ascii) retire lui 48 (le 0x30 hexadécimal) et tu obtiens ton r (pour l’exemple ici ça sera 0 entier) comme valeur de retour de la méthode.

Ouch c'est complexe j'ai pas tout compris :astonished: donc pour avoir plus de choix que les nombres de 0 à 9, dans mes "cmd==" je peut rentrer des valeurs ASCII a la place de mes nombres compris entre 0 et 9 ?

je peut donc mettre si je comprend bien, comme valeur de "cmd ==" de 0x00 à 0x7F ? cmd==0x00 marcherais ?

merci

pas toute les valeurs ascii mais ceux que tu peux transmettre via ton url (cmd=) donc lettre et chiffre, ça augmente déjà les possibilités. il suffit de retiré la condition et la conversion.
Maintenant si tu peux transmettre plus d’1 valeur par exemple: la page, tu peux avoir au temps de commandes par pages.
Ce qui est possible aussi de faire c’est de transmetre une valeur hexa genre (cmd=1F converti facilement en 0x1F) ce qui te permetrais de 0 à 255 possibilités.

J’ai tenté un truc mais je sais pas si ça marche vu que je n’ai pas de shield.
2 Fichiers à ajouter dans la librairie “etherShield”.
http://only.dommel.be/docs/ChicoShield.zip

code arduino.

#include "ChicoShield.h"

ChicoShield cs=ChicoShield();
static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}; 
static uint8_t myip[4] = {1,1,1,1};
static char baseurl[]="http://xxx.com/";

#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];

#define LED_PIN  4
#define LED_PIN2  5
#define LED_PIN3  6

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

void setup()
{
  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);  
   
  cs.begin(mymac,myip,80);
}

void loop()
{ 
  int8_t cmd, pg;
  
  if(cs.available())
  {
    cmd=analyse_cmd(cs.readBuf(), "cmd");
    pg=analyse_cmd(cs.readBuf(), "pg");
    
    cmd_pg(pg,cmd);
    print_webpage(pg);
    
    cs.send();
  }
}

void cmd_pg(uint8_t pg, uint8_t cmd)
{
  if(pg==1)
  {
        if (cmd==0)
        {
                on_off=0;
        	digitalWrite(LED_PIN, LOW);
        }
        else if (cmd==1)
        {
                on_off=1;
        	digitalWrite(LED_PIN, HIGH);
        }
  }
  else if(pg==2)
  {
        if (cmd==0)
        {
                on_off2=0;
        	digitalWrite(LED_PIN2, LOW);
        }
        else if (cmd==1)
        {
                on_off2=1;
        	digitalWrite(LED_PIN2, HIGH);
        }
  }
  else if(pg==3)
  {
        if (cmd==0)
        {
                on_off3=0;
        	digitalWrite(LED_PIN3, LOW);
        }
        else if (cmd==1)
        {
                on_off3=1;
        	digitalWrite(LED_PIN3, HIGH);
        }
  }
}

// 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, char * val)
{
        int8_t r=-1;
     
        if (find_key_val(str,val)){
                if (*strbuf < 0x3a && *strbuf > 0x2f){
                        // is a ASCII number, return it
                        r=(*strbuf-0x30);
                }
        }
        return r;
}

uint16_t print_webpage(int8_t pg)
{
    cs.print_p(PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"));
    cs.print_p(PSTR("<body bgcolor=\"#EFECCA\"> "));
    
   switch(pg)
   {
     case 1:
          cs.print_p(PSTR("<center><a href=\""));
          cs.print(baseurl);
          cs.print_p(PSTR("\">index</a>"));
          
          cs.print_p(PSTR("<center><a href=\""));
          cs.print(baseurl); 
          if(on_off)
                  cs.print_p(PSTR("?pg=1&cmd=0\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
              
          else
                  cs.print_p(PSTR("?pg=1&cmd=1\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
     break;     
     case 2:
          cs.print_p(PSTR("<center><a href=\""));
          cs.print(baseurl);
          cs.print_p(PSTR("\">index</a>"));
          
          cs.print_p(PSTR("<center><a href=\""));
          cs.print(baseurl);   
          if(on_off2)
                  cs.print_p(PSTR("?pg=2&cmd=0\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
              
          else
                  cs.print_p(PSTR("?pg=2&cmd=1\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                  
    break;
    case 3:
          cs.print_p(PSTR("<center><a href=\""));
          cs.print(baseurl);
          cs.print_p(PSTR("\">index</a>"));
          
          
          cs.print_p(PSTR("<center><a href=\""));
          cs.print(baseurl);   
          if(on_off3)
                  cs.print_p(PSTR("?pg=3&cmd=0\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></a>"));
              
          else
                  cs.print_p(PSTR("?pg=3&cmd=1\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
    break;
    default:
      cs.print_p(PSTR("<a href=\"\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  ></a>"));
      cs.print(baseurl);
      cs.print_p(PSTR("?pg=1\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  ></a>"));
      
      cs.print_p(PSTR("<a href=\"\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  ></a>"));
      cs.print(baseurl);
      cs.print_p(PSTR("?pg=2\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  ></a>"));
      
      cs.print_p(PSTR("<a href=\"\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  ></a>"));
      cs.print(baseurl);
      cs.print_p(PSTR("?pg=3\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr10.png\"  ></a>"));
          
      
   }
   
   cs.print_p(PSTR("</body> "));
                
}

J’ai tenté mais je n’ai plus pratiqué le c/c++ et ses pointeurs :disappointed_relieved: depuis mes études … donc résultat pas garanti, mais si ça marche ça pourra t’aider peut être.

Non ça fonctionne pas :( si je comprend bien le code c'étais la mise en place d'un index c'est ça ?

J'ai mis le buffer a 1400 pour voir mais non fonctionne pas

merci

Ca compile sans erreur mais il ne se passe rien une fois su la carte, tu as rajouter les 2 fichier à la librairie ?
C’était plus pour un test d’adaptation de la librairie histoire de faire abstraction des détails et simplifier le code mais sans le shield difficile de débugger.
Tu saurais me redonner le dernier code fonctionnel ?
En repartant la dessus on pourrais plutôt utiliser la Class String http://arduino.cc/en/Reference/StringObject dans la méthode “int8_t analyse_cmd(char *str)” pour obtenir ce que tu veux plus facilement et que tu puisses y toucher.

au debut de la methode analyse_cmd(char *str) tu peux rajouter celà Serial.println(str);
Comme ceci et me dire ce qu’il y a dans la sortie console, surtout au moment d’allumer ou éteindre une lampe ?

int8_t analyse_cmd(char *str)
{
        Serial.println(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;
}

Voila ce que j'ai quand j'éteint puis allume ma lampe n°1

?cmd=0 HTTP/1.1
Host: xxxxx
Connection: keep-alive
Referer: http://xxxxx/?cmd=3
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3


favicon.ico HTTP/1.1
Host: xxxxxx
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3


?cmd=1 HTTP/1.1
Host: xxxx
Connection: keep-alive
Referer: xxxxx/?cmd=0
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3


?cmd=1 HTTP/1.1
Host: xxxxx
Connection: keep-alive
Referer: xxxxx/?cmd=0
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3


favicon.ico HTTP/1.1
Host: xxxxx
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

Tu peux tester ça ? (fais un signe de croix avant de lancer :grin:.)
normalement ça fonctionne, peut être changer certaine valeur des pin, …

#include "etherShield.h"

// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN4  4
#define LED_PIN5  5
#define LED_PIN6  6

byte page=0;

static uint8_t mymac[6] = {0x54,0x55,0x58,0x10,0x00,0x24}; 
static uint8_t myip[4] = {192,168,1,15};
static char baseurl[]="http://xxx-home.com/";
static uint16_t mywwwport =80; // listen port for tcp/www (max range 1-254)

#define BUFFER_SIZE 1000
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);
void analyse_req(char *str);

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_PIN4, OUTPUT); 
 	digitalWrite(LED_PIN4, LOW);  // switch on LED
         pinMode(LED_PIN5, OUTPUT); 
 	digitalWrite(LED_PIN5, LOW);
         pinMode(LED_PIN6, OUTPUT); 
 	digitalWrite(LED_PIN6, 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);
            goto SENDTCP;
         }
         
        analyse_req((char *)&(buf[dat_p+5]));
        
        plen=print_webpage(buf);
        	
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       
      }
    }
  }       
}

la suite dans le post suivant du a la limite de 9500caract

suite

//analyse de buf (utilisation de la class String (chaine da caractère) pour facilité les choses)
void analyse_req(char *str)
{
  String sstr = str;
  
  byte pge_hex;
  //récupère l'emplacement de la variable 'page' dans la string, retourne -1 si elle n'existe pas
  int pge = sstr.indexOf("pge");
  
  //s'il n'y a pas de variable 'page' transmise, c'est qu'il sagit d'une action sur une pin
  if(pge != -1)
  {
    //on récupère les 2 caractères qui seront converti en hexa
    page = toHex(sstr.substring(pge+4, pge+6));
  }
  else
  {
    byte pin_hex;
    int pin = sstr.indexOf("pin");
    pin_hex = toHex(sstr.substring(pin+4, pin+6));
    
    byte value_hex;
    int value = sstr.indexOf("val");
    value_hex = toHex(sstr.substring(value+4, value+6));
    
    //envoie les valeurs à la methode cmd_pin 
    //pin_hex désigne la pin à actionner
    //value_hex désigne la valeur à donner à la pin, 0=LOW, 1=HIGH ou de 0 à 255 pour les pwm
    cmd_pin(pin_hex, value_hex);
  }
}

void cmd_pin(byte pin, byte val)
{
    if (pin==LED_PIN4)
    {
    	digitalWrite(LED_PIN4, val);
    }
    else if (pin==LED_PIN5){
    	digitalWrite(LED_PIN5, val);
    }
    else if (pin==LED_PIN6){
    	digitalWrite(LED_PIN6, val);
    } 
}

uint16_t print_webpage(uint8_t *buf)
{
        
        // !!! toujour bien envoyer 2 caractère l'ors de l'envois de paramètre ex: '?pge=01' m^me si le 0 parait inutile.
        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\"> "));
        
        switch(page)
        {
          case 1:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?page=00\">index</a>"));
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            //suivant l'etat de la pin digitalRead()
            if(digitalRead(LED_PIN4))
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=04&val=01\"><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=04&val=00\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
          break;
          case 2:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?page=00\">index</a>"));
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            if(digitalRead(LED_PIN5))
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=05&val=01\"><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=05&val=00\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
          break;
          case 3:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?page=00\">index</a>"));
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            if(digitalRead(LED_PIN6))
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=06&val=01\"><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=06&val=00\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
          break;
          default:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?page=1\">chambre</a>
"));
            
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?page=2\">cuisine</a>
"));
            
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?page=3\">salon</a>
"));
            
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?page=4\">burreau</a>
"));
          
        }
        
        return(plen);
}

//methode de conversion d'un string de 2 caractères en hexa ex: ff = 0xFF
// la conversion se fera selon la valeur ascii du caractère

byte toHex(String hex)
{
  byte temp=0;
  byte low=0;
  
  for(int i=1; i >= 0;i--)
  {
    
    if(hex[i] >= 48 && hex[i] <= 57)
    {
      temp = hex[i]-48;
    }
    else if(hex[i] >= 65 && hex[i] <= 70)
    {
      temp=hex[i]-55;
    }
    else if(hex[i] >= 97 && hex[i] <= 102)
    {
       temp=hex[i]-87;
    }
    
    if(i == 0)
    {
      return (low+(temp << 4));

    }
    else
    {
      low = temp;
    }   

  }
  
  return 0x00;
}

pour convertir l’hexa en decimal tu peux utiliser la calculatrice windows en mode scientifique ou mode programmeur sous osx.
Tu as ce genre de site aussi http://easycalculation.com/hex-converter.php .

Alors ça fonctionne a peut près, voila ce que j'obtient

Donc j'ai bien un "menus" c'est nikel par contre quand je click sur les pièces je vois bien dans l'url les différentes commandes (page==1, page==2 .... ) mais rien ne ce passe ensuite =(

C'est deja pas mal comme résultat et je te remercie, je vais essayer d'éplucher pour essayer de voir ou ça merdouille mais vu mon niveau c'est loin d'être sur que je trouve d'ou vient le soucis ^^

merci

v regarder également, ça doit être une bêtise au niveau de la variable global "page" ou du switch case.

J’avait fais une bêtise, avais nommé dans l’url “page” et dans l’analyse je cherchais “pge” (ai corrigé une autre erreur).

modifie juste cette fonction “print_webpage(uint8_t *buf)”

uint16_t print_webpage(uint8_t *buf)
{
        
        // !!! toujour bien envoyer 2 caractère l'ors de l'envois de paramètre ex: '?pge=01' m^me si le 0 parait inutile.
        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\"> "));
        
        switch(page)
        {
          case 1:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=00\">index</a>"));
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            //suivant l'etat de la pin digitalRead()
            if(digitalRead(LED_PIN4))
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=04&val=01\"><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("?pin=04&val=00\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
          break;
          case 2:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=00\">index</a>"));
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            if(digitalRead(LED_PIN5))
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=05&val=01\"><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("?pin=05&val=00\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
          break;
          case 3:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=00\">index</a>"));
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            if(digitalRead(LED_PIN6))
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=06&val=01\"><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("?pin=06&val=00\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
          break;
          default:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=1\">chambre</a>
"));
            
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=2\">cuisine</a>
"));
            
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=3\">salon</a>
"));
            
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=4\">burreau</a>
"));
          
        }
        
        return(plen);
}

Non toujours pareil, bloqué sur "l'index". J'ai même changé tous les autres "page" en "pge" comme celui la

switch(page) en switch(pge)

Mais toujours le même soucis

chicotore:
Non toujours pareil, bloqué sur “l’index”. J’ai même changé tous les autres “page” en “pge” comme celui la

switch(page) en switch(pge)

Mais toujours le même soucis

Ca a surement échoué à la compil ?

encore une correction dans les je metais une mauvaise valeur pour pge ‘1’ au lieu de ‘01’ dans les url de la page index, le pire c’est que je le dis dans le commentaire du code et je n’ai pas appliqué moi même :grin: .

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?page=01\">chambre</a>
"));

corrigé, remet bien les ‘page’ et ‘pge’ comme avant dans le reste du code.

uint16_t print_webpage(uint8_t *buf)
{
        
        // !!! toujour bien envoyer 2 caractère l'ors de l'envois de paramètre ex: '?pge=01' m^me si le 0 parait inutile.
        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\"> "));
        
        switch(page)
        {
          case 1:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=00\">index</a>"));
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            //suivant l'etat de la pin digitalRead()
            if(digitalRead(LED_PIN4))
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=04&val=01\"><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=04&val=00\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
          break;
          case 2:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=00\">index</a>"));
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            if(digitalRead(LED_PIN5))
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=05&val=01\"><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=05&val=00\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
          break;
          case 3:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=00\">index</a>"));
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            if(digitalRead(LED_PIN6))
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=06&val=01\"><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=06&val=00\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
          break;
          default:
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=01\">chambre</a>
"));
            
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=02\">cuisine</a>
"));
            
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=03\">salon</a>
"));
            
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" <a href=\""));
            plen=es.ES_fill_tcp_data(buf,plen,baseurl);
            plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pge=04\">burreau</a>
"));
          
        }
        
        return(plen);
}

Non cela n’avait pas échoué lors de la compilation :wink:

J’avais également rajouté les “0” dans “pge=01 …” mais toujours le même problème :wink:

J’ai quand même copier/coller ton dernier code pour voir mais pareil que lorsque j’avais moi même rajouté les “0” auparavant …

merci

chicotore: Non cela n'avait pas échoué lors de la compilation ;)

Tu avais également modifier la variable globale alors je suppose ? Sinon tester les variables en sortie console pour voir leur état dans certaine partie du code par exemple "page" à l'entrée de la fonction print_webpage.

j’ai fait ça

uint16_t print_webpage(uint8_t *buf)
{
        Serial.println();
        // !!! toujour bien envoyer 2 caractère l'ors de l'envois de paramètre ex: '?pge=01' m^me si le 0 parait inutile.
        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\"> "));
        
        switch(page)

et je n’est rien dans le serial monitor …

        Serial.println(page);

Serait mieux :grin:

On dois pas être loin de réussir, dommage que je n'ai pas le shield pour tester.

http://only.dommel.be/docs/chicotore.pde

le fichier pour être certain qu'on ai la même chose.