Arduino Forum

International => Français => Topic started by: chicotore on Jul 10, 2011, 02:24 pm

Title: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Jul 10, 2011, 02:24 pm
Bonjours a tous,

(http://i25.servimg.com/u/f25/11/05/63/75/domo_d10.png)


Suite a l'arrêt du projet par AlienArea51, je remet en place un post pour la réalisation d'une interface domotique avec une Arduino. L'ancien topic est toujours visible a cette adresse =>  http://arduino.cc/forum/index.php/topic,60035.0.html (http://arduino.cc/forum/index.php/topic,60035.0.html).

Pour le moment il s'agit surtout le mettre en place les bases. Dans l'ancien topic on étais partis sur une solution Arduino + PC, et donc la mise en place d'un script python/processing tournant en permanence sur le PC "serveur". Cette solution peut-être bien pour quelqu'un maîtrisant parfaitement Processing ou Python .... Comme ce n'est pas mon cas j'ai commandé récemment un Ethernet-shield pour faciliter les choses.

Merci
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 10, 2011, 02:25 pm
j'ai donc commencer a créer un interrupteur commandables par le NET et par un interrupteur standard mais forcement j'ai un soucis ^^ j'ai deux variables (celle du net et celle du poussoir ) et je n'arrive pas a mettre 2 variables dans un même programme ! j'ai donc c'est deux programmes qui fonctionnent mais indépendamment, il m'est impossible de les fusionner -_-

Code: [Select]
// led wired + to pin 12, resistor to positive +5v
/* Déclaration des variables */
int relais1 = 12; // Output connected to digital pin 12
int val; // Value read from the serial port
void setup()
{
 
/* Déclaration des sorties */  
pinMode(relais1, OUTPUT);
Serial.begin(9600);
Serial.flush();

}

void loop()
{
// Read from serial port
if (Serial.available())
{
  val = Serial.read();
  Serial.println(val, BYTE);
   digitalWrite(relais1, LOW);
   
if (bitRead(val,3))
     digitalWrite(relais1, HIGH);
     else digitalWrite(relais1,LOW);


  }
 
}


Code: [Select]
int relais1 = 12;
int bouton = 7;
int conter = 0;
void setup()
{
Serial.begin(9600);
pinMode(bouton, INPUT);
pinMode(relais1, OUTPUT);
}
void loop()
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}
if (conter == 1)
{
digitalWrite(relais1, HIGH);
}
if (conter ==2)
{
digitalWrite(relais1, LOW);
conter = 0;
}

}}


merci
Title: Re: Domo'Duino, la domotique par Arduino
Post by: zoroastre on Jul 10, 2011, 08:16 pm
Yep!

Tu peux tout simplement inclure un OU dans tes conditions et incrémenter l'état.

Code: [Select]
if (Serial.available() > 0) {
  val = Serial.read();
}

if ((val == '*') || (digitalRead(bouton) == HIGH)) {etat_relais = 1; digitalWrite(relais1, HIGH);}
...


C'est une idée comme çà...

D'ailleurs, j'ai un projet similaire à Domoduino --> PC+python+cgi+arduino. Je dois d'ailleurs prendre en compte les modifications de variables initié par le pc, puis celle d'un écran tactile. J'ai choisi de constituer un tableau, représentation de la trame des données, tableau en String avec un séparateur. Je pense utiliser un tag afin de détecter le type de donnée et les convertir en données utiles grâce à atoi, strtok_r, etc.
Mes premiers essais me conforte dans cette voie, reste à perfectionner et à écrire le script python ;)

@+

Zoroastre.
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 10, 2011, 08:31 pm
C'est plutôt un "AND/ET" qu'il me faudrait non ?

Afin d'avoir " si bouton=hight ET serial-read=hight alors allumer le relais"

Je galère vraiment sur cette broutille et je suis sur que la solution est hyper simple mais pour le moment il n'y a pas grand monde pour m'aider  =(  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino
Post by: zoroastre on Jul 10, 2011, 08:34 pm
Yep!

Cà depend de ce que tu veux faire ???

Si ton désire est de pouvoir piloter ton relais soit par internet soit par bouton poussoir, alors c'est un OU qu'il te faut. Peu importe si tu as les 2 conditions en même temps, une seule suffit à déclencher l'action.

Le ET t'oblige à avoir les 2 conditions simultanément : et internet et le bp ! C'est plus restrictif : Il te faut absolument les 2 conditions pour activer le relais, il t'en manque une, il ne se passe rien !!!

@+

Zoroastre.
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 10, 2011, 08:39 pm
Ah oui exacte, du coup il faut que je trouve un "OU" pour arduino  :smiley-mr-green: dans ton exemple de code je voit pas trop ou ce situe le "OU" ?

Pour avoir " allumer le relais si bouton=hight OU serial-read=hight"

thx
Title: Re: Domo'Duino, la domotique par Arduino
Post by: zoroastre on Jul 10, 2011, 08:46 pm
Yep!

Un petit rappel pour la forme.

"ET"

@  |  bp  | Relais
0      0         0
0      1         0
1      0         0
1      1         1

"OU"

@  |  bp  | Relais
0      0         0
0      1         1
1      0         1
1      1         1

if ((val == '*') || (digitalRead(bouton) == HIGH))

Le OU est ici c'est les deux barres parallèles '||' ...tu déclares ensuite un changement d'etat avec un flag, en l'occurence conter dans ton code.

if (conter == 1) {relais on; conter = 0;}
else { relais off; conter++;}

grosso modo

@+

Zoroastre.
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 10, 2011, 09:30 pm
Quote
"ET"

@  |  bp  | Relais
0      0         0
0      1         0
1      0         0
1      1         1

"OU"

@  |  bp  | Relais
0      0         0
0      1         1
1      0         1
1      1         1


Ça j'avais compris ^^

Ok pour le OU, je vais essayer ça demain pour voir si ça fonctionne, merci bien

EDIT: je vient d'essayer mais j'ai une erreur, voila mon code

Quote
int relais1 = 12;
int val;
int bouton = 7;
int conter = 0;
void setup()
{
 
/* Déclaration des sorties */ 
pinMode(relais1, OUTPUT);
pinMode(bouton, INPUT);
Serial.begin(9600);
Serial.flush();

}

void loop()
{
// Read from serial port
if (Serial.available())
{
   val = Serial.read();
   Serial.println(val, BYTE);
    digitalWrite(relais1, LOW);
   
if (bitRead(val,3))|| (digitalRead(bouton) == HIGH))
      digitalWrite(relais1, HIGH);
      else digitalWrite(relais1,LOW);


   }
   
}


Mais il me détecte une erreur sur la partie rouge .... et en plus avec ce code je perd la fonction "counter" qui m'est utile vu que j'ai un bouton poussoir ...

merci
Title: Re: Domo'Duino, la domotique par Arduino
Post by: zoroastre on Jul 10, 2011, 10:12 pm
Yep!

Quezako l'erreur ???


Code: [Select]

...

if ((bitRead(val,3)) || (digitalRead(bouton) == HIGH)) {
     digitalWrite(relais1, HIGH);}
     else { digitalWrite(relais1,LOW); }

...


Il manque quelques accolades ici et là ;)

@+

Zoroastre.
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 11, 2011, 07:41 pm
Bon je vient de tester ce code ci dessous, aucune erreur détecter par le "compilateur arduino" mais hélas il ne fonctionne pas  :smiley-roll-blue:

Dans mon serial monitor j'ai bien la fonction de comptage des impulsion sur mon bouton poussoir mais aucune action ne se répercute sur mon relais comme c'étais le cas avec mes 2 codes séparés précedents. De plus, la remise a 0 du compteur ne fonctionne pas alors que j'ai bien un "conter = 0" dans mon code ...

Code: [Select]
int relais1 = 12;
int val;
int bouton = 7;
int conter = 0;
void setup()
{
 
/* Déclaration des sorties */ 
pinMode(relais1, OUTPUT);
pinMode(bouton, INPUT);
Serial.begin(9600);
Serial.flush();

}

void loop()
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}
{
// Read from serial port
if (Serial.available())
{
   val = Serial.read();
   Serial.println(val, BYTE);
    digitalWrite(relais1, LOW);
   
if ((bitRead(val,3)) || (conter == 1)) {
      digitalWrite(relais1, HIGH);}
      else { digitalWrite(relais1,LOW);
   conter = 0; }


   }
   
}
}
}
Title: Re: Domo'Duino, la domotique par Arduino
Post by: ojal on Jul 13, 2011, 11:04 pm
Bonsoir,

Je me permets juste une petite remarque...
Je ne comprends pas quel est ton projet?...
J'avais cru comprendre que le projet consistait en l'élaboration d'une interface domotique et la je vois une discussion qui part sur un petit détail technique qui n'a rien à voir avec le sujet initial...?
Si le projet consiste bien en une interface domotique, le première des choses à faire est de définir l'architecture de base, lmes fonctionnalités couvertes etc...
Qu'en est-il?
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chabot380 on Jul 14, 2011, 10:10 am
Salut

Quote
if ((bitRead(val,3)) || (conter == 1)) {
      digitalWrite(relais1, HIGH);}
      else { digitalWrite(relais1,LOW);
   conter = 0; }


Et modifier comme ça ! ça marche ?

if ((bitRead(val,3)) || (conter != 0)) {
      digitalWrite(relais1, HIGH);}
      else { digitalWrite(relais1,LOW);
   conter = 0; }

A+
chabot380
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 14, 2011, 12:30 pm
Quote
Bonsoir,

Je me permets juste une petite remarque...
Je ne comprends pas quel est ton projet?...
J'avais cru comprendre que le projet consistait en l'élaboration d'une interface domotique et la je vois une discussion qui part sur un petit détail technique qui n'a rien à voir avec le sujet initial...?
Si le projet consiste bien en une interface domotique, le première des choses à faire est de définir l'architecture de base, lmes fonctionnalités couvertes etc...
Qu'en est-il?


L'interface est toujours en projet mais il faut bien quelque chose derrière l'interface. Une interface sans programme a faire tourner sur l'arduino ça ne sert pas a grand chose ...
Donc pour le moment je fait la partie programme Arduino et dès que je reçoit mon ethernet-shield je bosse en parallèle sur l'interface !

Quote
Salut

Quote
if ((bitRead(val,3)) || (conter == 1)) {
     digitalWrite(relais1, HIGH);}
     else { digitalWrite(relais1,LOW);
  conter = 0; }

Et modifier comme ça ! ça marche ?

if ((bitRead(val,3)) || (conter != 0)) {
     digitalWrite(relais1, HIGH);}
     else { digitalWrite(relais1,LOW);
  conter = 0; }


je vais essayer ça merci ;)

EDIT: bon je vient de tester et toujours rien, pas d'erreur mais le programme ne fonctionne pas. Le relais ne se déclenche pas et pas de remise a zéro de ce dernier :/
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chabot380 on Jul 14, 2011, 06:55 pm
Salut

et comme ça ?

int relais1 = 12;
int val;
int bouton = 7;
int conter = 0;
void setup()
{
 
/* Déclaration des sorties */ 
pinMode(relais1, OUTPUT);
pinMode(bouton, INPUT);
Serial.begin(9600);
Serial.flush();

}

void loop()
{
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}}}
{
// Read from serial port
if (Serial.available())
{
   val = Serial.read();
   Serial.println(val, BYTE);
    digitalWrite(relais1, LOW);
}}
{
if (conter == 1) {
      digitalWrite(relais1, HIGH);}
else if ( conter != 1){digitalWrite(relais1, LOW);conter = 0;
    }
}
}
   

XD
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 14, 2011, 07:58 pm
euh avec ce dernier code je n'est pas la fonction pour activer mon relais par internet  :~

Je n'est pas "l'équation" => si bouton on OU valeur internet on => allumer relais, sinon relais off
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chabot380 on Jul 14, 2011, 08:45 pm
Ha oui désolé, voilà comme ça il y a tout !

int relais1 = 12;
int val;
int bouton = 7;
int conter = 0;
void setup()
{
 
/* Déclaration des sorties */  
pinMode(relais1, OUTPUT);
pinMode(bouton, INPUT);
Serial.begin(9600);
Serial.flush();

}

void loop()
{
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}}}
{
// Read from serial port
if (Serial.available())
{
  val = Serial.read();
  Serial.println(val, BYTE);
   digitalWrite(relais1, LOW);
}}
{
if ((bitRead(val,3)) || (conter == 1)) {
     digitalWrite(relais1, HIGH);}
else if ( conter != 1){digitalWrite(relais1, LOW);conter = 0;
   }
}
}


A+  ;)

chabot380

M**de ! il manque  la codition pour éteindre de le web. J'vais trouver !  :smiley-roll-sweat:
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 14, 2011, 09:09 pm
Cool ça fonctionne  :D en fait mon code étais bon il y avait juste des accolades mal placé ... Pour la variable internet je pense qu'en fesant ça sa fonctionne !

Code: [Select]
int relais1 = 12;
int val;
int bouton = 7;
int conter = 0;
void setup()
{
 
/* Déclaration des sorties */ 
pinMode(relais1, OUTPUT);
pinMode(bouton, INPUT);
Serial.begin(9600);
Serial.flush();

}

void loop()
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}
{
// Read from serial port
if (Serial.available())
{
   val = Serial.read();
   Serial.println(val, BYTE);
    digitalWrite(relais1, LOW);
   
if ((bitRead(val,3)) || (conter == 1)) {
      digitalWrite(relais1, HIGH);}
      else { digitalWrite(relais1,LOW);
   conter = 0; }


   }
   
}
}
}


J'ai retiré ton else if conter par un else tout simple, ça peut le faire je pense non ? je vais tester pour voir

je te remercie de ton aide !
Title: Re: Domo'Duino, la domotique par Arduino
Post by: ojal on Jul 14, 2011, 10:27 pm

L'interface est toujours en projet mais il faut bien quelque chose derrière l'interface. Une interface sans programme a faire tourner sur l'arduino ça ne sert pas a grand chose ...
Donc pour le moment je fait la partie programme Arduino et dès que je reçoit mon ethernet-shield je bosse en parallèle sur l'interface !


Pourquoi cherchez-vous à travailler avec le port série?
Dans votre projet, un l'ARDUINO sera 100% du temps connecté à un PC?
Si oui, quelle en est la raison?

Avis personnel, un projet séduisant serait un ARDUINO communicant avec une page web ou un serveur web par l'intermédiaire de l'EthernetShield...
A quoi va vous servir l''EthernetShield sinon?

Désolé si je suis passé à coté du sujet, mais votre projet nécessite une petite synthèse...  :)
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chabot380 on Jul 15, 2011, 10:53 am
Salut chicotore !

dernière mouture.

int relais1 = 12;
int val;
int bouton = 7;
int conter = 0;
void setup()
{
 
/* Déclaration des sorties */ 
pinMode(relais1, OUTPUT);
pinMode(bouton, INPUT);
Serial.begin(9600);
Serial.flush();

}

void loop()
{
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}}}
{
// Read from serial port
if (Serial.available())
{
   val = Serial.read();
   Serial.println(val, BYTE);
    digitalWrite(relais1, LOW);
}}
{
if ((bitRead(val,3)) || (conter == 1)) {
      digitalWrite(relais1, HIGH);}
else if ((bitRead(val,3)==0) || ( conter != 1)){digitalWrite(relais1, LOW);conter = 0;
    }
}
}
   
  A+
chabot380
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 15, 2011, 05:53 pm
Quote
Pourquoi cherchez-vous à travailler avec le port série?
Dans votre projet, un l'ARDUINO sera 100% du temps connecté à un PC?
Si oui, quelle en est la raison?

Avis personnel, un projet séduisant serait un ARDUINO communicant avec une page web ou un serveur web par l'intermédiaire de l'EthernetShield...
A quoi va vous servir l''EthernetShield sinon?

Désolé si je suis passé à coté du sujet, mais votre projet nécessite une petite synthèse... 


Salut,

Je voulais bosser avec le port série car je n'avais pour le moment pas ethernet shield et peut-être que certaine personnes seront dans le même cas un jours donc c'est jamais perdu pour personne !

Quote
int relais1 = 12;
int val;
int bouton = 7;
int conter = 0;
void setup()
{
 
/* Déclaration des sorties */ 
pinMode(relais1, OUTPUT);
pinMode(bouton, INPUT);
Serial.begin(9600);
Serial.flush();

}

void loop()
{
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}}}
{
// Read from serial port
if (Serial.available())
{
   val = Serial.read();
   Serial.println(val, BYTE);
    digitalWrite(relais1, LOW);
}}
{
if ((bitRead(val,3)) || (conter == 1)) {
      digitalWrite(relais1, HIGH);}
else if ((bitRead(val,3)==0) || ( conter != 1)){digitalWrite(relais1, LOW);conter = 0;
    }
}
}
   
  A+
chabot380


Merci chabot ça fonctionne impec  :D

Mais maintenant que j'ai reçu mon ethernet-shield je vais pouvoir zapper la partie Processing+PC et travailler directement avec mon ethernet-shield, c'est ojal qui va être content :p ^^

Donc je reprend quasi tous a 0, comment allumer une led a partir du net avec un ethernet-shield ^^

Title: Re: Domo'Duino, la domotique par Arduino
Post by: chabot380 on Jul 15, 2011, 06:04 pm
bonsoir chicotore

Même si cela ne sert à rien !
Moi ça m'apprend le C.

Moi aussi je vais commander un EthernetShield pour l'arrosage du jardin. (Tu l'as commander chez qui toi ? )

Je continuerai de suivre ce que tu fais, cela peut être intéressent pour moi !  XD

A+
chabot380
Title: Re: Domo'Duino, la domotique par Arduino
Post by: chicotore on Jul 15, 2011, 06:17 pm
Sur ebay j'ai prit le moins chère, 10€ fdpin  ;)

Par contre ça a l'air super complexe l'ethernet-shield  :smiley-eek: j'essaye un peu la mais p**** entre les IP, subway IP, gateway .... je pige rien  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 15, 2011, 10:18 pm
J'ai essayer cet exemple, donc pour allumer et éteindre une LED

Code: [Select]
#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://192.168.1.15/";
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);
int8_t analyse_cmd(char *str);

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


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
}

void loop(){
  uint16_t plen, dat_p;
  int8_t cmd;
  byte on_off = 1;

  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);
            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
        }
        plen=print_webpage(buf, on_off);
       
           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)
{

       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("<center><p><h1>Welcome to Arduino Ethernet Shield V1.0  </h1></p> "));
         
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr><br><form METHOD=get action=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h2> REMOTE LED is  </h2> "));
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h1><font color=\"#00FF00\"> "));
         
        if(on_off)
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("ON"));
        else
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("OFF"));
       
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  </font></h1><br> ") );
       
        if(on_off){
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=3>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch off\"></form>"));
        }
        else {
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=2>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch on\"></form>"));
        }
       
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</center><hr> <p> V1.0 <a href=\"http://www.nuelectronics.com\">www.nuelectronics.com<a>"));
 
        return(plen);
}


Je branche donc mon ethernet-shield sur ma box en RJ45 mais que je me connecte avec mon iPhone a cette adresse =>  http://192.168.1.15/   je n'est rien du tout ....
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chesnel on Jul 15, 2011, 10:21 pm
Tu trouveras peut être des pistes sur ce post http://arduino.cc/forum/index.php/topic,63116.0.html
Nous en avons pas mal discuté. Tu verras qu'il existe différente manière de communiquer avec l'arduino. D'ailleurs je suis en ce moment entrain de prendre un peu de temps pour faire mon tout premier tutoriel " Comment allumer une led à 7000km avec arduino" :)
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chabot380 on Jul 15, 2011, 10:45 pm
Ho la la chicotore !
Tu mets l'adresse MAC de l'exemple   :smiley-eek-blue:
l'adresse MAC est une adresse unique ! Tu doit avoir quelque part un autocollant avec l'adresse MAC de ton Ethernet Shield.

A+
chabot380
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chesnel on Jul 15, 2011, 11:29 pm
collé en dessous de ton ethernet shield... j'ai fait la même erreur :D
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 16, 2011, 01:11 pm
J'ai un china-ethernet-shield et j'ai pas d'autocollant avec une adresse MAC dessus  :smiley-roll-blue:

celui la => http://cgi.ebay.fr/ws/eBayISAPI.dll?ViewItem&item=290533981774&ssPageName=STRK:MEWNX:IT#ht_2207wt_899
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: AlienArea51 on Jul 16, 2011, 01:17 pm
salut Chico
Interessant la question ,car je possède la mème !!
@+
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: jfs on Jul 16, 2011, 01:54 pm
Sur la page de configuration de ton routeur tu dois pouvoir trouver l'adresse MAC en branchant ton shield sur le routeur.
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 16, 2011, 02:52 pm
J'ai regardé sur ma page Bbox et en fait j'ai bien une adresse MAC, mais que je branche mon shield ou mon PC (avec le même cable sur la même prise RJ45 de ma Bbox ) j'ai toujours la même adresse MAC. Cette adresse est bien personnelle a chaque appareil et non a chaque sortie de la box non ? donc pourquoi ça ne change pas  :smiley-yell:

De plus cette adresse est de ce type =>  00:1d:0d:xx:xx:xx donc sur le programme arduino je la rentre comme ça =>  00,1d,0d,xx,xx,xx et ça me donne une erreur lors de la compilation ...

( les xx c'est moi qui est mis ça pour ne pas avoir mon adresse MAC qui traîne sur le net, mais c'est également des variables chiffres+lettres comme les précédentes !

merci de votre aide, moi qui pensé simplifier la chose en passant a l'ethernet-shield ... je suit pas sur d'avoir en facilitée finalement !
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chesnel on Jul 16, 2011, 04:32 pm
Normal que cela te face une erreur ce n'est pas ce format 90,A2,XX,XX,XX,XX mais celui-ci 0x90,0xA2,0xXX,0xXX,0xXX

en gros tu dois avoir 0x devant chaque groupe de deux.
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 16, 2011, 04:41 pm
Toujours pareil, impossible d'accéder au serveur .... ça me soule  :smiley-yell:

EDIT: bon alors j'ai fait une avancée spectaculaire sur la chose, ça "fonctionne"  :)

Alors en fait l'adresse MAC ne sert a rien, j'ai uploader mon programme avec l'adresse de l'exemple et ça fonctionne ainsi, le fait qu cela ne fonctionne pas au début venait de 2 choses.

_ La première est que la PIN13 ne fonctionne pas avec l'ethernet-shield donc ma LED placé en PIN13 ne fonctionnais pas
_ La seconde, cela ne fonctionne que en réseau local  :smiley-eek: et moi je faisait mes essais avec mon iPhone en 3G et non en Wifi. En Wifi ça fonctionne mais pas en 3G ....

Du coup je m'interroge de l'utilité de l'ethernet-shield, il ne fonctionne que en réseau local ? dans ce cas il ne me sera vraiment d'aucune utilité ...
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: colassep on Jul 16, 2011, 06:38 pm
Bonjour !

En réseau local, l'arduino répond à des commandes locales en ethernet, ou wifi. (adresse locale exemple 192.168.1.95)

Si tu veux commander ton arduino par internet, il doit être visible sur internet. Il faut donc soit avoir une adresse ip fixe chez soi (avec sa box) et puis déclarer l'adresse de l'arduino dedans (NAT).

exemple adresse NAT :
protocole : TCP
port source : 500
adresse ip (de l'arduino) : 192.168.1.95 par exemple

Ainsi, quand depuis le web, tu tapes l'adresse fixe de ta box (exemple : 80.209.11.88), tu ajoutes 80.209.11.88:500 pour qu'il te redirige vers un port mappé qui correspond à ton arduino.

Si tu n'as pas d'IP fixe, alors tu dois en plus bidouiller un compte DynDNS (voir le sujet sur le web), qui te permets de simuler une ip fixe

Je sais pas si j'ai été bien clair, mais c'est comme cela que j'ai procédé et ça marche.
(par contre, je ne parviens pas à faire fonctionner en local et en Internet avec le même programme, car les adresses sont différentes)

Bon courage !

Pascal
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 16, 2011, 07:07 pm
J'étais justement en train de mettre en place un Dyndns pour rediriger mon IP non fixe. Donc ça fonctionne, quand je tape mon adresse dyndns j'arrive sur la page HTML de mon ethernet-shield mais le soucis est que dès que je click sur le bouton pour allumer ou éteindre la LED je me retrouve dirigé sur la page "192.168.1.15" et donc ça ne fonctionne pas ...

Il faudrait peut-être que dans mon code arduino je mette l'adresse de Dyndns a la place de 192.168.1.15 non ?

thx

EDIT: c'est good, j'ai mis l'adresse de mon Dyndns dans mon programme Arduino et maintenant ça fonctionne en local et en "non local" avec mon iPhone en 3G  ;) Il me reste plus qu'à bosser un peut le truc car ça change de la programmation "normale" Arduino ce petit ethernet-shield ...
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 16, 2011, 09:06 pm
Voici donc un mini tuto pour faire fonctionner un ethernet-shield, on sait jamais cela pourrais servir a certains qui sont pas doués comme moi  :D

Alors pour commencer bien sur il vous fait une arduino et un ethernet-shield, le miens est une version "ebay" a 12€ fdpin

(http://i660.photobucket.com/albums/uu327/onlyforever02/Arduino%20Duemilanove%202009/2-1.jpg?t=1287925432)


S'agissant d'un shield, il suffit de la pluguer sur l'arduino, brancher le câble USB sur cette dernière et le câble RJ45 entre le shield et votre routeur/box. Ce qui nous donnes ceci

(http://i45.servimg.com/u/f45/11/05/63/75/img_0610.jpg)


Maintenant on passe au code. Pour cela il vous faut déjà installer la librairies de l'ethernet-shield

ici => http://www.nuelectronics.com/download/projects/etherShield.zip (http://www.nuelectronics.com/download/projects/etherShield.zip)

Il vous suffit de deziper ce fichier dans votre librairie arduino. On voit ici sur ma photo le chemin d'accès entouré en rouge et sous la flèche on voit que j'ai déjà installer la librairie ethernetshield dans ma librairie. En principe vous arrivez exactement à la même chose une fois avoir dezipper le fichier ci dessus !

(http://i45.servimg.com/u/f45/11/05/63/75/ethern10.jpg)


Une fois cela fait on peut passer au code arduino, pour commencer on va faire une simple LED pouvant être ON/OFF a distance par le biais d'une interface web. Pour cela dans le petit logiciel arduino, ouvrez l'exemple ethershield_web_switch.

(http://i45.servimg.com/u/f45/11/05/63/75/ether10.jpg)


Il va donc falloir modifier un petit peut ce "code".

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


Dans cette partie, vérifiez que cette adresse IP n'est pas déjà attribuée a un matériel de votre réseau. Pour cela rendez-vous sur la page de votre routeur et regardez les IP déjà utilisé. Ou alors passez par l'invit de commande windows => CMD puis ipconfig/

A partir de ce moment, vous pouvez accéder a votre ethernetshield en local ( c'est a dire chaque machine branché a votre routeur/box peut accéder a votre ethernetshield mais pas un smartphone en 3G par exemple ou une personne utilisant une autre box/routeur ).

Pour avoir accès a votre ethernetshield dans le monde entier, il vous faut premièrement aller dans la configuration NAT de votre routeur/box et entrer cela dedans. Il vous faut mettre la même IP et le même port que dans le code arduino

(http://i45.servimg.com/u/f45/11/05/63/75/routeu11.jpg)


On va maintenant ce créer une redirection d'IP. Cela permet dans le cas d'un IP non fixe, de pouvoir toujours accéder a son interface par une adresse unique. Pour cela rendez-vous sur le site "dyndns" et entrer un nom dans la partie ici encadré en rouge.

(http://i45.servimg.com/u/f45/11/05/63/75/dyndns10.jpg)


Ensuite vous faite continuer, checkout etc .... et enfin vous devez recevoir un mail de validation ! une fois ce mail reçu c'est bon, vous pouvez accéder a votre ethernet-shield a partir de l'adresse que vous avez créez sur dyndns.

(http://i45.servimg.com/u/f45/11/05/63/75/img_0610.png)


merci

Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: ojal on Jul 16, 2011, 10:43 pm
Bravo, tout semble marcher  8)

Pourquoi as-tu choisis d'installer la librairie etherShield alors que la librairie officielle Ethernet est en standard???
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 16, 2011, 11:06 pm
La librairie ethernet standard fonctionne avec les shields "officiels" mais pas avec ma versions made in china, la puce est différente.

ENC28J60 les fausses VS W5100 pour les officiels
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chabot380 on Jul 17, 2011, 09:14 am
chicotore très fort avec matériel chinois ! Bravo !  :D
(http://www.casafree.com/modules/xcgal/albums/userpics/38023/chat%20chinois.jpg)

A+
chabot380
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: AlienArea51 on Jul 17, 2011, 09:24 am
Salut Chico et bravo pour le tuto.

Et comme tu l'as si bien dit:
Quote
Voici donc un mini tuto pour faire fonctionner un ethernet-shield, on sait jamais cela pourrais servir a certains qui sont pas doués

Comme toi !!?? , je pense que tu te sous-estime  ;)

@chabot380
Trop fort la photo  XD XD XD

@+
William

Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 17, 2011, 10:34 am
La photo  :smiley-mr-green:

Sinon je cherche a intégrer une image dans la page "HTML" hébergé dans l'arduino. J'ai essayer ça :

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src="http://www.casafree.com/modules/xcgal/albums/userpics/38023/chat%20chinois.jpg"  > "));

Mais ça me détecte une erreur a cause des "" ( en rouge ci dessus ), j'ai donc essayer en les retirant mais bien sur cela ne fonctionne pas ...

Quelqu'un a une idée comment ça fonctionne ? ce n'est pas du HTML standard dans l'ethernetshield ?
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: jfs on Jul 17, 2011, 10:38 am
Essaye ça :

Code: [Select]
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR('<center><img src="http://www.casafree.com/modules/xcgal/albums/userpics/38023/chat%20chinois.jpg"  > '));
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 17, 2011, 11:03 am
nop  :smiley-roll-blue:

(http://i45.servimg.com/u/f45/11/05/63/75/error10.jpg)
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: jfs on Jul 17, 2011, 11:17 am
Et ça :

Code: [Select]
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://www.casafree.com/modules/xcgal/albums/userpics/38023/chat%20chinois.jpg\"  > "));
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: al1fch on Jul 17, 2011, 02:23 pm
Bonjour

La dernière proposition de Jean François passe chez moi et fonctionne après avoir augmenté un peu la taille du buffer pour tenir compte de l'allongement du code HTML
Testé avec la version suivante (juin 2011) de la librairie Ethershield : (Nuelectronics améliorée, completée...)
https://github.com/thiseldo/EtherShield
(http://blog.thiseldo.co.uk/)
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: zeric on Jul 18, 2011, 01:34 pm
Bonjour, comme expliqué plus haut pour la pin 13 qui ne fonctionne pas, j'ai eu le même problème pour une autre application.
Le paliatif, j'ai dessoudé la led et la résistance sur ma Duemilanove et seulement la led sur ma Nano (à défaut de pouvoir
dessouder la résistance de limitation car elle fait partie d'un réseaux 4R), si ça peut aider...
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 18, 2011, 05:50 pm
Quote
Et ça :

Code:
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://www.casafree.com/modules/xcgal/albums/userpics/38023/chat%20chinois.jpg\"  > "));


JF tu est une bête  XD ça fonctionne nikel !!!
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: jfs on Jul 18, 2011, 06:02 pm
Content d'avoir pu t'aider  XD
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 18, 2011, 07:50 pm
Tient en passant j'ai encore un petit problème (décidement  ]:) )

Code: [Select]
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=\"#4BB5C1\"> "));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><p><h1>Domo'Duino, la domotique par Arduino</h1></p> "));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i25.servimg.com/u/f25/11/05/63/75/domo_d10.png\"  > "));
       
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr><br><form METHOD=get action=\""));
       plen=es.ES_fill_tcp_data(buf,plen,baseurl);
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h2> REMOTE LED is  </h2> "));
       
       if(on_off)
        [color=red]plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("ON"));[/color]
       else
        [color=red]plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("OFF"));[/color]
       
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  </font></h1><br> ") );
       


Dans cette partie du code arduino j'ai une partie qui m'affiche ON ou OFF a l'écran, je voudrais remplacer cela par une image ... jusque la ok

En toute logique je met donc en place ce code la a la place

Code: [Select]
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=\"#4BB5C1\"> "));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><p><h1>Domo'Duino, la domotique par Arduino</h1></p> "));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i25.servimg.com/u/f25/11/05/63/75/domo_d10.png\"  > "));
       
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr><br><form METHOD=get action=\""));
       plen=es.ES_fill_tcp_data(buf,plen,baseurl);
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h2> REMOTE LED is  </h2> "));
       
       if(on_off)
        [color=red]plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"  > "));[/color]
       else
        [color=red]plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off11.png\"  > "));[/color]
       
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  </font></h1><br> ") );
       


Mais bon forcement ça ne fonctionne pas. Le compilateur arduino ne me détecte aucune erreur mais lorsque je veut accéder a mon ethernet shield j'ai une erreur comme quoi impossible d'accéder au serveur ... le code ne fonctionne donc pas mais pourquoi ? on dirais que quelque chose bloc la fonction "image" dans cette partie du code ...

Et en même temps je cherche comment mettre en place plusieurs boutons, j'ai beau cherché je ne trouve pas comment avoir deux boutons, a chacune de mes tentatives le compilateur arduino me trouve une erreur ... pourquoi c'est jamais simple  =(
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: jfs on Jul 18, 2011, 07:55 pm
Si je mets cette adresse directement dans mon navigateur :

http://i25.servimg.com/u/f25/11/05/63/75/off10.png

J'ai rien....  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 18, 2011, 09:14 pm
Oui parce que je vient de les supprimer sur servimg, mais même si tu fait un copier coller de la première image cela ne fonctionne pas

Code: [Select]
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i25.servimg.com/u/f25/11/05/63/75/domo_d10.png\"  > "));

Voila si tu colle ça a la place de ON et de OFF je n'est pas accès a mon ethernet-shield ... et dès que je remet ça

Code: [Select]
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("ON"));

ça refonctionne .... c'est a rien y comprendre  :smiley-yell:
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: al1fch on Jul 18, 2011, 10:46 pm
As-tu essayé, chicotore, d'augmenter un peu la taille du buffer ?

Sauf erreur de ma part avec cette librairie on commence par rassembler toute la page web dans un buffer puis on envoie le contenu du buffer.

L'explication du défaut constaté serait alors la suivante :
Le navigateur bloque parce qu'il attend la fin de la page.... qui ne lui a pas été envoyée !!
C'est le cas quand le buffer n'est pas assez grand pour accepter le ou les les derniers
Code: [Select]
plen=es.ES_fill_tcp_data_p(buf... Chaque 'fill ....buf' rajoute des octets jusqu'au  moment ou le buffer est plein.
Les octets 'excédentaires" sont perdus et jamais envoyés au client.
S'il ne manque que le dernier ">" de la page le navigateur attendra longtemps....
(Quand ça passe profites en pour voir le code source dans le navigateur, mesurer la taille en octets.et voir si 5OO suffit)
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 19, 2011, 06:30 pm
J'avais déja pensé au buffer justement, je l'avais donc passé a 800 comme ceci

Code: [Select]
#define BUFFER_SIZE 800
static uint8_t buf[BUFFER_SIZE+1];
#define STR_BUFFER_SIZE 22
static char strbuf[STR_BUFFER_SIZE+1];


Mais toujours pareil, cela ne fonctionne pas   :smiley-yell:
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chesnel on Jul 19, 2011, 06:33 pm
est-ce que qqun pourrais m'éclairer sur un point ? Quel est l'intérêt que la page internet soit générer directement par l'arduino ? Je trouve que nous sommes extrèmement limité niveau programmation avec cette méthode :S
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 19, 2011, 07:16 pm
Tu veut faire comment sinon pour rester dans un concept "arduino autonome", c'est a dire sans PC qui tourne derrière ?

Héberger tous sur un FTP et utiliser l'ethernet-shield pour interroger un fichier txt contenants des variables par exemple ?
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chesnel on Jul 19, 2011, 07:44 pm
par exemple :) En ce qui concerne le stockage d'information provenant d'arduino j'utilise une base de donnée MySQL  et du php. Mais je peux comprendre que cela implique l'apprentissage dans d'autre langage. Mais si tu veux quelque chose de simpa et plus "flexible" une solution.. un peu d'html et un endroit ou héberger ta page :) 
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 19, 2011, 07:50 pm
Mouais enfin pour le moment j'aimerais déjà faire fonctionner 2 ou 3 boutons  :smiley-mr-green: et c'est pas gagné vu que j'arrive même pas a afficher mes images  :smiley-yell:
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: jfs on Jul 19, 2011, 07:56 pm

par exemple :) En ce qui concerne le stockage d'information provenant d'arduino j'utilise une base de donnée MySQL  et du php. Mais je peux comprendre que cela implique l'apprentissage dans d'autre langage. Mais si tu veux quelque chose de simpa et plus "flexible" une solution.. un peu d'html et un endroit ou héberger ta page :) 


Je suis assez d'accord avec cette solution pour un page conséquente, malgré la latence que peut connaitre le réseau suivant les hébergeurs.

Par contre pour une petite page avec trois ligne de texte et un bouton, le mini serveur que peut faire l'Arduino est un bonne solution.
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 20, 2011, 05:48 pm
et sinon quelqu'un a une réponse pour mes images ? ^^

thx
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chesnel on Jul 21, 2011, 05:11 am
Comme tu présente le problème non... Mais je peux te rediriger vers un tuto qui met en pratique l'ethernet Shield et arduino comme serveur pour contrôler 7 Led Différentes.

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoEthernetServeurControleLEDx7

Ce site regorge d'informations et de tutoriels pour arduino c'est avec ce tuto que j'ai commencer avec mon ethernet Shield. De plus, il affiche une image :) J'espère que ça t'aidera
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 21, 2011, 06:03 pm
Quote
Comme tu présente le problème non


C'est a dire ? j'ai expliqué mon problème en détail au dessus ....
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chabot380 on Jul 21, 2011, 06:10 pm
salut chicotore ! XD

Quote
http://i25.servimg.com/u/f25/11/05/63/75/on10.png


Une image d'un pixel c'est vraiment peu !!  :smiley-eek-blue:

A+ chabot380
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 21, 2011, 06:16 pm
Oui c'est un bug de servimg mais cela n'est pas la cause du problème car au pire il y aurait une micro image d'affiché ... mais la le serveur ne fonctionne pas du tout quand je veut mettre une image comme "statu" de l'état de la LED.

EDIT: voila j'ai rectifié les liens et toujours le même soucis

merci
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chabot380 on Jul 21, 2011, 06:39 pm
là je vois les images  :D
Mais la lampe éteinte c'est ecrit allumée !   :smiley-eek:

(http://i45.servimg.com/u/f45/11/05/63/75/on11.png)

(http://i45.servimg.com/u/f45/11/05/63/75/off11.png)
A+
chabot380
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 21, 2011, 07:40 pm
Oui j'ai fait a la va vite mais bon ça change rien au problème  :D s'il ne me reste plus qu'un calque a changer sous photoshop je peut faire ça en 2 seconde ....

Bref je galère a afficher 2 images c'est vraiment affligeant  XD
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chabot380 on Jul 21, 2011, 09:05 pm
une question.
A quoi servent les balises color ?
Quote
if(on_off)
           plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("ON"));
        else
           plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("OFF"));


:smiley-roll:
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chesnel on Jul 21, 2011, 09:40 pm

Quote
Comme tu présente le problème non


C'est a dire ? j'ai expliqué mon problème en détail au dessus ....


ça voulait juste dire que je ne sais pas :)
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 21, 2011, 10:48 pm
@chabot: Les balises color étais pour afficher en rouge le texte sur le forum mais a l'intérieur de
Code: [Select]
cela ne fonctionne pas ^^ mais dans mon programme arduino elles n'y sont pas  ;)

@chesnel: Ok ^^
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chabot380 on Jul 22, 2011, 07:58 am
salut chicotore.

Code: [Select]
if(on_off) {
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("ON")); }
else {
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("OFF")); }


c'est mieux comme ça ?  :smiley-roll:

A+
chabot380


Edit de Jean-François : avec les balise [code ][/ code] c'est mieux aussi  XD
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: ojal on Jul 22, 2011, 01:30 pm
Je me permets de revenir une fois de plus dans cette discussion...
Je ne comprends pas du tout comment ce projet avance... Vous en êtes à essayer un problème très ponctuel d'affichage d'une image alors qu'aucune base n'a été définie pour ce projet de domotique...
Une fois de plus, je préconise d'établir un cahier des charges, définir des orientations d'architecture etc etc...

Qu'en pensez-vous?
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 22, 2011, 06:34 pm
Quote
salut chicotore.

Code:
if(on_off) {
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("ON")); }
else {
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("OFF")); }

c'est mieux comme ça ?  


Eux ça c'est le programme d'origine qui affiche ON et OFF, moi je veut afficher mes deux images !

Quote
Je me permets de revenir une fois de plus dans cette discussion...
Je ne comprends pas du tout comment ce projet avance... Vous en êtes à essayer un problème très ponctuel d'affichage d'une image alors qu'aucune base n'a été définie pour ce projet de domotique...
Une fois de plus, je préconise d'établir un cahier des charges, définir des orientations d'architecture etc etc...

Qu'en pensez-vous?


Mon cahier des charges se définie sur le tas suivant ce que j'arrive a mettre en place et ce que je n'arrive pas a faire !


Je remet ma question ici sans les balises color qui vous perturbes ^^ C'est juste un bug quand j'ai posté sur le forum dans le code que j'ai uploader sur mon arduino il n'y a pas ces balises sinon de toute façons le compilateur arduino aurait détecté cette erreur !

Quote
Tient en passant j'ai encore un petit problème (décidement  ]:) )

Code: [Select]
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=\"#4BB5C1\"> "));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><p><h1>Domo'Duino, la domotique par Arduino</h1></p> "));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i25.servimg.com/u/f25/11/05/63/75/domo_d10.png\"  > "));
       
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr><br><form METHOD=get action=\""));
       plen=es.ES_fill_tcp_data(buf,plen,baseurl);
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h2> REMOTE LED is  </h2> "));
       
       if(on_off)
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("ON"));
       else
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("OFF"));
       
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  </font></h1><br> ") );
       


Dans cette partie du code arduino j'ai une partie qui m'affiche ON ou OFF a l'écran, je voudrais remplacer cela par une image ... jusque la ok

En toute logique je met donc en place ce code la a la place

Code: [Select]
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=\"#4BB5C1\"> "));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><p><h1>Domo'Duino, la domotique par Arduino</h1></p> "));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i25.servimg.com/u/f25/11/05/63/75/domo_d10.png\"  > "));
       
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<hr><br><form METHOD=get action=\""));
       plen=es.ES_fill_tcp_data(buf,plen,baseurl);
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<h2> REMOTE LED is  </h2> "));
       
       if(on_off)
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"  > "));
       else
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off11.png\"  > "));
       
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  </font></h1><br> ") );
       


Mais bon forcement ça ne fonctionne pas. Le compilateur arduino ne me détecte aucune erreur mais lorsque je veut accéder a mon ethernet shield j'ai une erreur comme quoi impossible d'accéder au serveur ... le code ne fonctionne donc pas mais pourquoi ? on dirais que quelque chose bloc la fonction "image" dans cette partie du code ...

Et en même temps je cherche comment mettre en place plusieurs boutons, j'ai beau cherché je ne trouve pas comment avoir deux boutons, a chacune de mes tentatives le compilateur arduino me trouve une erreur ... pourquoi c'est jamais simple  =(
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chesnel on Jul 24, 2011, 04:27 am
As-tu pris le temps de regarder le post du club elec que j'ai posté? Le tuto permet de faire contrôler 7 Led différentes.
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 24, 2011, 12:21 pm
Cette exemple ne fonctionne pas avec mon shield made in china. J'ai donc récupérer juste le void loop/setup et cela ne fonctionne pas non plus lorsque je met des images pour avoir les états "ON" et "OFF" ...
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chabot380 on Jul 24, 2011, 05:49 pm
salut tout le monde.
Je peux dire ça maintenant que j'ai reçu mon module ethernet OFFICIEL moi !  ;)
Moi au j'ai essayé le programme de Chesnel ====> marche pas !  :(
Pourquoi dans le programme tu fais :
#include <Server.h> et #include <Client.h> ?
Normalement si tu fais #include <Ethernet.h> ça doit suffir non ?
dans librarie Ethernet il y a :
Quote
#ifndef ethernet_h
#define ethernet_h

#include <inttypes.h>
//#include "w5100.h"
#include "Client.h"
#include "Server.h"

je dis une con..rie ou pas ?

A+
chabot380
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: colassep on Jul 24, 2011, 11:14 pm
Salut !

Pour contourner ce genre de petits désagréments (gestion des images par le code arduino et autres), j'ai fait ce que je savais faire.

Un site web hébergé en ligne (on peut l'imaginer en local, mais dans ce cas un ordinateur doit rester allumé dans la maison).
Ce site est composé de plusieurs pages pour la gestion domotique.

On peut imaginer ce que l'on veut. Le but étant que la page web, via un bouton, un lien, une image, ou un formulaire envoie un paramètre (par exemple allume lampe) à l'arduino via l'ethernet shield. L'arduino exécute le code correspondant et en fin de traitement renvoie à la page web de départ avec un paramètre aussi (par exemple lampe allumée). Ainsi j'affiche ma page avec l'image "lampe allumée".
Je peux aussi stocker les infos transmises dans une base de données pour statistiques ou autres traitements.

Ainsi c'est le site qui gère les images et non le code arduino.

Courage
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 25, 2011, 06:10 pm
Ouai c'est ce que je pensait faire si je ne trouvais pas de solution mais c'est bizarre quand même car j'arrive a afficher la première image en début de page mais pas dans mes variables :/

EDIT: j'ai réussit  $) $)

En fait mon soucis venait de cette partie de mon code

Code: [Select]
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("Domo'duino, la domotique par Arduino"));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/domo10.png\"  > "));


La partie texte suivit de l'image foutais la merde, je sait pas pourquoi mais c'est comme ça ^^ du coup j'ai bidouiller en passant mon texte directement dans l'image et maintenant ça fonctionne

(http://i45.servimg.com/u/f45/11/05/63/75/tt10.png)


IL me reste maintenant a voir comment créer plusieurs bouton l'un en dessous de l'autres, j'essaye de broder dans le code mais a chaque fois ça ne fonctionne pas ! c'est pas facile car pour faire fonctionner les boutons il y a des morceaux de codes un peu partout  =(

Et j'aimerais aussi passer mes images "lampes allumés" et "lampes éteintes" directement en bouton pour retirer le bouton en dessous "switch on/switch off", il faut que je trouve un truc en HTML ^^


Si cela intéresse quelqu'un voila mon code pour l'interface "mono bouton" ^^

Code: [Select]
#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] = {xxx,xxx,x,xx};
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);
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


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;
  byte on_off = 1;

  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);
            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
        }
        plen=print_webpage(buf, on_off);
       
           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)
{

       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("<hr><br><form METHOD=get action=\""));
        plen=es.ES_fill_tcp_data(buf,plen,baseurl);
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\">"));
         
        if(on_off)
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"  > "));
        else
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"  > "));
       
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  </font></h1><br> ") );
       
        if(on_off){
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=3>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch on\"></form>"));
        }
        else {
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=hidden name=cmd value=2>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<input type=submit value=\"Switch off\"></form>"));

        }
       
       
 
        return(plen);
}
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: AlienArea51 on Jul 25, 2011, 06:40 pm
Salut Chico et tous le monde  :D
Je suis impressionné quand mème ,malgrès les apparences ,de l'avancement de ce projet .
Il est vrai ,que ça fait des mois et des mois ,mais ,"""" qui va piano va sano ,qui va sano va lontano """
J'avoue etre un peu perdu ,par tout ça ,(normale ,de ma part  :D) , mais je rejoint un peu OJAL :
Quote
Je me permets de revenir une fois de plus dans cette discussion...
Je ne comprends pas du tout comment ce projet avance... Vous en êtes à essayer un problème très ponctuel d'affichage d'une image alors qu'aucune base n'a été définie pour ce projet de domotique...
Une fois de plus, je préconise d'établir un cahier des charges, définir des orientations d'architecture etc etc...

Mais ce n'est pas une critique ,Chico  :smiley-red: (Respect).
Moi aussi ,j'ai plein de choses ,qui n'aboutissent pas (WIFLY-IMU etc...) et ça me tanne  :0,par contre j'ai repris un ancien projet ,sur la reconnaissance vocale avec la (ChipKit Max 32-VRBOT-XBEE-Processing)  ,donc si un jour tu te lance dessus  !!!!!.
@Chabot
Quote
UBUNTU 10.04 / ARDUINO UNO
Programmation Python et j'apprends le C
Technicien Télé Vidéo qui vient de prendre sa retraite. YES !!!!

Quelle chance ,la retraite  :D :D  , UBUNTU ,dont j'ai eu l'occasion de tester un peu (interface 3D ,Beryl ) ,et Python ,que je n'arrive pas à faire fonctionner sous Mac OS ,dommage que tu ne soit pas sous Mac OS X ,pour faire un petit TUTO !!!

Voilà ,MRS ,bonne chance et continuation ,pour la suite de ce Post .

Cordialement
William




Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 25, 2011, 07:42 pm
Quote
sur la reconnaissance vocale


Ca j'aime, c'est un peu l'option grand luxe d'une installation domotique  :D a voir pour la suite si c'est intégrable dans mon interface ( qui paye pas de mine ^^ ) domotique  ;)

Je sait bien que je n'est pas de cahier des charges ( et pourtant je bosse avec ce genre de trucs toute la journée ... ^^ ) bien définit mais on va dire que j'avance suivant ce que j'arrive a faire ! j'ai une idée, j'essaye de la mettre en place et si c'est pas le cas bah je contourne pour arriver a un truc faisable avec mes maigres connaissances ^^

Déjà si j'arrive a mettre plusieurs boutons sur mon interfaces actuels je serait assez satisfait de moi pour le moment ... c'est pas top mais ça fonctionne et c'est le principal ^^

J'ai une idée de cahier des charges pour le moment ^^

- mettre en place plusieurs boutons
- rendre les images comme boutons pour retirer le switch on/switch off
- intégrer le relever de ma sonde de température LM35

En gros ça représente a peut près 10 mois de travail pour moi :D
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: AlienArea51 on Jul 25, 2011, 08:41 pm
Salut Chico  ;)
J'espere que je ne t'ai pas offusqué  ;) , ce qui me gène , est que tu :
Quote
arriver a un truc faisable avec mes maigres connaissances ^^

te sous-estime ,ça me gène fortement !!
Sais-tu , qu'avec les deux TOPICs , le mien + le tient , nous sommes arrivés à avoir 304 replies et 3472 views ,je sais que ça ne te réconforte pas ,mais ça veut dire qu'il y a des personnes qui s'interessent à ce sujet .
C'est C.. mais c'est comme ça .
Un Pavé dans la marre  :D , et merci aux personnes qui ont participé à ce sujet ,(car je sais qu'il y a des gars qui ont réussi ,ou peut-etre ???? CAR PAS BEAUCOUP DE TRACES ) .
Je m'explique : Pas mal de sites(de certains)  avec beaucoup de projets ,mais pas beaucoup (de photos-vidéos d'explications ou prog ???) de leurs réalisations .
Donc merci tout d'abord à Jean-François qui a apporté une grande contribution sur ce projet  ;) ,d'une idée d'enclencher 4 relais avec une page Web + ton idée (programme Boutons sur le Net ) ,c'est géant (pour moi) .
Tu as réussi à faire fonctionner t'on Ethernet-shield (Made in China) moi pas encore  =( . encore moins ma Wifly .
Et comme dirai Chabot380 :" TOI ,petit Scarabé ,sait faire fonctionner produit Chinois  :D :D ".
Pareil:
Quote
a voir pour la suite si c'est intégrable dans mon interface ( qui paye pas de mine ^^ ) domotique 

ARRETE ,s'il te plait  ;)
Google est une source d'informations (pour certain) mais YOUTUBE aussi ,la plus part de mon moteur de motivation est sur ce site ,et pas plus tard que samedi .d'ou l'envie de me remettre sur la reconnaissance vocale .

UNE CHOSE A DIRE : KEEP THE PEACH  :D
Cordialement et Amicalement (à tous)
William

Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 25, 2011, 09:03 pm
Quote
J'espere que je ne t'ai pas offusqué 


Euh ... non du tout  XD

t'as raison, il faut keeper la peach ^^
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 26, 2011, 07:19 pm
Bonjour a tous,

J'ai donc réussit a récupérer sur la toile un code avec deux boutons que j'ai remis a ma sauce ! je me suis donc dit "aller on tente de faire 4 boutons", je compile nikel ça me détecte pas d'erreur mais biensur une fois que je veut accéder a la page ça ne fonctionne pas et pour moi impossible de voir l'erreur ! pour moi c'est cohérent ...

Code Arduino 2 boutons (fonctionnel ):



Code Arduino 4 boutons (non fonctionnel ):



PS: j'ai mis les codes sur megaupload car ils sont trop long pour être posté sur le forum dans les balises
Code: [Select]
^^
Title: Re: Domo'Duino, la domotique par Arduino ( mon Ethernet-shield est arrivé )
Post by: chicotore on Jul 27, 2011, 06:13 pm
Bon bah j'ai essayer de modifier 2 ou 3 trucs mais c'est pas ça, ça ne fonctionne toujours pas  :smiley-yell:
Title: Re: Domo'Duino, la domotique par Arduino ( NEW: sonde de température LM35 )
Post by: chicotore on Aug 06, 2011, 04:26 pm
Bonjour a tous,

Bon comme je n'arrive toujours pas a augmenter mon nombre de bouton et que personne ne veut m'aider  =(, j'essaye donc d'avancer et d'intégrer la sonde de température a ma page. Il s'agit d'une sonde type LM35.
J'ai donc intégrer mon code dans l'arduino, j'ai un bon retour d'information sur le serial monitor mais je coince c'est pour l'afficher sur ma page. En effet sur un LCD, il y a la fonction très intuitive qu'est "lcd.print(le nom de la variable);" mais avec l'ethernet-shield comment faire ?

j'ai regarder l'exemple avec une sonde DSxxxxx Onewire mais je pige pas trop comment faire afficher la température sur la page ... quelqu'un pourrais me donner un coup de pouce ? et je veut bien aussi de l'aide toujours a propos de mes boutons car je suit bloqué pour une connerie et pas loin de tous abandonner car ça commence a me souler de toujours me retrouver bloqué tous les 5 minutes  :smiley-yell:

merci
Title: Re: Domo'Duino, la domotique par Arduino ( NEW: sonde de température LM35 )
Post by: chabot380 on Aug 06, 2011, 05:24 pm
Salut chico !  ;)

dans ta page tu mets :
Quote

          client.print("Temperature: ");
          client.print(temperature);
          client.print(" degrees C");


ça doit marcher.

A+
Title: Re: Domo'Duino, la domotique par Arduino ( NEW: sonde de température LM35 )
Post by: al1fch on Aug 06, 2011, 06:34 pm
Chicotore tu n'est pas le seul à avoir des difficultés à exploiter le ENC28J60 avec la librairie que les vendeurs de shields indiquent !!! C'est une librairie qui a le mérite d'exister mais ne permet pas d'écrire du code très lisible. D'ou un besoin : une librairie plus accessible pour ce composant économique.

Je connais deux voies en chantier mais déjà fonctionnelles :
-celle de JeeLabs et de sa librairie Ethercard que j'ai un peu petit peu utilisé.
-celle plus ambitieuse de Turicas qui vise le fonctionnement sur ENC28J60 des sketches 'officiels' pour W5100.
Je n'ai pas encore testé cette dernière mais ça vaudrait peut être le coup de faire une pause et de travailler un peu à partir des petits exemples de serveurs inclus avec cette librairie. ça pourrait t'ouvrir la voie du client.print indiqué par Chabot380.....
https://github.com/turicas/Ethernet_ENC28J60 (https://github.com/turicas/Ethernet_ENC28J60)
Bon courage
Title: Re: Domo'Duino, la domotique par Arduino ( NEW: sonde de température LM35 )
Post by: chicotore on Aug 06, 2011, 07:38 pm
Ouais c'est une vrai galère cet ENC28J60 ....

Je pense mettre un terme a mon projet domotique, pour le moment je me vois mal finaliser quelque chose de cohérent ... je n'est pas, seul, les compétence nécessaire a un tel projet ! Je suit en pleine reflexion car ce projet me tenais a coeur mais je n'arrive même pas a passer de 2 à 4 boutons sur mon interface ... et je parle même pas du capteur de température  =(
Title: Re: Domo'Duino, la domotique par Arduino ( NEW: sonde de température LM35 )
Post by: ekaki on Aug 06, 2011, 11:23 pm

(...) j'ai un bon retour d'information sur le serial monitor mais je coince c'est pour l'afficher sur ma page. En effet sur un LCD, il y a la fonction très intuitive qu'est "lcd.print(le nom de la variable);" mais avec l'ethernet-shield comment faire ?
(...)

Je n'ai pas l'habitude des shields ETH mais cela me fait penser à un soucis similaire lors d'un affichage via interface RS232; la fonction ?.print(variable) ne fonctionne pas.
Il faut passer par une transformation de la variable en chaine afin de pouvoir l'envoyer par le print().
Un peu casse-bonbons et consomme de la ressource, mais à priori pas d'autres solutions...
Title: Re: Domo'Duino, la domotique par Arduino ( NEW: sonde de température LM35 )
Post by: osaka on Aug 07, 2011, 12:25 am
Bonjour, j'ai suivi un peux ce sujet parce qu'il m’intéresse et là j'ai l'impression que tu met la charrue avant les bœufs
A ta place j'aurais suivis les recommandations de ojal


Je me permets de revenir une fois de plus dans cette discussion...
Je ne comprends pas du tout comment ce projet avance... Vous en êtes à essayer un problème très ponctuel d'affichage d'une image alors qu'aucune base n'a été définie pour ce projet de domotique...
Une fois de plus, je préconise d'établir un cahier des charges, définir des orientations d'architecture etc etc...

Qu'en pensez-vous?






Mon cahier des charges se définie sur le tas suivant ce que j'arrive a mettre en place et ce que je n'arrive pas a faire !



Le plus gros du problème ce situe là et reprendre le code (de plus complexe et imbuvable) de quelqu'un d'autre est une mauvaise idée quand on ne maitrise pas un peux le sujet,limite ça peut juste servir d'exemple pour mieux comprendre.
Je sais que c'est pénible et qu'on a envie de tout avoir tout de suite avec un minimum d’investissement mais au final ça ne marchera pas, la preuve en est le résultat.

Prend ton temps, commence par maitriser un peux mieux le langage c (ou tout autre langage procédurale), les algorithmes de base et après tout te paraitra plus simple et clair, tu te demanderas même comment tu a pus faire certaine erreurs sur des chose pourtant très basiques et banales.

Je préféré être franc, pour l'instant tu perd ton temps  :~ .
Il est préférable de perdre 1 mois à ton aise (sur le site du zéro par ex) avec les bases plutôt que d'avancé et galérer 6 mois pour un résultat qui marchera peut être mais qui sera bancal, sans possibilité d'évolution (dépendances), bugger et non optimal.

Entre () j'ai aussi un projet domotique mais je pencherais plutôt sur une solution pages web hébergées délocalisée,ajax (XMLHttpRequest) ,serveur et contrôleur arduino + protocole maison genre x10 en hexa pour la communication et commandes entre le serveur arduino et le client (web).
Ajax sera remplacé à terme par les websocket (standardisé) histoire de pouvoir notifié au client (l'explorateur) d'un changement d'état d'un capteur ou autre (impossible sans rafraichissement de la page par ex pour ton problème avec le lm35).
J'ai déjà développé une application modulaire (plcbus, 1wire, ...) serveur (socket) de domotique en java donc ça ne devrait pas être trop compliqué d'appliqué les même principe à l'arduino.

Désolé si je t'ai découragé ou autre mais ce ne serait pas te rendre service que de t'aider à "débugger" ton code.


Je n'ai pas l'habitude des shields ETH mais cela me fait penser à un soucis similaire lors d'un affichage via interface RS232; la fonction ?.print(variable) ne fonctionne pas.
Il faut passer par une transformation de la variable en chaine afin de pouvoir l'envoyer par le print().
Un peu casse-bonbons et consomme de la ressource, mais à priori pas d'autres solutions...


normal non ?

http://arduino.cc/en/Serial/Print
Quote

print()
Description

Prints data to the serial port as human-readable ASCII text ...
Title: Re: Domo'Duino, la domotique par Arduino ( NEW: sonde de température LM35 )
Post by: chicotore on Aug 07, 2011, 11:47 am
Serial.print fonctionne mais pas client.print  ;)
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 07, 2011, 11:58 am
Fin du projet
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 07, 2011, 12:50 pm
Moi je dis repose toi  :smiley-sleep:, étudie un peut tout ça  ]:D et plus tard repart sur de bonne base  :%.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chabot380 on Aug 07, 2011, 04:04 pm
Quote
Sur ebay j'ai prit le moins chère, 10€ ethernet-shield chinois

Oui mais vrai casse tête chinois pour programmation petit scarabé !
(http://t0.gstatic.com/images?q=tbn:ANd9GcRrZCKcW3P-Bl9swFdw83znWWIOyfmphsyJdGSctfp-Gww8TNfG)

Regarder lien là : http://www.ordinoscope.net/index.php/Electronique/Hardware/Communication/ENC28J60

A+ petit scarabé
Maître chabot.

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: al1fch on Aug 07, 2011, 04:28 pm
Je me permet d'insister lourdement sur l'existence d'une nouvelle librairie pour Ethershield
développée par Turicas (https://github.com/turicas/Ethernet_ENC28J60 (https://github.com/turicas/Ethernet_ENC28J60)).
Elle n'est pas finalisée mais déjà opérationnelle.
C'est une Librairie Ethernet pour Ethershield !
On utilise une Ethershield comme si c'était un shield (officiel) à base de W5100... avec le confort de codage qui va avec.
Un coup d'oeil à l'exemple (un des 7 exemples fournis avec) ci dessous montre à mon avis que le résultat est déjà intéressant. On croirait voir un programme ecrit pour la carte 'officielle'.
Les 'client.print' n'y manquent pas... on y voit également l'affichage de valeurs prises sur des entrées analogiques (pourquoi pas un LM35 ?)

Avant de jeter éventuellement l'éponge ton projet mérite sans doute d'aller faire un tour de piste avec cette librairie. (Il peut etre nécessaire de modifier la ligne 39 du fichier "enc28j60.c" pour tenir compte du câblage de la broche CS sur la carte utilisée)

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: AlienArea51 on Aug 07, 2011, 04:37 pm
Salut CHICO
Fais pas ça !!
je rejoins Osaka:

Quote
Moi je dis repose toi  , étudie un peut tout ça   et plus tard repart sur de bonne base  .


@+
William
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 07, 2011, 05:07 pm
J'ai essayer la nouvelle librairie dès que tu l'as posté ici mais chez moi ça ne fonctionne pas.

Code: [Select]
#include <Ethernet.h>
#define LED 8

byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };
byte ip[] = {192,168,1,15};
char link[30], LEDStatus[4];

Server server(80);

void setup() {
  pinMode(LED, OUTPUT);
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop() {
  Client client = server.available();
  if (client) {
    char request[10];
    int i = 0;
    boolean current_line_is_blank = true;
    request[9] = '\0';
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (i < 9) {
          request[i] = c;
          i++;
        }
        if (c == '\n' && current_line_is_blank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
         
          client.println("<html><head><title>Arduino etherShield</title></head><body>");
          client.println("<h1>Arduino etherShield Example</h1>");
          client.println("<table>");
          client.print("<tr><td>Analog inputs:</td><td><b>");
          for (int x = 0; x < 6; x++) {
            client.print(x);
            client.print(" = ");
            client.print(5000 * (analogRead(x) / 1024.0));
            client.print(" mV<br>");
          }
          client.println("</b></td></tr><tr><td>uptime:</td> <td><b>");
          client.print(millis() / 1000.0);
          client.println(" seconds</b></td></tr>");
          if (strncmp("GET /off", request, 8) == 0) {
            digitalWrite(LED, LOW);
            sprintf(LEDStatus, "OFF");
            sprintf(link, "<a href=\"/on\">Turn on</a>");
          }
          else {
            sprintf(LEDStatus, "ON");
            digitalWrite(LED, HIGH);
            sprintf(link, "<a href=\"/off\">Turn off</a>");
          }
          client.print("<tr><td>LED status:</td> <td><b>");
          client.print(LEDStatus);
          client.println("</b></td></tr><tr><td colspan=\"2\" align=\"center\">");
          client.println(link);
          client.println("</td></tr></table></body></html>");
          break;
        }
        if (c == '\n') {
          current_line_is_blank = true;
        } else if (c != '\r') {
          current_line_is_blank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}


Impossible d'accéder au serveur ....

Quote
(Il peut etre nécessaire de modifier la ligne 39 du fichier "enc28j60.c" pour tenir compte du câblage de la broche CS sur la carte utilisée)


Comment connaitre cette broche ? si cette librairie est faite pour le shield en enc28j60 la broche devrais être la bonne non ?
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: al1fch on Aug 07, 2011, 05:25 pm
cette librairie reprend le câble normal d'une carte Ethershield non modifiée = CS en pin10 (pin 53 pour carte Mega).  Je n'avais pas eu de probleme avec un 28J60 monté sur plaque d'essai.
Dès que possible ( en soirée) je regarde à nouveau de près.
Le déplacement du CS commence à intervenir quand il y a conflit avec d'autres composants SPI (carte SD...)
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chesnel on Aug 07, 2011, 05:50 pm
Je suis vraiment désolé pour toi que tu bloques totalement... personnellement je suis aussi sur des petits projets similaire pour contrôler à distance mon arduino. mais en vus que tu utilises une version chinoise de l'ethernet shield il est difficile pour moi d'aider. Et si je peux me permettre, oui la version officiel coûte plus cher mais tu aurais certainement eu moins de trouble et peut-être plus de facilité à avoir de l'aide :/ Je reste aussi sur le faite que l'arduino n'est  vraiment pas adapter pour générer des pages html.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 07, 2011, 06:10 pm
Je comprend vraiment pas ta façon de fonctionné, tu marche en aveugle là et au risque de me répéter tu met la charrue avant le bœufs tu n'es même pas certain que ton serveur marche que tu y ajoute la gestion de tes leds  qui pourrait parasiter le code serveur ...
Commence par des chose simple

teste si une connexion est possible d'abord, tu pourras déjà savoir si c'est un problème niveau configuration, matériel ou autre ...

Code: [Select]

#include <Ethernet.h>

byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };
byte ip[] = {192,168,1,15};

Server server(80);

void setup()
{
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
Client client = server.available();
if (client)
{
Serial.print("client");
               
delay(1);
client.stop();
}
}


Si c'est ok teste l'envoi de donnée au client ...

Code: [Select]

#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };

Server server(80);

void setup()
{
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
Client client = server.available();
if (client)
{
boolean current_line_is_blank = true;
while (client.connected())
{
if (client.available())
{
char c = client.read();
if (c == '\n' && current_line_is_blank)
{
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();

client.print("hello world");
break;
}
if (c == '\n')
{
current_line_is_blank = true;
}
else if (c != '\r')
{
current_line_is_blank = false;
}
}
}
delay(1);
client.stop();
}
}


ensuite teste la réception de données ...

Code: [Select]

#include <Ethernet.h>

byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 };
byte ip[] = {192,168,1,15};

Server server(80);

void setup()
{
Ethernet.begin(mac, ip);
server.begin();
}

void loop()
{
Client client = server.available();
if (client)
{
while(client.connected())
{
if(client.available())
{
Serial.print(client.read());
}
}
delay(1);
client.stop();
}
}


etc, etc, tec, ...

Edit: je viens de voire qu'il y a un exemple en mode debug ... commence par là, tu pourras voire dans ta console ce qui marche ou pas ...

https://github.com/turicas/Ethernet_ENC28J60/blob/master/examples/WebServerDEBUG/WebServerDEBUG.pde
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 07, 2011, 07:02 pm
C'est vrai qu'il aurait peut-etre été mieux de réaliser un site complet sur un serveur en ligne comme les FTP free et d'envoyer des ordres a l'ethernet-shield comme je faisait au début par le biais de processing ...

Enfin bref j'abandonne  ;) bientôt mon matos sera en vente sur ebay ou ici ( duemilanove, ethernetshield, relais, lcd ... )
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chesnel on Aug 07, 2011, 07:55 pm
Si tu es un peu patient (une journée) j'ai fait un tutoriel, qui est correction orthographique :p qui explique comment communiquer arduino grâce à un site internet. je fournis les explications et les fichiers dans le tutoriel. C'est quand même dommage de stopper au points de revendre ton matériel :/
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: al1fch on Aug 07, 2011, 08:36 pm
@chicotore
Comme indiqué je viens de réinstaller la librairie de Turicas (qui je le rappelle est en chantier)
Les exemples WebServer et WebserverSimple sont OK du premier coup sans retouches  :).
L'exemple WebServerSimpleLED ne marche pas tel quel  :(
Pour le faire marcher (photo jointe) j'ai :
-augmenté un peu le buffer défini  dans  /utility/socket.
Code: [Select]
#define BUFFER_SIZE   650  
-raccourci un peu l'html envoyé en jouant soit sur le titre, sur le H1.....ou autre chose de non essentiel
(il n'est pas sûr osaka que le mode debug soit opérationnel)

hardware : mega328 et enc28j60 tous les deux en 3,3V (pas d'adaptation de tension, mais câblage identique à l'EtherShield)
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: 68tjs on Aug 07, 2011, 08:50 pm
Non tu n'arrètes pas!
Le développement c'est ça : toujours dans les emmerdes, mais quel plaisir et quelle satisfaction quand tu trouves la solution !

Comme beaucoup te l'ont dit reprends ton projet à zéro, mets tout sur la table et tries.  Choisis des objectifs simples et atteignables, il est plus facile de monter un escalier de 20 marches de 10 cm qu'un escalier de 5 marches de 40 cm ! Je sais ça parrait être du temps perdu que de se limiter à de tout petits tests alors qu'on pourrait tout faire en une seule fois sauf que la deuxièmme solution mêne souvant à l'échec.

Il faut aussi que tu détermines si des applications auront besoin  de matériels spécifiques (électronique  et/ou mécanique), cette détermination définira un budjet.

Ton projet est ambitieux, peut être faut-il le mener à plusieurs ? Mais si veut trouver des volontaires pour te suivre il faut avoir une feuille de route et non pas partir au grès du vent.



Bon courage
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 08, 2011, 07:27 pm
Par curiosité est ce que ça marche, en adaptant l'ip et la baseurl évidement ?

Code: [Select]

#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


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;
  byte on_off = 1;
  byte on_off2 = 1;

  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_off2=1;
        digitalWrite(LED_PIN2, LOW);  // switch on LED
        }
        else if (cmd==5){
                on_off2=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>"));
       
        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);
}
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 08, 2011, 07:57 pm
Avec ton code j'obtient donc 2 boutons cliquables mais en fait même en cliquant dessus ils restent toujours à la valeur (cmd=2 et cmd=4) donc toujours ON et l'image qui va avec  :smiley-roll:

merci a toi
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 08, 2011, 08:11 pm
Les variables on_off sont mal positionnée il me semble elle sont local à la fonction loop (j'avais repris ton dernier code fonctionnel) donc réinitialisé à chaque boucle à 1, faut les mettre en global en dehors de toute méthodes (avant setup).

Code: [Select]

byte on_off = 1;
byte on_off2 = 1;


version corrigé

Code: [Select]

#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] = {xxx,xxx,x,xx};
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);
            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);
       
//           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);
}



petite explication:

Il faut voire la fonction loop comme une boucle infinie

Code: [Select]

while(true) //la condition est toujours vraie donc pas de sortie de boucle.
{
}


ici ta variable initialisée à 1 le sera à chaque entrée de boucle.
Code: [Select]

while(true)
{
    byte on_off = 1;
    on_off+=1;
}
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 09, 2011, 06:47 pm
Bon alors avec ton code cela ne fonctionne pas, voila l'erreur ...

(http://i45.servimg.com/u/f45/11/05/63/75/arduin10.jpg)

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

Code: [Select]
// 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 ?  :smiley-eek: 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"
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 09, 2011, 06:57 pm
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
Code: [Select]

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

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 09, 2011, 07:08 pm
Encore a little problème ^^ j'essaye de regarder s'il n'y a pas une "(" manquante quelque part

(http://i45.servimg.com/u/f45/11/05/63/75/arduin11.jpg)
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 09, 2011, 07:12 pm
Oups , c'est le résultat de mon mauvais copier coller


Code: [Select]

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

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 09, 2011, 07:17 pm
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 ...  :smiley-roll:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 09, 2011, 07:33 pm
teste une fois ceci, j'y ai mis quelque sortie console pour voire ce qu'il ce passe.

Code: [Select]

#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.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 09, 2011, 08:07 pm
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 ....
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 09, 2011, 08:14 pm
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), ....

Code: [Select]

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

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 09, 2011, 08:33 pm
Ah voila ça fonctionne nikel, merci  :D

du coup j'essaye de rajouter un bouton et la forcement ça merdouille ... grrrr  :smiley-yell:

Code: [Select]
#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

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 09, 2011, 08:44 pm
Il se passe quoi ? buffer trop petit ?

#define LED_PIN2  5
#define LED_PIN3  5

Ca viendrait pas de là ?
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 09, 2011, 08:48 pm
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

Code: [Select]
#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
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 09, 2011, 09:11 pm
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.

Code: [Select]

#define BUFFER_SIZE 500
static uint8_t buf[BUFFER_SIZE+1];
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 09, 2011, 09:33 pm
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  :D

(http://i45.servimg.com/u/f45/11/05/63/75/arduin12.jpg)

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 ....


Code: [Select]
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("<br><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("<br>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
      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("<br>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
        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("<br>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
      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 !
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 09, 2011, 10:03 pm
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).
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: al1fch on Aug 09, 2011, 10:06 pm
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.
Code: [Select]
    plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</body><br>"));

     //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.



Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: al1fch on Aug 09, 2011, 10:22 pm
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.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 09, 2011, 10:44 pm
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
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: al1fch on Aug 09, 2011, 10:54 pm
avec
Code: [Select]
#define BUFFER_SIZE 1000 j'arrive à transférer une page de 903 octets...
Je vais chercher la limite.
avec
Code: [Select]
#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
Code: [Select]
// 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.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 10, 2011, 12:39 am
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: [Select]

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

...


Donc plus d'info possible par pièce et moins dans le buffer.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 10, 2011, 06:01 pm
Quote
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
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 10, 2011, 06:32 pm


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


non non ton idée première est tout a fais possible, il suffit d'une variable comme dans mon petit exemple "p" et le buffer ne se remplira que de la page requise contenue dans le if(p==1) le reste sera ignoré puisque dans un autre if pour "p==2" par ex .
Le tout c'est de savoir récupérer cette variable (via get) le lien serait par exemple "http ://chico.com/?page=1" .
Je pense qu'il faudrait adapter la méthode analyse_cmd() par exemple pour pouvoir récupérer autre chose que "cmd".
Je suis en train de regarder pour simplifier cette librairie (pas toute la librairie lol) genre un simple begin() pour tout ce qui est de l'init dans le setup ou les contrôles de donnée dans le loop, ça alourdira un peux la mémoire programme (flash) mais ça simplifiera les choses pour les adapter à notre façon.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: al1fch on Aug 10, 2011, 07:08 pm
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).
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 10, 2011, 07:48 pm
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:

(http://i45.servimg.com/u/f45/11/05/63/75/arduin13.jpg)

PAGE PAR PIÈCE:

(http://i45.servimg.com/u/f45/11/05/63/75/arduin14.jpg)
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 10, 2011, 10:07 pm
Code: [Select]
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.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 11, 2011, 08:58 pm
Ouch c'est complexe j'ai pas tout compris  :smiley-eek: 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
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 11, 2011, 09:30 pm
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.
Code: [Select]

#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  :smiley-sad-blue: depuis mes études ... donc résultat pas garanti, mais si ça marche ça pourra t'aider peut être.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 12, 2011, 06:52 pm
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
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 12, 2011, 09:13 pm
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 ?

Code: [Select]

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;
}
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 13, 2011, 03:33 pm
Voila ce que j'ai quand j'éteint puis allume ma lampe n°1

Code: [Select]
?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
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 02:47 pm
Tu peux tester ça  ? (fais un signe de croix avant de lancer  :smiley-mr-green:.)
normalement ça fonctionne, peut être changer certaine valeur des pin, ...

Code: [Select]

#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
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 02:48 pm
suite

Code: [Select]


//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><br>"));
           
           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><br>"));
           
           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><br>"));
           
           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><br>"));
         
       }
       
       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 .
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 14, 2011, 05:26 pm
Alors ça fonctionne a peut près, voila ce que j'obtient

(http://i45.servimg.com/u/f45/11/05/63/75/arduin15.jpg)

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
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 05:57 pm
v regarder également, ça doit être une bêtise au niveau de la variable global "page" ou du switch case.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 06:07 pm
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)"

Code: [Select]

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><br>"));
           
            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><br>"));
           
            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><br>"));
           
            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><br>"));
         
        }
       
        return(plen);
}
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 14, 2011, 06:23 pm
Non toujours pareil, bloqué sur "l'index". J'ai même changé tous les autres "page" en "pge" comme celui la

Code: [Select]
switch(page) en
Code: [Select]
switch(pge)

Mais toujours le même soucis
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 07:03 pm

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

Code: [Select]
switch(page) en
Code: [Select]
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   :smiley-mr-green: .

Code: [Select]
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?page=01\">chambre</a><br>"));

corrigé, remet bien les 'page' et 'pge' comme avant dans le reste du code.
Code: [Select]

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><br>"));
           
            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><br>"));
           
            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><br>"));
           
            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><br>"));
         
        }
       
        return(plen);
}
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 14, 2011, 07:28 pm
Non cela n'avait pas échoué lors de la compilation  ;)

J'avais également rajouté les "0" dans "pge=01 ..." mais toujours le même problème  ;)

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
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 08:44 pm

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.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 14, 2011, 08:57 pm
j'ai fait ça

Code: [Select]
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 ....
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 09:05 pm
Code: [Select]

        Serial.println(page);


Serait mieux  :smiley-mr-green:

On dois pas être loin de réussir, dommage que je n'ai pas le shield pour tester.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 09:17 pm
http://only.dommel.be/docs/chicotore.pde

le fichier pour être certain qu'on ai la même chose.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 14, 2011, 09:48 pm
Il ce passe un phénomène bizarre dans mon arduino  :smiley-eek:

J'ai réessayer ton dernier code, il resté bloqué sur la page index et après avoir cliqué frénétiquement sur un onglet d'un seul coup la page s'ouvre  :smiley-eek: et ensuite tous les onglets fonctionnent !

Par contre le logo de la lampe resté bloqué sur "OFF", alors dans le code j'inverse ON et OFF et la op ça fonctionne l'image change bien et passe en ON ou OFF quand je clique dessus. Je bidouille donc deux ou trois truc pour centrer l'index et les boutons je test ok ça fonctionne toujours.

Je tente donc de rajouter un bouton, le deuxième bouton apparais mais quand je clique dessus il ne change pas de status, pareil pour celui du dessus qui fonctionnais 3 secondes avant .... par chance je n'avais pas sauvegardé ! je réinjecte donc le code du tous début qui fonctionnais, celui avec un seul bouton et la plus rien ne fonctionne  :smiley-eek: cela reste bloqué sur l'index alors que ce même code fonctionnais 5 minutes avant  :smiley-eek:

Je copie donc ce code, je fait "new" dans le compilateur arduino, je recolle exactement le même code et la op ça refonctionne  :smiley-eek: la ou peut dire WTF ?????
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 10:04 pm
petit problème avec l'arduino ou le shield peut être ?
Sinon seulement une fois qu'on sera certain que le code est fonctionnel, on regardera pour faire l'interface et les boutons que tu souhaites.
J'essaierais de t'expliqué et commenté le code pour que tu puisse devenir autonome.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 14, 2011, 10:13 pm
En fait c'est au niveau des premières seconde d'accès qu'il y à une sorte de latence ce qui crée des phénomènes bizarre ! il faut uploader le code, actualiser l'explorateur et après c'est bon ^^

Par rapport a ton code, je commence a le regarder et pour le moment je comprend le cheminement ! je n'aurais jamais été capable de l'écrire tel quel tous seul mais j'arrive quand même a le comprendre à peut près. Je vais essayer de me dépatouiller tous seul pour commencer une interface potable et si j'ai un soucis je posterais ici au fur et a mesure de mon avancement ! mais déjà tu m'a été d'une aide infinie .... et je t'en remercie fortement !

Par contre j'ai remarqué un petit "bug" et cette fois cela vient du code je pense ! a partie des LEDPIN > 9 donc pour 10, 11, 12 .... et donc par exemple si je met cela

Code: [Select]
buf,plen,PSTR("?pin=012&val=00\"><img src

Les boutons ON et OFF se mettent a buguer royalement ! il faut cliquer plusieurs fois pour qu'ils change d'état et sur ma page ou j'ai réussit a mettre 2 boutons fonctionnels, quand je met un des deux boutons avec un ?pin>09 les 2 boutons bugs, quand je clique sur l'un, les deux réagissent ou alors aucun ne réagit .... Ce bug ne viendrais t-il pas de la conversion dec => hex ?

merci beaucoup
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 14, 2011, 10:39 pm
Code: [Select]

?pin=012


en fait c'est une commande hexa sur 1 octet qui est demandé donc ici (0x01 ou 0x12 mais pas 0x012).

Ne pas oublier que l'hexa c'est la base16 donc les seul nombre que tu peux trouver c'est 0 à 9 et lettres de A à F.

0x00 = 0
0x01 = 1
0x02 = 2
0x03 = 3
0x04 = 4
0x05 = 5
0x06 = 6
0x07 = 7
0x08 = 8
0x09 = 9
0x0a = 10
0x0b = 11
0x0c = 12
0x0d = 13
0x0e = 14
0x0f = 15
0x10 = 16
0x11 = 17
.
.
.
0x1f = 31
0x20 = 32
.
.
0xb5 = 181
.
.
0xf0 = 240
.
.
.
0xff = 255

chaque "caractère" (f de gauche et f de droite) représente 4 bit, par exemple 15 en décimal = 1111 en binaire = 0x0f en hexa , donc par exmple 0xff c'est 00001111 pour le f de droite et 11110000 pour celui de gauche, met les ensemble 1111 1111 en bin et ça te donne 255 en decimal ou 0xff en hexa;

http://fr.wikipedia.org/wiki/Syst%C3%A8me_hexad%C3%A9cimal
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 15, 2011, 07:56 pm
j'avais testé aussi comme ça

Code: [Select]
buf,plen,PSTR("?pin=12&val=00\"><img src

et ça bug toujours ! mais en fait si je comprend bien je ne peut utiliser que les chiffres de 1 à 9 et ensuite c'est des lettres c'est ça ? Mais avec la conversion intégré dans le code je devrais pouvoir utiliser tous les chiffres non ?

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 15, 2011, 09:43 pm
en fait comme dans notre système décimal celui que l'on utilise pour calculer couramment (base 10) on a des chiffres de 0 à 9 (chiffre "symbole" arabe),  he be pour l'hexa (base 16) il a fallut trouver des "symboles" pour aller au delà de 9 tout en restant compact (1 seul "symbole") donc on a utiliser les lettres pour pouvoir aller de 0 à 15 donc de 0 à f pour l'hexa.
Après vu que pour ce cas ci on a besoin de 1 byte (8bits) et que 1 "symbole" hexa correspond à 4 bit on le "double" F0 par exemple, 4bits à gauche (F) et 4 bits à droite(0), on otien nos 8 bits (1111 0000 = 240 décimal), le 0x que tu vois devant est juste là pour bien indiqué qu'il sagit d'une valeur hexadécimal.
Donc pour ta commande ?pin=12 (0x12) par exemple c'est comme si tu fesais ?pin=18 en décimal.

Utilise la calculatrice windows ou autre (site) capable de faire la conversion de hexa à décimal et inversement.
Pour le bug je comprend pas trop ou ça peux bugger pour la méthode de conversion,quand je teste les valeurs retournée sont bonne.
Et il ne se serait rien passé de toute façons avec de mauvaise valeur dans cmd_pin();

Peut être bien que ça vient d'ici je lis l'état d'une e/s numérique en mode "OUTPUT"  ?  :smiley-eek-blue: :smiley-mr-green:
Ca m'aurait évité de créé des variable d'états lol.
Je te proposerais un autre code demain pour voir.

Code: [Select]

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>"));
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 16, 2011, 02:32 pm
http://only.dommel.be/docs/chicotore.pde
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 17, 2011, 06:49 pm
Alors déjà un grand merci a Osaka, grâce a lui j'ai vraiment fait une avancée spectaculaire sur mon interface ! voila donc a quoi elle ressemble actuellement !

(http://i45.servimg.com/u/f45/11/05/63/75/arduin16.jpg)
(http://i45.servimg.com/u/f45/11/05/63/75/arduin17.jpg)

Je trouve ça plutôt sympas, enfin moi ça me plait ^^

Sinon tant que j'y suit, j'aimerais aligner sur la même ligne mes 2 boutons du haut et ceux du bas mais a chaque fois ils restent en dessous l'un de l'autres ! j'ai vérifié et je n'est pas de <br> qui traîne ... est-ce que c'est possible de les mettre sur la même ligne ?

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 18, 2011, 05:21 pm


Je trouve ça plutôt sympas, enfin moi ça me plait ^^


J'aime assez bien, simple mais très sympa je trouve  :) .


Sinon tant que j'y suit, j'aimerais aligner sur la même ligne mes 2 boutons du haut et ceux du bas mais a chaque fois ils restent en dessous l'un de l'autres ! j'ai vérifié et je n'est pas de <br> qui traîne ... est-ce que c'est possible de les mettre sur la même ligne ?


Pas bien compris lol sorry  ^_^ .
Tu pourrais remettre ton code actuel pour voir ?
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 18, 2011, 05:55 pm
Voila le code (seulement la partie des boutons )

Code: [Select]
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\"> "));
       plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br><center><table border=3 bgcolor=\"#f7f7f7\" width=\"1000\"><tr><td width=50% align=center></center>"));
       
       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\"><center><img src=\"http://home.iitk.ac.in/~mjakhtar/vlab/images/home.png\"  ></a></center>"));
           plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
           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=00\"><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=01\"><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);
           
           //suivant l'etat de la pin digitalRead()
           if(digitalRead(LED_PIN5))
                 plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=05&val=00\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></center></a>"));
           else
                 plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=05&val=01\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></center></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\"><img src=\"http://home.iitk.ac.in/~mjakhtar/vlab/images/home.png\"  ></a>"));
           plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
           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=00\"><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=01\"><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\"><img src=\"http://home.iitk.ac.in/~mjakhtar/vlab/images/home.png\"  ></a>"));
           plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
           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=00\"><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=01\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                 
         
          break;
         case 4:
           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\"><img src=\"http://home.iitk.ac.in/~mjakhtar/vlab/images/home.png\"  ></a>"));
           plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
           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=00\"><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=01\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></a>"));
                 
          break;
         case 5:
           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\"><img src=\"http://home.iitk.ac.in/~mjakhtar/vlab/images/home.png\"  ></a>"));
           plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
           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=00\"><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=01\"><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\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/bureau11.png\"></a><br>"));
           
           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\"><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/chambr11.png\"></c</a><br>"));
           plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
           
           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\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/cuisin10.png\"></center></a><br>"));
           plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
           
           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\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/salon10.png\"></center></a><br>"));
           
           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=05\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/sdb10.png\"></center></a><br>"));
         
       }
       
       return(plen);
}


En fait j'aimerais avoir une disposition comme cela:

(http://i45.servimg.com/u/f45/11/05/63/75/arduin13.jpg)

merci

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 18, 2011, 06:52 pm
faudrait mettre chaque image-lien dans des <div></div> et positionné comme tu le veux dans les propriétés css de chacun.
Faudrait que tu essaie d'avoir ce que tu désire à blanc dans une simple fichier .html et ensuite le transposé dans ton code arduino, plus simple a mon avis ?
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 21, 2011, 05:04 pm
Arff le CSS  :D bah je verrais ça plus tard alors, ce n'est qu'un détail !

Maintenant que cette interface fonctionne plutôt pas mal, je suit en train de voir pour mettre un place une fonction "ou" dans le code afin de pouvoir commander un éclairage par le biais de l'interface domotique mais aussi par le biais d'un simple interrupteur !

Il me faut donc intégrer dans mon code actuel => si cmd=x ou digitalread(pinX) alors pin13 ON

Et sinon pour le fun, voici en avant première la Domo'Duino Box V1.0 ^^

(http://i45.servimg.com/u/f45/11/05/63/75/dsc_0019.jpg)
(http://i45.servimg.com/u/f45/11/05/63/75/dsc_0020.jpg)

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 21, 2011, 06:07 pm


Maintenant que cette interface fonctionne plutôt pas mal, je suit en train de voir pour mettre un place une fonction "ou" dans le code afin de pouvoir commander un éclairage par le biais de l'interface domotique mais aussi par le biais d'un simple interrupteur !

Il me faut donc intégrer dans mon code actuel => si cmd=x ou digitalread(pinX) alors pin13 ON

Et sinon pour le fun, voici en avant première la Domo'Duino Box V1.0 ^^

merci


Pour un poussoir par exemple ?

Code: [Select]

.
.
.

void loop(){
 
 if(digitalRead(LED_PIN4))
 {
   if(pin4)
   {
     cmd_pin(LED_PIN4, LOW);
   }
   else
   {
     cmd_pin(LED_PIN4, HIGH);
   }
 }
 
 uint16_t plen, dat_p;

 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)
 {

.
.
.


Sympa la boiboite  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 21, 2011, 06:37 pm
Oui pour un interrupteur poussoir. Que je puisse commandant une action par un inter poussoir ou alors par mon interface web.

C'est quoi ce bout de code ?  :smiley-eek: XD

J'avais un peu commander a coder indépendamment juste le poussoir et j'étais parti sur ce code la

Code: [Select]
int relais1 = 12;
int bouton = 7;
int conter = 0;
void setup()
{
Serial.begin(9600);
pinMode(bouton, INPUT);
pinMode(relais1, OUTPUT);
}
void loop()
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}
if (conter == 1)
{
digitalWrite(relais1, HIGH);
}
if (conter ==2)
{
digitalWrite(relais1, LOW);
conter = 0;
}

}}


Ça fonctionne ( tous seul aussi, je ne l'est pas encore intégré dans le code de l'interface ) mais c'est peut-être un peu ce compliquer la tache que de passer par un conter non ?

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 21, 2011, 08:34 pm
Pas besoin de counter tu as déjà des variable d'état, sauf si tu l'as modifié dans le code ?

Code: [Select]

byte pin4 = 0;
byte pin5 = 0;
byte pin6 = 0;


Ceci tu peux le mettre directement au début de la fonction loop par exemple, elle appel la fonction void cmd_pin(byte pin, byte val) qui ce trouve déjà dans ton code.

Code: [Select]


  if(digitalRead(BOUTON_PIN7))
  {
    if(pin4)
    {
      cmd_pin(LED_PIN4, LOW);
    }
    else
    {
      cmd_pin(LED_PIN4, HIGH);
    }
  }


Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 21, 2011, 09:18 pm
Voila ce que j'ai fait (j'ai mis le code sur megaup car trop gros pour le forum )

code => http://www.megaupload.com/?d=V3XEZ5SV

j'ai donc inséré ton dernier code pour le poussoir mais cela ne fonctionne pas. Je vais mettre un serialprint demain pour voir dans la console si quelque chose apparaît a l'appuis du bouton ! en plus mon dyndns ne fonctionne plus je ne sait même pas pourquoi grrrr

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 21, 2011, 10:04 pm
Arf je pensais que tu avais repris mon dernier code ou alors me suis tromper de fichier la dernière fois.

http://only.dommel.be/docs/domo_pde_pouss.pde
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 22, 2011, 06:51 pm
Ah j'avais pas vu ce code  :smiley-zipper:

Donc je vient de tester et la fonction "poussoir" ne fonctionne pas ! quand j'upload ton code tel quel la LED reste constamment allumé même en agissant sur le poussoir ou sur l'interface web. J'ai donc inversés les HIGH et LOW dans le code du poussoir et cette fois la partie interface re-fonctionne mais le poussoir na aucun effet sur la LED ....

Le poussoir est bien a brancher sur une "analog in" ?

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 22, 2011, 08:47 pm
:~ Sur une broche numérique ... 0 ou 1

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoInitiationBPAppuiBpAllumeLed

J'avais pas tilter dans le code

Code: [Select]

#define LED_PIN5  5
#define BOUTON_PIN5  5


Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 22, 2011, 09:31 pm
Bon du coup comme je voudrais utiliser mon poussoir une un "analogpin", j'ai mis cela dans le code

Code: [Select]
void loop(){
 
 
  if(analogRead(BOUTON_PIN0) == LOW)

  {
    if(pin4)
    {
      cmd_pin(LED_PIN4, LOW);
    }
    else
    {
      cmd_pin(LED_PIN4, HIGH);
    }
  }


Mais en fait ça fonctionne bizarrement ^^ avec mon poussoir je peut allumer et éteindre ma LED mais mon interface web ne fonctionne plus ! et en plus je doit rester appuyer sur le poussoir pour que la LED reste éteinte ( a lire le code ça par contre ça me semble logique ). Il faut donc que je regarde comment faire en sorte de pouvoir avoir le poussoir et l'interface web fonctionnant indépendamment l'un de l'autre et surtout faire en sorte que ma LED reste allumé ou éteinte avec le poussoir !

merci a toi
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 23, 2011, 12:35 pm


Mais en fait ça fonctionne bizarrement ^^ avec mon poussoir je peut allumer et éteindre ma LED mais mon interface web ne fonctionne plus ! et en plus je doit rester appuyer sur le poussoir pour que la LED reste éteinte ( a lire le code ça par contre ça me semble logique ). Il faut donc que je regarde comment faire en sorte de pouvoir avoir le poussoir et l'interface web fonctionnant indépendamment l'un de l'autre et surtout faire en sorte que ma LED reste allumé ou éteinte avec le poussoir !

merci a toi


Essaie peut être d'ajouter un temporisation pour éviter la répétition de code lors d'appuis

en global
Code: [Select]
unsigned long delay1 = 0;

et le reste, lors d'un appuis on enregistre le "moment" (millis() ) de l'appui et ensuite temps que millis() sera inférieure au dernier appui millis()+300 l'action sur le bouton sera sans effets.
Code: [Select]
if(analogRead(BOUTON_PIN0) == LOW)
 {
   if(millis() > delay1)
   {
     delay1 = millis()+500;
     
     if(pin4)
     {
       cmd_pin(LED_PIN4, LOW);
     }
     else
     {
       cmd_pin(LED_PIN4, HIGH);
     }
   }
 }
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 23, 2011, 06:42 pm
En fait ça change rien, toujours pareil.

L'interface web ne fonctionne plus et la LED est constamment allumé et s'éteint quand je reste appuyé sur le bouton poussoir ... j'ai essayer de faire un code avec un "conter" mais j'ai l'impression que cette fontion n'est pas supporté par mon Ethernet made in china ^^

intégré ceci:

Code: [Select]
void loop()
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}
if (conter == 1)
{
digitalWrite(relais1, HIGH);
}
if (conter ==2)
{
digitalWrite(relais1, LOW);
conter = 0;
}

}}
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 23, 2011, 07:05 pm
Le shield n'aurait pas besoin de cette entrée analogique ?
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 23, 2011, 07:48 pm
j'ai testé les entrées 0,1 et 3 et toujours pareil.

En fait l'interface web fonctionne mais n'interagit pas sur la LED (pourtant la image ON et OFF changent bien ) et deuxième phénomène. Quand j'appuis sur le poussoir des fois la LED s'éteint mais dès fois elle s'intensifie en éclairage. bizarre  :smiley-eek:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 24, 2011, 01:04 pm
Essaie de mettre 0 au lieu de LOW et 1 au lieu de HIGH.

état bas
Code: [Select]
digitalWrite(LED_PIN4, 0);

état haut
Code: [Select]
digitalWrite(LED_PIN4, 1);

change la condition
Code: [Select]
if(analogRead(BOUTON_PIN0) > 0)

mais bon http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.AnalogRead

Note: Si la broche analogique est laissée non connectée, la valeur renvoyée par la fonction analogRead() va fluctuer en fonction de plusieurs facteurs (tels que la valeur des autres entrées analogiques, la proximité de votre main vis à vis de la carte Arduino, etc.).
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 24, 2011, 06:02 pm
bon bah ça fonctionne toujours pas j'y comprend rien ! ma broche analog in est toujours branché, je ne la laisse pas a l'air libre

C'est la fonction "OU" qui merdouille en fait, on diré que l'arduino ne sait pas faire:

Si click sur page web OU activation du poussoir => alors allumer LED

Mais de toute façons pour que ma led reste allumé lorsque j'appuis sur le poussoir il va bien falloir que j'intègre ou "conter" non ? Du coup il va falloir que j'intègre ce code

Code: [Select]
int relais1 = 12;
int bouton = 7;
int conter = 0;
void setup()
{
Serial.begin(9600);
pinMode(bouton, INPUT);
pinMode(relais1, OUTPUT);
}
void loop()
{
if ( digitalRead(bouton) == HIGH)
{ delay(100);
if (digitalRead(bouton) == LOW)
{
conter = conter++;
Serial.println (conter);
}
if (conter == 1)
{
digitalWrite(relais1, HIGH);
}
if (conter ==2)
{
digitalWrite(relais1, LOW);
conter = 0;
}

}}
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 24, 2011, 06:53 pm
Je sais pas si c'est celui là mais regarde les pin utilisés pour les numérique, risque de problème avec le spi ?

http://shieldlist.org/nuelectronics/ethernet

pour le "conter" c'est une façon de faire mais une simple variable d'état à inversé suffit.

Code: [Select]

int relais1 = 12; // sans doute utilisé par le chield;
int bouton = 7;
int etat = 0; //état initial à 0

void setup()
{
 Serial.begin(9600);
 pinMode(bouton, INPUT);
 pinMode(relais1, OUTPUT);
}
void loop()
{
 if ( digitalRead(bouton) == HIGH)
 {
   
   if (etat) // voir les booléen, 0 = faux tout autre valeur est vrai (1, 2, 3, ...),  pas besoin de préciser  " == 1" le if le comprendra bien
   {
     digitalWrite(relais1, LOW); // comme son état est 1 (vrai) on éteind
     etat = 0; //on met l'etat à 0
   }
   else //si c'est pas l'un c'est l'autre ...
   {
     digitalWrite(relais1, HIGH);
     etat = 1;
   }
   
   delay(100); // pas une bonne idée le delay bloque tout le code de l'arduino, valable pour des petit codes comme celui ci
 
 }
}




Attention dans le dernier code que je t'ai donner il y a des variable d'état déjà et elles sont modifiée à l'appel de cmd_pin(byte pin, byte val) donc ton "conter" ne serais valable que pour l'appuis du bouton.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 24, 2011, 07:44 pm
Quote
int relais1 = 12; // sans doute utilisé par le chield;


Mon code étais un exemple d'un test précédent sans l'ethernet-shield c'est pour ça que les PIN ne sont pas les bonnes ;)

Ca me fait comme avec la fonction "conter", il me détecte une erreur

(http://i45.servimg.com/u/f45/11/05/63/75/arduin18.jpg)

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 24, 2011, 08:25 pm


ici la variable etat était un exemple, tu ne l'as pas déclarée.
Dans le code en haut tu dois avoir ses variables global pour retenir l'état des "pin".

Code: [Select]

//variable d'etat 0=faux, 1=vrai
byte pin4 = 0;
byte pin5 = 0;
byte pin6 = 0;


Tu utilises une entrée digital ou analogique pour le bouton ?
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 24, 2011, 08:50 pm
j'avais déclaré

Code: [Select]
byte etat = 0;

J'utilise un "analog in" pour le bouton

EDIT: du coup c'est du analogread et pas du digitalread, quel boulet ce chico  :smiley-sweat:

EDIT2: bon toujours la même erreur lors de la compilation ....

Code: [Select]
// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN4  4
#define LED_PIN5  5
#define LED_PIN6  6
#define BOUTON_PIN0  0

byte page=0;

//variable d'etat 0=faux, 1=vrai
byte pin4 = 0;
byte pin5 = 0;
byte pin6 = 0;
byte etat = 0;


Code: [Select]
void loop(){
  if ( analogRead(BOUTON_PIN0) == HIGH)
  {
   
    if (etat) // voir les booléen, 0 = faux tout autre valeur est vrai (1, 2, 3, ...),  pas besoin de préciser  " == 1" le if le comprendra bien
    {
      digitalWrite(LED_PIN4, LOW); // comme son état est 1 (vrai) on éteind
      etat = 0; //on met l'etat à 0
    }
    else //si c'est pas l'un c'est l'autre ...
    {
      digitalWrite(LED_PIN4, HIGH);
      etat = 1;
    }
 
  }
}


merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 24, 2011, 09:10 pm
Tu saurais mettre la totalité de l'erreur donnée ou me remontrer un fois tous le code ?
plutôt utilisé pin4 à la place de "etat" vu que c'est suivant l'état de la pin (ici pin4) qu'on allume ou éteint la led.



Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 25, 2011, 06:10 pm
Voila le code actuel

http://www.megaupload.com/?d=Y04HNF6P

C'est celui avec la variables "etat"  ;)

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 25, 2011, 10:37 pm
il y avait une accolade de trop.

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

Sinon un truc à voir, peut être a tester ?

Code: [Select]

        //pinMode(BOUTON_PIN0, INPUT);
       //pas de mode pour une entrée analogique elle ne fonctionne qu'en entrée, ici tu mets la pin 0 numérique en entrée ...
       //mais: Les broches analogiques peuvent être utilisées en tant que broches numériques, représentées par les nombres 14 (entrée analogique 0) à 19 (entrée analogique 5).
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 26, 2011, 05:32 pm
Je vient de tester et ça ne fonctionne pas  =( la LED reste allumé constamment et c'est tout

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 27, 2011, 02:10 pm
Je testerais une fois sur le mien sans tout ce qui ce rapporte au shield, ça permettra déjà d'éliminer des pistes.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 28, 2011, 10:53 pm
okey, merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Aug 31, 2011, 06:21 pm
Alors OSAKA tu a fait le test ? car j'essaye de bidouiller de mon coté mais sans grand succès :/

thx
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Aug 31, 2011, 08:58 pm
Reteste avec ça http://only.dommel.be/docs/domo23.pde.
Je viens de tester juste la partie bouton et ça marche donc sans le shield.
J'ai passer l'entrée analogique en numérique (pin digit 14 = pin ana 0) donc pinMode(14, INPUT) , l'etat du bouton doit être LOW et pas HIGH + un delay maison (delay1) sinon trop d'apuis à chaque boucle de loop().

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 01, 2011, 06:18 pm
Bon alors voila le résultat.

La LED pin4 clignote, quand j'appuis sur le bouton au moment ou elle est éteinte elle reste éteinte et inversement si j'appuie sur le bouton au moment ou elle est allumée.

L'interface web n'agit plus sur la LED, elle clignote sans cesse ...

c'est quand même super galère pour faire un "OU" dans le code ! il n'y a pas moyen de mettre juste un "si interface OU bouton alors allumé/éteindre LED" ?

merci a toi

EDIT: j'ai tenté ça

Code: [Select]
void cmd_pin(byte pin, byte val)
{
    if ((pin==LED_PIN4) && digitalRead(BOUTON_PIN0) == LOW)
    {
    digitalWrite(LED_PIN4, val);
    }
    else if (pin==LED_PIN5){
    digitalWrite(LED_PIN5, val);
    }
    else if (pin==LED_PIN6){
    digitalWrite(LED_PIN6, val);
    }
}


mon interface fonctionne mais l'interrupteur n'agit pas :/
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 01, 2011, 07:12 pm


La LED pin4 clignote, quand j'appuis sur le bouton au moment ou elle est éteinte elle reste éteinte et inversement si j’appuie sur le bouton au moment ou elle est allumée.

L'interface web n'agit plus sur la LED, elle clignote sans cesse ...


Euh une bête question, c'est un bouton poussoir à impulsion (tu appuies le circuit est fermé tu relâches il est ouvert) ou un bête interrupteur classique qui garde sa position ouvert ou fermé ?
Ca ressemble fort un appuies constant ... d’où le clignotement de 300msec (delay1) et l'interface web inactive ...


c'est quand même super galère pour faire un "OU" dans le code ! il n'y a pas moyen de mettre juste un "si interface OU bouton alors allumé/éteindre LED" ?


l'interface et le bouton fonctionne en parallèle donc pas besoin de "ou" chacun appel la méthode cmd_pin quand une action est demandée.
D'ailleurs quand tu dis "si interface OU bouton alors allumé/éteindre LED" c'est exactement ce que mon code fait ... si bouton appuyer appelé la méthode cmd_pin() avec les paramètre qui lui faut "pin" la pin sur laque agir et val (0 pour l'éteindre, 1 pour allumer), idem pour l'interface.
Regarde bien où j'appel cette méthode ligne 87, 93 pour le bouton et 197 pour l'interface web.





EDIT: j'ai tenté ça

Code: [Select]
void cmd_pin(byte pin, byte val)
{
    if ((pin==LED_PIN4) && digitalRead(BOUTON_PIN0) == LOW)
    {
    digitalWrite(LED_PIN4, val);
    }
    else if (pin==LED_PIN5){
    digitalWrite(LED_PIN5, val);
    }
    else if (pin==LED_PIN6){
    digitalWrite(LED_PIN6, val);
    }
}


mon interface fonctionne mais l’interrupteur n'agit pas :/


Edit: la fonction ne risque pas de fonctionner , elle n'est jamais appelée ...

De toute façonl comme tu le fais là pour remplir la condition il faut que le bouton reste appuyer, donc l'interface web n'agit plus si tu n’appuies pas sur le bouton en même temps ce qui ferait planter de toute façons (effet clignotement l’interrupteur prend le dessus) ...
De plus il manque les variables d'état  "pin4^=1" (xor invertion de l'etat) que tu as supprimer ? pour savoir si l'action doit être on ou off pour le bouton et changer l'etat dans l'interface ...

Maintenant si tu as un interrupteur classique comme je pense faudra changer le code pour le "bouton".
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 01, 2011, 07:48 pm
J'utilise bien un interrupteur poussoir ! j'appuis le circuit est fermé, je relâche le circuit est ouvert  ;)

Je vient de tester au multimètre et je passe bien de 1 à 0 au ohmmètre en appuyant sur le bouton, donc mon poussoir est ok

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 01, 2011, 08:38 pm
Pourtant ça correspond tout à fais à un appuis constant donc peut être une erreur de montage ? Déjà vu chez moi l'hors d'une erreur de connexion
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoInitiationBPAppuiBpAllumeLed

Essaie un fois ceci, le code sans la partie shield qui fonctionne parfaitement chez moi.

Code: [Select]

#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
#define BOUTON_PIN0  14 // 14 num correspond à la pin ana 0

byte page=0;

byte pin4 = 0;
byte pin5 = 0;
byte pin6 = 0;
unsigned long delay1 = 0;


void setup()
{
   Serial.begin(9600);

  pinMode(LED_PIN4, OUTPUT);
  digitalWrite(LED_PIN4, LOW);
  pinMode(LED_PIN5, OUTPUT);
  digitalWrite(LED_PIN5, LOW);
  pinMode(LED_PIN6, OUTPUT);
  digitalWrite(LED_PIN6, LOW);
  pinMode(BOUTON_PIN0, INPUT);  
}

void loop(){
 
 if(digitalRead(BOUTON_PIN0) == LOW && millis() > delay1)
 {
   if (pin4) // voir les booléen, 0 = faux tout autre valeur est vrai (1, 2, 3, ...),  pas besoin de préciser  " == 1" le if le comprendra bien
   {
     cmd_pin(LED_PIN4, LOW); //appel de la m^me methode que par le shield, l'etat de pin4 est modifier dans cette fonction
   }
   else //si c'est pas l'un c'est l'autre ...
   {
     cmd_pin(LED_PIN4, HIGH);
   }
   
   delay1 = millis()+300;
 }      
}

void cmd_pin(byte pin, byte val)
{
   if (pin==LED_PIN4)
   {
    digitalWrite(LED_PIN4, val);
       // XOR inversion du bit de poid faible pour l'etat: 00000000 (0 dec) devient 00000001 (1 dec) et inversément
       pin4^=1;
   }
   else if (pin==LED_PIN5)
   {
    digitalWrite(LED_PIN5, val);
       pin5^=1;
   }
   else if (pin==LED_PIN6)
   {
    digitalWrite(LED_PIN6, val);
       pin6^=1;
   }
}



Le code sans le bouton.
http://only.dommel.be/docs/domo23.pde
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 01, 2011, 08:51 pm
Bon donc je vient de tester la partie bouton seul ! j'ai le même phénomène.

La led clignote, si j'appuie sur le bouton il ne se passe rien par contre si je reste appuyé sur le bouton au moment ou la led s'éteint elle reste éteinte et inversement si je reste appuyé sur le bouton au moment ou elle est allumée .

Au niveau du montage j'ai fait comme ça par contre:

+5V -> poussoir -> analogue pin0
                      -> résistance 1K -> GND

Mais bon même si le poussoir étais mal câblé, ça n'empêcherais pas la LED de clignoter ! chez toi la led clignote aussi ou pas ?

thx
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 01, 2011, 09:13 pm
ton montage à l'air bon , moi j'utilise une R 10k mais bon.
Chez moi la led ne clignote pas et tout réagis parfaitement.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 01, 2011, 09:15 pm
Alors cela viendrais du shield ! je test demain sans le shield pour voir  :~

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 01, 2011, 09:26 pm
test un fois ça

Code: [Select]

// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN4  4
#define LED_PIN5  5
#define LED_PIN6  6
#define BOUTON_PIN0  14 // 14 num correspond à la pin ana 0

byte pin4 = 0;
byte pin5 = 0;
byte pin6 = 0;
unsigned long delay1 = 0;


void setup()
{
   Serial.begin(9600);

  pinMode(LED_PIN4, OUTPUT);
  digitalWrite(LED_PIN4, LOW);
  pinMode(LED_PIN5, OUTPUT);
  digitalWrite(LED_PIN5, LOW);
  pinMode(LED_PIN6, OUTPUT);
  digitalWrite(LED_PIN6, LOW);
  pinMode(BOUTON_PIN0, INPUT);  
}

void loop(){
 
 if(!digitalRead(BOUTON_PIN0) && millis() > delay1)
 {
   if (pin4) // voir les booléen, 0 = faux tout autre valeur est vrai (1, 2, 3, ...),  pas besoin de préciser  " == 1" le if le comprendra bien
   {
     cmd_pin(LED_PIN4, LOW); //appel de la m^me methode que par le shield, l'etat de pin4 est modifier dans cette fonction
   }
   else //si c'est pas l'un c'est l'autre ...
   {
     cmd_pin(LED_PIN4, HIGH);
   }
   
   delay1 = millis()+300;
 }      
}

void cmd_pin(byte pin, byte val)
{
   if (pin==LED_PIN4)
   {
    digitalWrite(LED_PIN4, val);
       // XOR inversion du bit de poid faible pour l'etat: 00000000 (0 dec) devient 00000001 (1 dec) et inversément
       pin4^=1;
   }
   else if (pin==LED_PIN5)
   {
    digitalWrite(LED_PIN5, val);
       pin5^=1;
   }
   else if (pin==LED_PIN6)
   {
    digitalWrite(LED_PIN6, val);
       pin6^=1;
   }
}

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 01, 2011, 09:58 pm
Je vient de tester avec les branchements en direct sur l'arduino ( j'ai démonter mon shield ethernet ) et toujours pareil, la led clignote ...
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 02, 2011, 12:33 am
Code: [Select]


#define BOUTON_PIN0  14

void setup()
{
  Serial.begin(9600);
  pinMode(BOUTON_PIN0, INPUT); 
}

void loop()
{
  Serial.print("bouton: ");
  Serial.println(digitalRead(BOUTON_PIN0));
  Serial.print("   LOW: ");
  Serial.println(LOW);
  Serial.print("  HIGH: ");
  Serial.println(HIGH);
  Serial.println();
  delay(3000);
}



essaie une fois ça, teste une fois relâché et une fois appuyé et dit moi les valeur de la sortie serial.
Ça te permettra de comprendre ce qui ce passe.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 02, 2011, 05:03 pm
Donc mon bouton fonctionne. j'ai bien "0" quand il est relâché et "1" quand j'appuis dessus ;)

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 02, 2011, 09:43 pm
essaie ça

http://only.dommel.be/docs/domo26.pde
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 02, 2011, 09:55 pm
OSAKA ......


Tu est un dieu  :smiley-eek: :D :smiley-mr-green: XD $)

Ca fonctionne au poil, c'est génial .... THX A LOT !!!!

Il va falloir que je regarde ce qui merdais entre le code précédent et celui ci :)

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 02, 2011, 10:08 pm


Il va falloir que je regarde ce qui merdais entre le code précédent et celui ci :)



Ce qui merdais c'était moi, je me trompais de code que je mettais.  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 02, 2011, 10:13 pm
ah ok  :D

Bon bah maintenant que ça fonctionne au poil, je m'attaque a la lecture de "sondes" et plus particulièrement une LM35 pour avoir la température de quelques pièces. Comme sur mon shield ethernet made in china la fonction "print" ne fonctionne pas, il va falloir trouver une bidouille ...

Je vais éplucher l'exemple de la sonde "one wire" pour mon shield pour essayer de faire la même chose avec un LM35 !

Une fois cela fait, je bosse un peut l'interface et après je refait un sujet propre avec le bon code, le bon câblage et les bonnes explications ^^

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 03, 2011, 01:22 pm
Teste la récupération dans un code séparer et une fois que ça fonctionne il suffit de l'intégré dans la page, par contre faudra rafraichir la page à chaque fois parce que les valeurs seront statique.
Sinon moi j'ai bien avancé sur mon projet avec les websocket pour la communication full duplex,  deux petite vidéo pour voir l'avancement de mes testes je suis assez satisfais du résultat jusqu'à présent.

Relevé d'une photo résistance, un bouton et un gradateur sous chrome à gauche et safari à droite en parallèle.
On peut voire un interrupteur poussoir sur la première vidéo le statut est directement retourné au client.

http://www.youtube.com/watch?v=PtKMZ_99Zdk
http://www.youtube.com/watch?v=mdKH80OYUtg
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 03, 2011, 01:30 pm
Oui je vais bosser a part le code LM35 et une fois que ça marche (ce qui n'est vraiment pas gagné ^^ ) je l'incorporerais dans le code de l'interface web !

Sympas ton projet mais par contre tu aurait pu faire la même chose avec processing ou python non ?

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 03, 2011, 01:47 pm

Sympas ton projet mais par contre tu aurait pu faire la même chose avec processing ou python non ?


Pas vraiment non déjà avoir un pc allumé rien que pour processing et python non merci ça ferait perdre tout l’intérêt de l'arduino, ici mon serveur de websocket est un serveur php donc hébergement sur le même serveur que la page web donc un petit nas (qui me servirait à d'autre chose) suffit.
Avec processing+python (moi je n'utilise qu'une seule technologie portable) donc pc allumé 24/24 il faudrait en plus héberger le site, c'est lourd et ça commence à faire beaucoup pour une solution domotique et si en plus on parle de la solution de scruter un fichier je trouve ça complétement ...... et sans intérêt, ici la communication est directe, full duplex (pas besoin de rafraichir la page pour être averti d'un changement) et simple à intégrer un peux comme un automate programmable (une solution professionnel quoi) .

Edit: ma solution avec mon protocole est valable pour d'autre technologie que web (port serie, i2c, ...), je sépare bien la partie transmission de la partie protocole action (pas de dépendance et plus d'évolution possible).
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 03, 2011, 02:40 pm
Ah oui ok  ;)

Quote
ça commence à faire beaucoup pour une solution domotique


Donc bientôt mon interface domotique sera obsolète alors, car je pense que tu va nous sortir un truc au petits oignons non ? ^^

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 03, 2011, 03:33 pm
Disons que là je développe cette solution d'abord pour moi, si c'est concluant je partagerai mes sources si ça intéresse.  :smiley-surprise:
Je ferais un post dédier lorsque je serais un peux plus avancé, là c'est beaucoup de testes et essais.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 07, 2011, 06:24 pm
Un peu de news !

Et bah comment c'est Hard de mettre en place un LM35 sur une ethernet-shield made in china  :smiley-surprise: Vu que la fonction "serial-print" ne fonctionne pas c'est vraiment super chaud pour afficher les valeurs du LM35 sur une page web  :smiley-zipper:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 07, 2011, 10:37 pm
tu récupère la valeur dans une variable et tu l'intercale dans le code de la page non ? pourquoi un serial.print ?
Genre:

Code: [Select]

float maTemperature = blabla je récupère ma valeur du LM35;

plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<p>temperature chambre = "));
plen=es.ES_fill_tcp_data(buf,plen,maTemperature);
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("</p><br>"));


Edit: Arf va falloir modifier le float en string si ce n'est pas déjà fais ...  sinon faudra jouer à signe, exposant et mantisse  :smiley-sad-blue:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: olivbout on Sep 08, 2011, 09:26 am
Salut,
la fonction ES_fill_tcp_data_p n'eccepte que du texte et encore ecrit directement comme:
Code: [Select]

         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<p>temperature chambre = "));


L'idée c'est de convertir ta valeur en texte et utiliser la boucle suivante:

Code: [Select]

         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<p>temperature chambre = "));
         i=0;
        while (i<=a) {  // a est le nombre de caracteres
                buf[TCP_CHECKSUM_L_P+3+plen]=chaine[i]; 
                plen++;
                i++;
        }
       


A++
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 08, 2011, 02:07 pm

Salut,
la fonction ES_fill_tcp_data_p n'eccepte que du texte et encore ecrit directement comme:
Code: [Select]

         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<p>temperature chambre = "));




c'est PSTR() (PROGMEM) qui n'accepter que du contant char[] il me semble, quand tu fais ceci par exemple PSTR("blablabla") c'est comme si tu y mettais un const char[] ta chaine est non modifiable (const).
Donc sans celle ci tu peux parfaitement y intégrer une chaine de caractère comme chico le fait avec la chaine baseurl qui est une simple chaine;

Code: [Select]

static char baseurl[]="http://blabla.dyndns-home.com/";
plen=es.ES_fill_tcp_data(buf,plen,baseurl);



L'idée c'est de convertir ta valeur en texte et utiliser la boucle suivante:


Code: [Select]

         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<p>temperature chambre = "));
         i=0;
        while (i<=a) {  // a est le nombre de caracteres
                buf[TCP_CHECKSUM_L_P+3+plen]=chaine[i]; 
                plen++;
                i++;
        }
       


A++


On ne fais que rajouter des caractères au buffer, c'est ce que fait déjà ES_fill_tcp_data il me semble et ça ne résous pas le problème de flotant -> chaine.
Ceci devrait marché.
Code: [Select]


char[5] bufFloat;
float temp = tu récupères la température de la chambre;

//converti une flottante en chaine dtostrf(flottante, taille_min . compris , précision = nombre derrière la virgule, la chaine);
dtostrf(temp,5,2,bufFloat)

plen=es.ES_fill_tcp_data(buf,plen, bufFloat);

Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: olivbout on Sep 08, 2011, 04:02 pm
Exact, pour la température cela semble bon sauf qu'il faut déclarer la variable comme ca:

Code: [Select]

char bufFloat[5];


a++
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 08, 2011, 05:19 pm
Vi c'est l'habitude de java j'ai fais un mélange.  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 08, 2011, 05:57 pm
ouahhh  :smiley-eek: calmez-vous j'ai pas tous suivi la  :smiley-mr-green:

Non je rigole, merci a vous je vais essayer de voir avec ça, j'avais déjà commencé un truc du genre

Je ne pige pas cela

Code: [Select]
float temp = tu récupères la température de la chambre;

Je met quoi du coup après le "=" ? je met "float temp = bufFloat" ?

thx a lot
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 08, 2011, 06:06 pm
Je me répond tous seul ^^

Code: [Select]
char bufFloat[5];
float temp;
int tempPin = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  temp = analogRead(tempPin)*0.48828125;
  delay(1000);
 

}

dtostrf(temp,5,2,bufFloat)

plen=es.ES_fill_tcp_data(buf,plen, bufFloat);


J'ai fait ça mais erreur au niveau de ça

Code: [Select]
dtostrf(temp,5,2,bufFloat)
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: olivbout on Sep 08, 2011, 06:09 pm
a par le ";" je ne vois pas car chez moi ca  a marché...
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 08, 2011, 06:13 pm
A part la déclaration de variable ne rien mette en dehors des fonctions setup, loop ou autre fonction.

Si c'est un exemple que tu veux tester.

Code: [Select]
char bufFloat[5];
float temp;
int tempPin = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  temp = analogRead(tempPin)*0.48828125;
  dtostrf(temp,5,2,bufFloat);
  Serial.print("temp:");
  Serial.println(bufFloat);

  delay(1000);
}



le plen=es.ES_fill_tcp_data(buf,plen, bufFloat); n'est valable que pour ton shield, lorsque tu le mettras dans ta page.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 08, 2011, 07:21 pm
J'ai réussit  :D mais par contre j'ai un MEGA bug  :smiley-eek:

Ce code ci => http://only.dommel.be/docs/domo26.pde

Qui fonctionnais au poil ne fonctionne plus  :smiley-eek: j'ai de nouveau le syndrome de la LED clignotante et l'interface et le bouton ne fonctionnent plus  :smiley-eek: WTF !!!!
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 08, 2011, 07:29 pm
Un exorciste ?  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 08, 2011, 07:36 pm
Non je vais tous balancer a la poubelle  ]:D au moment ou l'interface est OK, l'interrupteur fonctionne ainsi que la sonde de température j'ai un bug inconnu qui survient  :smiley-eek: je la laisse refroidir je vais voir ça un peu plus tard !
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 08, 2011, 08:08 pm
Ouah le bug de la mort  :smiley-eek:

Quand j'appuie sur l'interrupteur ça clignote, par contre mon poussoir est devenu sensitif Oo j'approche juste ma main a 2cm et op la led s'allume ... je remet ma main a 2cm et op ça s'éteint  :smiley-eek: suis-je possédé par le démons  :smiley-eek-blue:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 08, 2011, 08:27 pm
J'étais pas loin, il te faut un exorcisme  :smiley-yell:
Enlève le fil de la broche analogique sur lequel ton interrupteur est pour voir.
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 08, 2011, 09:08 pm
Je peut débrancher l'entrée analog du LM35, de l'inter et le 5V et ça clignote toujours  :smiley-eek:

Il n'y a que en enlevant le GND que ça stop de clignoter ( un peut normal quand même ^^ )

Enfin bon hormis ce bug du jours, tout fonctionne

[img]http://i45.servimg.com/u/f45/11/05/63/75/arduin19.jpg[//img]

merci
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 09, 2011, 06:14 pm
Qu'est-ce que je suit bête  :smiley-mr-green:

J'avais un défaut de "terre" en faite et donc mes entrée analogique devenais hyper sensible ! du coup j'ai inventer les boutons poussoir tactiles avec mes conneries ^^

Voila comment j'avais câblé mon poussoir

+ 5Volt -> poussoir     -> GND
          -> Résistance -> GND

au lieu de

+ 5Volt -> poussoir -> GND
                         -> Résistance -> GND


-> Résistance -> GND

(http://i45.servimg.com/u/f45/11/05/63/75/arduin19.jpg)
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: osaka on Sep 09, 2011, 09:40 pm
Le problème était donc chicodiene et non arduiniene  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: AlienArea51 on Sep 10, 2011, 10:14 am
Salut CHICO et Osaka
Félicitation ,car je vois que le projet prend tournure ( tu as bien fais de ne pas arreter Chico).

encore Bravo .
J'espère que tu va faire un super TUTO sur ton site  :D

@+
William
Title: Re: Domo'Duino, la domotique par Arduino ( Finit, j'en est marre ! )
Post by: chicotore on Sep 10, 2011, 12:26 pm
Oui la partie software commence a être pas mal, encore deux ou trois détails au niveau du désign et je vais pouvoir attaquer la partie hardware ! d'ailleurs ma duemilanove commence a être juste en "analog-in" .... je vais donc voir s'il existe des composants pour augmenter ça ou alors il va falloir passer a la MEGA  :smiley-sweat:

Il me reste aussi a tester une solution sans-fil pour envoyer les commandes. Donc soit un module RF(tx) + arduino en émetteur et un module RF(rx)+standalone en réception ou alors l'utilisation de TX2B et RX2B et donc plus besoins d'arduino sur la partie réception !

thx
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 11, 2011, 08:02 pm
On my bog => http://chicowebsite.free.fr/
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: arduimat on Sep 11, 2011, 08:21 pm

On my bog => http://chicowebsite.free.fr/


Super, du bon boulot encore, ça fait plaisir à lire et à voir ! :)

PS : La première image ne s'affiche pas chez moi... Par contre je peux l'ouvrir avec le lien direct :smiley-roll:
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 12, 2011, 05:30 pm
P**** j'ai encore un nouveau bug et cet fois c'est pas une erreur de montage j'ai rien touché  :smiley-eek-blue:

(http://i45.servimg.com/u/f45/11/05/63/75/arduio10.jpg)

Au même moment j'ai 0.27V au multimètre donc 27°C, ce qui correspond a la bonne température ambiante !!

Voila ce que j'ai dans le serial moniteur:

Analogread(pin15) =>229
Temp= pin15*0.4882 => 112.30

J'ai cassé mon Arduino ?  =(
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 12, 2011, 06:02 pm
Ça remarche, une petit soudure a refaire ... vive les arduino made in china  :D

Bon sinon je suit en train d'essayer de me passer du +5V de la carte afin de ne pas faire surchauffer le régulateur intégré et surtout avoir une meilleur précision de mes LM35 ( car a chaque allumage d'un relais la tension chute et donc les LM35 affiches des valeurs farfelus ... ).

J'ai donc récupéré un L7805CV branché a un transfo 18V, ce qui me donne un +5.01V constant ....  :)
Mais j'ai un soucis pour le faire fonctionner en // avec la carte arduino !

En effet l'arduino a besoins d'avoir son GND et son +5V de branché pour "comparer" avec ses analogin enfin c'est ce que j'ai compris en bidouillant avec mon +5V externe ...
j'ai donc essayer de branché les analogin sur l'arduino et ensuite branché les +5V et GND au L7805CV mais ça fonctionne pas .... Ensuite j'ai essayer de laisser branché le GND de l'arduino et le +5V au L7805CV mais ça marche pas non plus ...

Je continue un peu a chercher sur google mais il n'y a pas grand résultat :/

thx

EDIT: c'est bon j'ai trouvé !

Tous les +5V branché au +5V du L7805CV, tous les GND branché au GND du L7805CV et enfin le GND de l'arduino branché aussi au GND du L7805CV !
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 12, 2011, 06:40 pm
Bonjour,
Je n'ai pas bien compris tous tes essais mais branche tes alimentations +5 là où il faut (l'alim externe sert au LM35 c'est ça ?) donc l'alim externe sur le +5V des LM35, et tous les GND ensembles
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 12, 2011, 07:22 pm
Merci mais c'est bon j'ai trouvé ^^ ( voir le "EDIT" )

Par contre j'ai un nouveau "problème" ! la température affiché sur mon interface est cohérente ( 27.2°C ) par contre lorsque j'active mon poussoir et allume la LED, la température s'enflamme (  82.2°C Oo ) ! j'ai vérifier au multimètre, les tension aux bornes du LM35 reste a 5.01V, et la tension entre le GND et l'analogIn reste constante aussi ...

Quand la LED est allumé, même en actualisant, la température reste haute, ce n'est donc pas un "bug" qui ne dure qu'un court instant lors de l'appuis sur le bouton ...

Quelqu'un à une idée ?

Sinon voila le premier module "température +relay" en test pour voir si le régulateur 5V ne chauffe pas trop

(http://i45.servimg.com/u/f45/11/05/63/75/img_0710.jpg)

Résultat ... avec 1 seul relais ça chauffe fort .... Il me faut donc trouver une autre bidouille pour générer du 5V ! j'ai bien une alim de PC qui traîne mais je trouve ça trop gros et surtout trop bruyant avec le ventilo ...
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 12, 2011, 09:24 pm
Ton relais est-il bistable ou monostable ?
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 12, 2011, 09:45 pm
monostable ! je doit alimenter constamment le relais pour que le circuit reste fermé ( ou ouvert suivant le branchement ^^ )
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 12, 2011, 10:07 pm
Passe en bistable, ça chauffera moins  ;) Mais surtout ça consommera moins, essaie de faire le calcul de ta conso sur 1 an

Sinon as-tu mis les condensateurs nécessaires à ton régulateur ?
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 12, 2011, 10:15 pm
Pour passer en bistable il faut changer de relais ou c'est un montage a faire ?

Pour les condenso, c'est ça qu'il faut mettre ?

(http://circuits.datasheetdir.com/39/L7805-circuits.jpg)

Si c'est le cas non je n'est aucun condenso sur mon régulateur  :smiley-red: c'est grave ?

merci
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 12, 2011, 10:50 pm
Ce n'est pas forcément grave, mais ça permet d'aider le régulateur lorsque tu tires brusquement du courant.
Le relais il faut en changer pour passer en bistable, il faut en racheter un mais ça permets d'économiser par la suite.

As-tu résolu ton problème de led/température ?  Si tu affiches la valeur lue sur la liaison série reste-t-elle constante ?
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: 68tjs on Sep 13, 2011, 10:14 am
Quote
Si c'est le cas non je n'est aucun condenso sur mon régulateur  smiley-red c'est grave ?


Moi je dirais que si, c'est grave.

Que se passe-t-il probablement quand tu fais commuter ton relais, qu'il soit bistable(le conseil est bon) ou non : tu fait un appel de courant, bref mais important.
Le régulateur possède un temps de réponse non négligeable et ta tension de 5volts peut s'écrouler quelques fractions de secondes pire tu peux avoir des oscillations et dépasser le 5 volts. Ces phénomènes ne sont pas visualisables avec un voltmètre il faut un oscilloscope.

Les condensateurs ont deux rôles :
1) ils filtrent les composantes alternatives pour ne laisser passer que le continu.
2) ils servent de réservoir à électrons pour les appels de courant : ce que le régulateur ne peut pas fournir est puisé dans le condensateur.

Quelle politique pour placer et choisir les condensateurs :
1) autour du régulateur, les valeurs de ton schéma sont un strict nécessaire.
2) au plus près des éléments perturbateurs, cela t'évitera de faire circuler des parasites dans tout ton montage.
3) En cas de forte consommation faire attention au paramètre "ESR" du condensateur qui correspond à une résistance : comme tout composant un condensateur est un objet imparfait. Un condensateur a malheureusement une inductance et une résistance parasite. L'inductance est surtout pénalisante dans les filtrages en hautes fréquences (> 100Mhz) par contre la résistance se manifeste à toutes les fréquences, une valeur élevée limite la capacité du condensateur à servir de réservoir.
Dans ton cas je te conseille de choisir un condensateur faible ESR comme par exemple ( je n'ai pas d'action chez Gotronic mais je trouve leur site clair) : http://www.gotronic.fr/catalog/passif/condos7.htm . (Les modèles faibles ESR sont au milieu de la page).

Quand au LM35 je ne connais pas cette bête mais si vraiment il est sensible à la stabilité de la tension pourquoi ne pas l'alimenter directement à partir de l'alim principale en faisant une petite régulation autonome résistance/zéner 5.1V/condensateur

Conseil pour tes cablages : on vient de voir que divers signaux passent par les alim en fonction des commutations diverses, torsades entre eux les fils d'alim (alim et gnd) ce sont les boucles qui rayonnent et plus la surface des boucles sera faible moins tu aura de rayonnement. Les perchoirs à mouches ne font généralement pas bon ménage avec l'électronique.
Répartis tes masses en étoile, le centre de l'étoile étant la masse de l'arduino. Et ne lésine pas sur le diamètre des fils de masse, plus le schéma s'étoffe plus il faut soigner les masses.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 13, 2011, 11:54 am
Ok merci a vous, je vais donc regarder ce que j'ai en stock comme condensateur pour essayer de mettre ça dessus  ;)

Sinon pour mon soucis de température j'ai toujours le même problème mais j'ai un doute que cela vienne d'une brusque chute de tension car:

Ma température est bonne, j'allume mon relais par le biais de l'interrupteur et op la température s'élève anormalement mais si je réactualise la page, ma température reste élevé alors que cette fois la tension aux bornes du LM35 est resté constante ...

J'ai essayer de tous alimenter par le 5V de l'arduino sauf le LM35 alimenté directement par mon régulateur "externe" et même problème :/

thx
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: 68tjs on Sep 13, 2011, 12:47 pm
Sans maniper moi même sur le montage je ne peux rien affirmer mais si le Lm35 est sur le chemin d'alimentation du relais j'imagine ceci :
Consommation du relais = 1A
Résistance du fil d'alimentation du relais = 0,2 ohms
C'est pas beaucoup mais cela fait 200mV de chute de tension dans le fil + et autant dans le fil - "dit de masse" et tu remontes ta lecture du LM35 d'autant ce qui se traduit par  20°C de plus apparents.

Mesures la tension d'alimentation du LM35 avec le relais non alimenté puis alimenté.
ATTENTION la référence "-" du voltmètre doit impérativement être placée sur une borne GND de la platine Arduino.

Astuce si tu n'as pas assez de sensibilité sur le voltmètre : insères des piles en opposition dans ton circuit de mesure jusqu'à ce que tu puisse passer à un calibre inférieur.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 13, 2011, 04:49 pm
Bon après bien avoir prit plusieurs mesures, j'ai bien une chute de tension a l'allumage de mon relais  :~ Il va donc falloir faire 2 réseaux 5V différents !
Un réseau 5V pour les LM35 ( a base de LC7805 je pense ) et un réseau 5V de forte puissance pour les relais ( avec une vieille alim de PC je pense ) !


Du coup maintenant je ne sait plus trop quoi ajouter a mon interface, elle me semble assez complète pour le moment  :~
Peut-être commencer a bosser sur le "wireless" entre la BoX et les capteurs ?

Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: 68tjs on Sep 13, 2011, 07:48 pm
Avant de conclure il faut vérifier que la chute de tension que tu as mesuré est cohérente avec l'erreur de température.
Ensuite a-tu sans toucher aux relais alimenter le LM35 par un autre fil directement branché sur l'alim ?

Faut pas me croire sur parole, je n'ai pas ton montage sous les yeux et je peux dire des connxxxxries, contrôles toujours par toi même.

Une fois ces deux points vérifiés tu pourras dire que tu as identifié l'origine du problème.

Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 13, 2011, 07:49 pm
J'essaye de mettre en places de boutons "scénario". C'est a dire par exemple un bouton "vacances" qui va agir sur plusieurs pin a la fois pour par exemple fermer tous les volets, couper le chauffage ....

J'ai donc mes boutons qui sont dans ce code la, c'est a dire que chaque bouton agit sur une pin précise !
Code: [Select]
if(pin8)
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=08&val=00\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></center></a>"));
            else
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=08&val=01\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></center></a>"));


J'ai essayer de créer quelque chose de plus global en faisant ça

Code: [Select]
if(vac)
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=vac&val=00\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></center></a>"));
            else
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=vac&val=01\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></center></a>"));


Code: [Select]
else if (pin==vac)
    {
    digitalWrite(LED_PIN8, val);
        pin6^=1;
        digitalWrite(LED_PIN9, val);
        pin6^=1;
    }


Mais dans cette partie je ne peut déclarer "vac" puisque ce n'est pas une "pin" a proprement parlé

Code: [Select]
// LED cathode connects the Pin4, anode to 5V through 1K resistor
#define LED_PIN4  4
#define LED_PIN5  5
#define LED_PIN6  6
#define LED_PIN8  8
#define LED_PIN9  9
#define BOUTON_PIN0  14
#define tempPin  15
#define vac


Donc bien sur ça ne fonctionne pas  :smiley-roll-sweat:
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 13, 2011, 08:10 pm
Pourquoi ne pas faire ?

Code: [Select]
#define vac 20

J'ai pris 20 comme les pin peuvent aller jusqu'à 19.

Code: [Select]
byte pin20 = 0;

pour l'état.

Code: [Select]

if(pin20)
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=14&val=00\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/on11.png\"></center></a>"));
            else
                  plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("?pin=14&val=01\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/off12.png\"></center></a>"));


Attention rappel au cas ou ...
C'est bien 14 "?pin=14&",  20 Dec = 0x14hexa pour le code que je t'ai donné afin d'avoir plus de valeurs possible que 9.

Code: [Select]

else if (pin==vac)
{
   if(val)
   {
       digitalWrite(LED_PIN8, LOW);
       pin8=0;
       digitalWrite(LED_PIN9, LOW);
       pin9=0;
   }
   else
   {
       digitalWrite(LED_PIN8, HIGH);
       pin8=1;
       digitalWrite(LED_PIN9, HIGH);
       pin9=1;
   }

   pin20^=1;
}


Tu appliques ce que tu veux et tu retiens l'etat de chaque action.

Code: [Select]

#define BOUTON_PIN0  14
#define tempPin  15


(14 Dec = 0x0E Hexa et 15Dec = 0x0F Hexa)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 13, 2011, 08:40 pm
Quote
Pourquoi ne pas faire ?

Code: [Select]
Code:
#define vac 20


C'est justement ce que j'étais en train de faire ^^

Quote
Attention rappel au cas ou ...
C'est bien 14 "?pin=14&",  20 Dec = 0x14hexa pour le code que je t'ai donné afin d'avoir plus de valeurs possible que 9.


Ca par contre je ne comprend pas :/

pin=01&   =>1
pin=02&   =>2
pin=03&   =>3
pin=04&   =>4

etc etc la c'est bon ?

par contre

pin=10&   => ? ca fait 10 non ?

EDIT:

Je crois avoir compris ^^ est-ce que c'est ça

pin=01&   =>1
pin=02&   =>2
pin=03&   =>3
pin=04&   =>4
pin=05&   =>5
pin=06&   =>6
pin=07&   =>7
pin=08&   =>8
pin=09&   =>9
pin=0A&    =>10
pin=0B&    =>11
pin=0C&    =>12
pin=0D&    =>13
pin=0E&    =>14
pin=0F&    =>15
pin=10&    =>16
pin=11&    =>17
pin=12&    =>18
pin=13&    =>19
pin=14&    =>20
pin=15&    =>21

C'est ça ?

Sinon pour en revenir a mes valeurs de tension du LM35, j'ai donc câblé tous les +5V sur une alim de PC ATX de 300W, donc deja un beau morceau je trouve ... et bah j'ai quand même une chute de tension a l'ouverture de mon relais ! j'ai l'impression qu'un relais ça consomme un max .... dès que j'ouvre le relais j'entend le ventilo de l'alim qui s'accélère ! je n'ose pas imaginer si j'avais 5 ou 6 relais en place  :smiley-eek:

Par contre mon +5V chute mais mon +12V ( qui est en fait a +10.61V alim a vide ) augmente pour arriver a +12.5V a l'ouverture du relais ... je pensait donc monter mon LC7805 sur le 12 volts pour faire mon réseau "LM35" ! comme il n'y a pas de chute de tension sur le 12V il ne devrais pas y avoir de chute de tension en sortie du LC7805, non ?

thx
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 13, 2011, 09:26 pm
Tu peux essayer il doit y avoir de plus gros condo réservoir sur le 12.
Cependant méfie toi de ton multimètre, ce n'est pas parce-que tu ne vois pas de pic avec qu'il n'y en a pas; un multimètre a un certain temps de réaction ce qui empêche de voir passer pas mal de problèmes ;)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chabot380 on Sep 13, 2011, 09:40 pm
salut

Tu peux nous faire le schéma du montage sortie arduino jusqu'au relais ?
C'est étonant qu'un relais consomme autant !  :smiley-eek-blue:

A+
chabot380
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Guillaume85 on Sep 13, 2011, 11:01 pm
j'adore ton projet  :)  super interressant!
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 13, 2011, 11:37 pm

EDIT:

Je crois avoir compris ^^ est-ce que c'est ça

pin=01&   =>1
pin=02&   =>2
pin=03&   =>3
pin=04&   =>4
pin=05&   =>5
pin=06&   =>6
pin=07&   =>7
pin=08&   =>8
pin=09&   =>9
pin=0A&    =>10
pin=0B&    =>11
pin=0C&    =>12
pin=0D&    =>13
pin=0E&    =>14
pin=0F&    =>15
pin=10&    =>16
pin=11&    =>17
pin=12&    =>18
pin=13&    =>19
pin=14&    =>20
pin=15&    =>21

C'est ça ?


C'est exactement ça  ;)
Tu as 256 possibilité de 0 à 255 (petit plus: c'est exactement les valeurs décimal que peux prendre un octet(byte), petit plus2: 1 char(1 octet) tu peux vite faire le raprochement avec la table ascii)
Code: [Select]

pin=0&    =>0
.
.
.
pin=FF&    =>255


l'hexadécimal ne va bientôt plus avoir de secret pour toi   :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 14, 2011, 12:25 pm
(http://i45.servimg.com/u/f45/11/05/63/75/arduio11.jpg)

Q1 c'est mon TIP31C  ;)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chabot380 on Sep 14, 2011, 04:50 pm
Whaouuuu un TIP31C  !!!!
Tu as des cartes relais qui marchent avec des 2N2222 ou tu peux mettre un BC547 pour commander le relais.
C'est quoi ce relais ? en 12 volts ou en 5 volts ? quel est l'impédance de sa bobine ?

A+ chabot380
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: 68tjs on Sep 14, 2011, 05:21 pm
Je crois avoir compris qu'il en a acheté un stock  :smiley-mr-green:
Mais bon s'il n'y a pas besoin de gain un Tip31c ou un BC 547 c'est le même prix chez les distributeurs
Par contre attention chez les transistors qui peut le plus (en puissance) peut le moins (en gain en courant).

Je ferais une remarque, pour le au cas où, sur l'emplacement de la diode de roue libre:
La diode doit être placée à raz de la bobine


Elle sert à court-circuiter les tensions élevées qui se forment à la coupure du courant. Si la diode est au plus prés la boucle diode/bobine est très petite et il n'y a quasiment pas de rayonnement dans le cas contraire plus la boucle formée est grande plus ça rayonne partout dans le montage.
Le mieux est de trouver des relais avec la diode incorporée, c'est courant en faible puissance, en forte puissance je ne sais pas.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 14, 2011, 06:56 pm
Bah j'ai des TIP31C en stock alors je m'en sert  :smiley-zipper: quel est le soucis du TIP31C ?

Dans mon montage ma diode de roue libre est bien au plu près de ma bobine mais sur fritzing impossible de faire comme ça, je ne sait pas ce qui gênais mais il voulais a tous prix me la mettre ici :/

Il s'agit de relais 5V/220V, voila le datasheet

http://www.hebertech.com/datasheet/songle/srd-05vdc.html

Bref tous ça n'explique pas la grosse consommation électrique de mon relais je pense non ?
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: 68tjs on Sep 14, 2011, 08:39 pm
Les transistors basse puissance comme BC597, 2N2222 etc ont généralement des gains en courant HFE supérieurs à 100
Les transistors de puissance, du fait de leur structure, ont que des gains bien plus faibles, HFE=20 n'est pas rare.
D'où les tip131 qui est un tip31 plus un petit transistor en montage darlington (le gain est le produit des 2 gains)

Quant à ton relais la résistance de bobine est 70 ohms ou plus probablement 50 ohms soit un courant I=100 mA.
Pour vérifier il faut être méthodique:
1) mesure la résistance de ta bobine avec un multimètre positionné en ohmmètre, c'est représentatif puisque ta bobine est prévue pour utilisée en courant continu
2) vérifies en mettant ton multimetre (en ampèremetre) en série avec le relais et branche le tout sur 5V. La mesure ne sera pas exacte car le multimètre en ampèremetre apporte une petite chute de tension mais cela donnera un ordre de grandeur qui vérifiera la mesure précédente.

Si le relais semble correct remets le dans ton montage si la consommation est toujours excessive c'est que tu as des erreurs de câblage ou des composants morts.

Pour tes LM35 est ce que les variations de tension que tu as mesuré sont cohérentes avec les degrés en plus ?
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 14, 2011, 08:48 pm
- Résistance de ma bobine 71 Ohms
- Mon relais "allumé" consomme 6.8A ( j'ai 68 sur le calibre 200m donc j'en déduit que c'est 6.8A non ? )

J'ai câblé mon L7805CV sur le 12V de mon alim de PC, j'ai un 5.01V stable en sortie même lorsque j'allume mon relais ( au multimètre, donc je ne peut voir de brève chute de tension ) cependant, si cette chute de tension étais brève j'aurais une envolé de ma température mais a l'actualisation de cette dernière elle redeviendrais cohérente puisque la tension ce serait re-stabilisé non ? et la ce n'est pas le cas, j'ai bien 5.01V en entré de LM35 mais tant que le relais est ouvert la température merdouille ... je pencherais donc plus pour un problème de "parasites" non ?

Car ici dans mon montage de test, mon LM35 est à même pas 10cm de mon relais et de sa bobine :/ Demain de vais essayer de trouver un lonnnnnng fil a 3 brins pour câbler mon LM35 très loin du relais pour voir  :~

merci
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chabot380 on Sep 14, 2011, 09:00 pm
bonsoir

Non le relais ne consomme que 68 mA c'est pas 6.8 A !
ton 7805 alimente que ton relais ou le relais + l'arduino ?
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: al1fch on Sep 14, 2011, 09:03 pm
Bonsoir

-Un doute : et si la diode de roue libre était en réalité montée à l'envers par rapport au schéma ?
(cathode vers le collecteur du transistor) ça expliquerait la consommation visiblement anormale quand le transistor est passant !

-Le LM35 a beaucoup de qualités mais c'est un composant analogique qui est assez sensible aux champs électromagnétiques, aux 'bruit' sur l'alimentation ...... voir les recommendations du fabricant ci dessous quand il est en présence de relais ou autre source.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chabot380 on Sep 14, 2011, 09:06 pm
la diode montée à l'envers le relais ne collerai pas !
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: al1fch on Sep 14, 2011, 09:09 pm
d'accord chabot380 !!
De plusj'avais lu un peu en diagonale  :smiley-red: les derniers échanges et pas pris en compte toutes les infos.... comme le courant de 68mA qui semble tout à fait normal (5V et 70 Ohm)

Autre doute : une alimentation ATX a-t-elle un fonctionnement encore correct quand on débite des courants faibles ? mes connaissances dans le domaine datent pas mal et 'à l'époque' il fallait charger les alims de PC quand on les testait hors PC. Il y avait un courant mini à débiter pour être dans la plage de régulation.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: 68tjs on Sep 14, 2011, 09:25 pm
le relais est bon et cela ne va toujours pas.

Je pencherais pour une conn****rie dans le montage. Comme toute con***rie difficile à voir du genre minuscule brin d'un fil multibrin en contact là où il ne faut pas.
Il y a des moments où il est préférable de refaire le câblage en partant de zéro histoire de repartir sur des bases saines.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 14, 2011, 09:36 pm
Quote
bonsoir

Non le relais ne consomme que 68 mA c'est pas 6.8 A !
ton 7805 alimente que ton relais ou le relais + l'arduino ?


Ok ^^ j'avais fait une "petite" erreur de conversion alors  :*

Quote
la diode montée à l'envers le relais ne collerai pas !


Exacte j'ai testé ^^

Quote
-Le LM35 a beaucoup de qualités mais c'est un composant analogique qui est assez sensible aux champs électromagnétiques, aux 'bruit' sur l'alimentation ...... voir les recommendations du fabricant ci dessous quand il est en présence de relais ou autre source.


C'est pour ça que demain je vais essayer d'éloigner mon LM35 ou mon relais si je trouve du fil fin qui traîne ^^

Quote
Autre doute : une alimentation ATX a-t-elle un fonctionnement encore correct quand on débite des courants faibles ? mes connaissances dans le domaine datent pas mal et 'à l'époque' il fallait charger les alims de PC quand on les testait hors PC. Il y avait un courant mini à débiter pour être dans la plage de régulation.


J'ai juste "shunté" le PS-ON (fil vert) sur le GND (fil noire) ! j'ai lu des choses qui se contredises sur le net entre ceux qui mettent des résistances, ceux qui ne mettent rien ... j'ai essayer la technique de mettre une ampoule 12V 15W sur le +12V pour "charger" l'alim mais cette dernière s'allume puis se coupe brusquement (la lampe clignote une fois ), et je ne peut la redémarrer que 2 ou 3 minutes plus tard ( sécurité thermique ? )

Quote
Je pencherais pour une conn****rie dans le montage. Comme toute con***rie difficile à voir du genre minuscule brin d'un fil multibrin en contact là où il ne faut pas.
Il y a des moments où il est préférable de refaire le câblage en partant de zéro histoire de repartir sur des bases saines.


C'est un peu câblé a la barbare pour le moment c'est sur mais en regardant bien il n'y a aucun faux contact quelque part par contre. A mon avis c'est plus du parasitage du a la bobine du relais ! mais bon demain je vais refaire un câblage bien propre en éloignant le LM35 et le Relais ;)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chabot380 on Sep 14, 2011, 09:44 pm
TU n'as pas répondu à la question : ton 7805 alimente que ton relais ou le relais + l'arduino ?

A+
chabot380
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 14, 2011, 09:49 pm
Excuse moi, il n'alimente que le relais ! mon arduino est alimenté via le câble USB branché à mon PC  ;)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chabot380 on Sep 14, 2011, 09:56 pm
le LM35 est alimenté par l'arduino j'espère !
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 14, 2011, 10:19 pm
Pour le moment je suis dans cette config:

USB => Arduino
Alim ATX => 12V => LC7805 => LM35
Alim ATX => 5V => TIP31C => Relais

Avec bien sur le GND de l'arduino branché au GND de l'alim ATX
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 15, 2011, 03:37 pm
c'étais bien des interférences avec la bobines du relais ! j'ai câblé mon relais à 2 mètres du LM35 et je n'est plus de variations de T°C  :D
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: 68tjs on Sep 15, 2011, 06:25 pm
Quand tu as éloigné le LM35 ne serait tu pas passé du montage 1 au montage 2 ?

Dans les deux cas j'ai placé les pointes de touches du voltmètre pour faire la mesure.
Il ne passe aucun courant dans le fil 0V qui relie le gnd arduino au "-12V" de l'alim, a part celui qui entre dans l'entrée analogique autant dire rien du tout.
Montage 1 le fil 12V "-" est parcouru par le courant du relais et par celui du LM35
Montage 2 le fil 12V "-" du Lm n'est plus perturbé par le courant du relais.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 15, 2011, 07:33 pm
A mes yeux les 2 montages sont identiques, seulement le "noeud" de connections du relais qui est plus proche du LM35 c'est tous ! et ça change les valeurs de mesure juste le fait de déplacer le "noeud" de liaison  :smiley-eek: Sinon dans mon montage, depuis le départ je suis dans la condition "montage n°2", chaque GND et +xV est repris a la source elle même, il n'y a pas de "noeud" en "milieu" de réseau.

Lors de mes test je n'est pas modifié mon câblage puisque j'ai juste repiqué un fil plus long au même endroit ou j'avais mes connections au préalable, mais bon maintenant au moins on sait qu'un relais ça peut perturber un pauvre petit LM35 ^^


Sinon je vient de me rendre compte que pour le moment mon interface domotique est en "free access" et pour de la domotique ce n'est pas le top du top ^^ je vais donc commencer a regarder comment mettre en place un login + mot de passe  ;) en HTML/PHP je sait comment faire un htaccess mais je ne sait pas si l'arduino+shield peut prendre en compte un htaccess ....
Et sinon je vient de commander 2 tranceiver 2.4Ghz, bientôt les test de cette chose et surtout les galères qui vont avec  :D

thx
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 15, 2011, 09:25 pm
Un fichier ".htaccess" est uniquement interprété par le serveur web Apache donc pas l'arduino.
Mais tu peux faire un formulaire html/php/js avec un mot de passe stocké dans ton arduino auquel tu viendras te comparer ;)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: 68tjs on Sep 15, 2011, 10:41 pm
Quote
et ça change les valeurs de mesure juste le fait de déplacer le "noeud" de liaison  smiley-eek

C'est écrit dans le montage 1-> i relais + i lm35 et i lm35 seulement dans montage 2. Bien sur tout dépend du diamètre du fil et des distances 1cm ne fera rien, 30cm ça se verra.
Avec le lm35 tu chatouille le mV en analogique. L'analogique est plus difficile que le numérique,  il faut un câblage nickel.
Avec un LM35 loin de l'organe de mesure (l'arduino) j'aurais fait un montage différentiel pour m'affranchir des perturbations. L'ampli op doit être alimenté par l'arduino. Les deux diodes en série avec le lm35 sont juste là pour faire un décalage de tension afin de pouvoir utiliser un ampli op courant et éviter un cher rail-to-rail.
Principe : tu amplifie la différence des deux tensions donc tu te fiche des chutes de tension dans le fil d'alim puisqu'elle s'appliquent de façon identique sur les deux points de prise d'information.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 16, 2011, 12:10 pm
Quote
Mais tu peux faire un formulaire html/php/js avec un mot de passe stocké dans ton arduino auquel tu viendras te comparer


Oui je pensait un peut à un truc du genre mais je n'est vraiment aucune idée de comment faire et sur internet c'est pauvres en informations  :~ tu n'aurais pas juste une petite piste de recherche ?

Quote
Avec un LM35 loin de l'organe de mesure (l'arduino) j'aurais fait un montage différentiel pour m'affranchir des perturbations. L'ampli op doit être alimenté par l'arduino. Les deux diodes en série avec le lm35 sont juste là pour faire un décalage de tension afin de pouvoir utiliser un ampli op courant et éviter un cher rail-to-rail.


Si j'alimente mon LM35 par l'arduino je n'est pas un 5V constant, contrairement a mon montage ou j'ai monté un LC7805 sur le +12V d'une alim ATX

merci
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: al1fch on Sep 16, 2011, 12:35 pm
Quote
Si j'alimente mon LM35 par l'arduino je n'est pas un 5V constant

Ok pour le "5V" provenant du cable USB n'est pas vraiment régulé mais par contre si tu alimentes la carte par le connecteur coaxial et que le 5V issu du régulateur n'est pas constant il y a un problême acec la carte !!

Le MC33269D d'une carte UNO est loin d'être une cochonnerie (ajusté à 1%) et peut fournir jusqu'à 800mA.
Il parait dommage de ne pas en profiter !!

Une alimentation unique pourrait suffire, supérieure à 7V, par exemple 9V.
Tu l'envoies sur le connecteur coaxial et aussi sur la bobine du relais à travers une petite résistance si le relais que tu as déjà est un 5V (essayer 47 Ohm ou 100 Ohm)
Le LM35, lui, serait alimenté avec le  5V  produit par le régulateur de la carte Arduino.

La broche Vin peut aussi etre utilisée pour le "9V" si tu ne fais pas d'erreur de polarité : c'est l'accès direct, non protégé, à l'entrée du régulateur 5V

Ci joint la partie Vin vers 5V d'une Arduino UNO rev2
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 16, 2011, 04:50 pm

Quote
Mais tu peux faire un formulaire html/php/js avec un mot de passe stocké dans ton arduino auquel tu viendras te comparer


Oui je pensait un peut à un truc du genre mais je n'est vraiment aucune idée de comment faire et sur internet c'est pauvres en informations  :~ tu n'aurais pas juste une petite piste de recherche ?



Pour la base regarde ça (http://www.siteduzero.com/tutoriel-3-213128-tp-page-protegee-par-mot-de-passe.html), en remplaçant le php par du code C, mais ça aide. Après il faut faire attention à ce que l'Arduino ne donne pas la page 'secret.php' a un client non authentifié ;)

Je devrais regarder ça aussi dès que je reçois mon shield ethernet, début de semaine prochaine j'espère :)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 16, 2011, 05:17 pm
En PHP ça va c'est compréhensible mais mettre ça en C++ glouppsss ^^

Sinon comme je passe par un DNS, c'est dommage que l'on ne puisse pas directement mettre un MDP au DNS  :~
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 16, 2011, 05:34 pm

En PHP ça va c'est compréhensible mais mettre ça en C++ glouppsss ^^


J'ai une idée de la chose, ça me parait pas forcément bien dur, si je ne me plante pas je te montre dans la semaine
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 17, 2011, 12:02 am
Pourquoi ne pas proposé une première page genre, temps qu'aucune authentification n'a été faite ou échouée.

Code: [Select]

<FORM method=GET action="http//chico.dyndns.com">
    <INPUT type=text name="login">
    <INPUT type=password name="pass">
    <INPUT type="submit" value="Envoyer">
    </FORM>


Ensuite tu récupères les paramètres login et pass et si c'est bon tu passe une variable à true pour autorisé l'affichage des autres pages.
Edit: j'avais oublier, géré les sessions sinon l'arduino reste accessible à tout le monde une fois que tu te sera logué ...  :smiley-mr-green:

Sinon ce que tu peux faire aussi c'est mette un paramètre "pass" dans chaque lien genre.

Code: [Select]

?pge=05&pass=123456
?pin=06&val=00&pass=123456


Englobé tout la partie web par un if(pass), donc même au démarrage il faudra intégré le paramètre pass.
Donc http://blabla.dyndns.com/?pass=123456 pour le premier accès à l'arduino, sans le paramètre pass l'arduino ne retourne rien.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: arduimat on Sep 17, 2011, 11:00 am
La première solution d'osaka me semble la meilleure je pense (en methode POST de préférence), une petite page pour se connecter, juste la saisir d'un mot de passe.

Ensuite l'utilisation des SESSIONS, c'est un moyen sûr et pas très compliqué à mettre en place.

http://www.phpdebutant.org/article69.php

Le principe est assez simple, tu tapes ton mot de passe, la page PHP teste si c'est bien le bon, si OUI alors tu créé la SESSION, si NON alors rien ne se passe (reste a la page de connexion).

Après sur chacune de tes pages (d'ailleurs vaut mieux faire un hautdepage.php que tu inclus[include] dans chaque page, au moins quand tu change qqchose ça le change sur toutes les pages), donc je disais sur chacune de tes pages (ou avec le hautdepage.php) tu vas avoir une fonction (voir lien) qui va te permettre de tester si la SESSION est existante et valide. Si c'est le cas, tu peux acceder à la page, SI c'est pas le cas, ça redirige vers la page de connexion...

Si tu appliques bien ce principe sur toutes tes pages accessibles depuis l'extérieur, la personne tentant de se connecter retombera toujours sur la page de connexion, donc aucun problème. Si tu as du mal à mettre en place ça, dis le moi, je prendrai le temps de t'envoyer un exemple...
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 17, 2011, 12:04 pm
Le problème ici c'est que point de php pour l'arduino :s et vu que normalement je pense que la gestion de sessions sont géré via cookie ...
On pourrais introduire un code session (aléatoire) fourni par l'arduino dans la page mais bon, il faudrait un tableau dynamique de code sessions (à moins de n’autorisé qu'une session ou un certain nombre de sessions), gérer le temps de session (pour chaque sessions ), etc .
Il y a des modifs à faire sur le code du shield celui au début du loop qui contrôle l'entête pour le "POST" aussi.

Il faudrait remettre une fois ton dernier code fonctionnel chico.  ;)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 17, 2011, 01:44 pm

Pourquoi ne pas proposé une première page genre, temps qu'aucune authentification n'a été faite ou échouée.

Code: [Select]

<FORM method=GET action="http//chico.dyndns.com">
   <INPUT type=text name="login">
   <INPUT type=password name="pass">
   <INPUT type="submit" value="Envoyer">
   </FORM>


Ensuite tu récupères les paramètres login et pass et si c'est bon tu passe une variable à true pour autorisé l'affichage des autres pages.
Edit: j'avais oublier, géré les sessions sinon l'arduino reste accessible à tout le monde une fois que tu te sera logué ...  :smiley-mr-green:



C'est à ça que je pensais, mais je ne me suis pas encore penché sur la partie cookie. Sinon quelquechose d'assez simple basé sur l'IP+temps même si ça peut être dangereux sur un réseau d'entreprise


Edit : J'ai trouvé de la doc sur une authentification basique ici (http://www.iprelax.fr/http/1945-11.php) et là (http://fr.wikipedia.org/wiki/HTTP_Authentification)

Edit2 : Je viens d'essayer en mettant un serveur sur mon PC, en retournant
Code: [Select]

HTTP/1.1 401 OK
WWW-Authenticate: Basic realm="127.0.1"
Date: Wed, 07 Aug 1996 11:15:43 GMT
Server: Webserv test
Content-Length: DataLength
Content-Type: ContentType

On obtient la demande d'authentification du navigateur, qui ensuite renvoie
Quote
GET / HTTP/1.1
Host: 127.0.0.1:8083
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; fr; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Authorization: Basic dHVpOmZkZw==

La dernier ligne nous intéresse, il s'agit de 'user:pwd' encodé en base 64 ;) Donc on peut facilement protéger le serveur. attention cependant le mot de passe transite par le web (en base 64) mais bon avant que quelqu'un n'espionne notre réseau...
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 17, 2011, 05:19 pm
Et bah dit donc ça amène de la foule mon petit projet  :*
J'ai lu un peu tous en diagonale car ce week je n'aurais pas le temps de bosser un peu sur ma petite arduinette ^^

Par contre je pense que le plus simple serait de partir dans une page d'authentification plutôt que de devoir taper le MDP a chaque lien. Dès qu'on se connecte sur le DNS, une page demandant MDP+Login et une fois l'identification réalisé, un accès au pages de l'interface comme c'est le cas tous de suite. Il faudrait donc juste créer une première page d'accueil avec authentification.

merci
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 17, 2011, 06:03 pm

Il faudrait donc juste créer une première page d'accueil avec authentification.


Pa si simple parce qu'une fois ouvert il est ouvert à tous ...



Edit : J'ai trouvé de la doc sur une authentification basique ici (http://www.iprelax.fr/http/1945-11.php) et là (http://fr.wikipedia.org/wiki/HTTP_Authentification)

Edit2 : Je viens d'essayer en mettant un serveur sur mon PC, en retournant
Code: [Select]

HTTP/1.1 401 OK
WWW-Authenticate: Basic realm="127.0.1"
Date: Wed, 07 Aug 1996 11:15:43 GMT
Server: Webserv test
Content-Length: DataLength
Content-Type: ContentType

On obtient la demande d'authentification du navigateur, qui ensuite renvoie
Quote
GET / HTTP/1.1
Host: 127.0.0.1:8083
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; fr; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Authorization: Basic dHVpOmZkZw==

La dernier ligne nous intéresse, il s'agit de 'user:pwd' encodé en base 64 ;) Donc on peut facilement protéger le serveur. attention cependant le mot de passe transite par le web (en base 64) mais bon avant que quelqu'un n'espionne notre réseau...


Intéressant et simple à faire  :) .
Pour le cookie peut être l'inscrire via javascript (à cause de la date d'expiration pas simple à inscrire avec l'arduino), une fois placé il sera automatiquement retourné par chaque requêtes.

Code: [Select]

GET /spec.html HTTP/1.1

Host: www.exemple.org

Cookie: name=value

Accept: */*


http://fr.wikipedia.org/wiki/Cookie_%28informatique%29#Cr.C3.A9ation_d.27un_cookie

Ca a l'air plus simple que je le pensais tout ça ?
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 17, 2011, 09:20 pm

Par contre je pense que le plus simple serait de partir dans une page d'authentification plutôt que de devoir taper le MDP a chaque lien. Dès qu'on se connecte sur le DNS, une page demandant MDP+Login et une fois l'identification réalisé, un accès au pages de l'interface comme c'est le cas tous de suite. Il faudrait donc juste créer une première page d'accueil avec authentification.

merci

Que ce soit comme je l'ai présenté ou ce que dit osaka, pas besoin de remettre login/mdp à chaque fois c'est le navigateur qui gère ;)


Pour le cookie peut être l'inscrire via javascript (à cause de la date d'expiration pas simple à inscrire avec l'arduino), une fois placé il sera automatiquement retourné par chaque requêtes.

Ca a l'air plus simple que je le pensais tout ça ?

C'est vrai que je n'avais pas pensé au problème de l'heure mais on doit pouvoir la récupérer par js/ajax. C'est l'avantage du truc que je mettais pas besoin d'heure et d'envoyer un cookie, mais le cookie a l'air assez simple aussi
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 19, 2011, 03:07 am
Voilà ce à quoi je (on) pensais plus ou moins.

Code: [Select]

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {  0x90, 0xA2, 0xDA, 0x00, 0x6D, 0x86 };
byte ip[] = { 192,168,1,109 };

Server server(80);

boolean cookie = false;
boolean password = false;
int action = 1;

void setup()
{
  Serial.begin(9600);
  Ethernet.begin(mac,ip);
  server.begin();
}

void loop()
{
  Client client = server.available();
 
    if (client.connected())
    {
      if (client.available())
      {
          analyse_req(client);
      }
     
      char delCookie[] = "<script type=\"text/javascript\">function delCookie(){ document.cookie=\"arduino=''\";}</script>";
      char setCookie[] = "<script type=\"text/javascript\">function setCookie(){var date = new Date();date.setTime(date.getTime()+(3600*1000));var expires=\"; expires=\"+date.toGMTString();document.cookie=\"arduino=chico\"+expires+\"path=/\";}</script>";
      char body[] = "test<form method=\"get\" action=\"http://192.168.1.109\"><input type=\"submit\" value=\"refresh\" /></form><form method=\"post\" action=\"http://192.168.1.109\"><input type=\"hidden\" name=\"act\" value=\"cls\" /><input type=\"submit\" value=\"close\" /></form>";
     
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html\n\n");
      client.println("<html>");
     
      if((!password && !cookie) || !action)
      {
        client.println("<head>");
        client.println(delCookie);
        client.println("</head>");
        client.println("<body onload=\"delCookie();\">");
        client.println("<form method=\"post\" action=\"http://192.168.1.109\">");
        client.println("<input type=\"text\" name=\"login\" />");
        client.println("<input type=\"password\" name=\"pass\" />");
        client.println("<input type=\"submit\" value=\"Envoyer\" />");
        client.println("</form>");
        action = 1;
       
      }
      else if(password && !cookie)
      {
        client.println("<head>");
        client.println(setCookie);
        client.println("</head>");
        client.println("<body onload=\"setCookie();\">");
        client.println(body);
      }
      else if(cookie)
      {
        client.println("<head>");
        client.println(delCookie);
        client.println("</head>");
        client.println("<body>");
        client.println(body);
       
      }
     
      client.println("</body>");
      client.println("</html>");
      client.println("");
     
      cookie = false;
      password = false;
      client.stop();
   
    }
   
}


void analyse_req(Client client)
{
    int av = client.available();
   
    if(av != -1)
    {
      String req = "";
      char c = 0;
     
      while(c != -1)
      {
        c = (char)client.read();
        req+=c;
        if(c == '\n' || c == -1)
        {
          if(req.indexOf("Cookie:") != -1)
          {
            if(req.indexOf("arduino") != -1 && req.substring(16, 21).equals("chico"))
            {
                cookie = true;
            }
          }
          else if(req.indexOf("login") != -1 && req.indexOf("admin") != -1 && req.substring(17, 25).equals("12345678"))
          {
            password = true;
          }
          else if(req.indexOf("act") != -1)
          {
            if(req.indexOf("cls") != -1)
            {
              action = 0;
            }
          }
         
          req="";
        }
      }
    }
}

Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 19, 2011, 05:15 pm
Chez moi ton code ne fonctionne pas Osaka et je n'est pas le temps de look ou ça cloche la  :smiley-yell:

thx
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 19, 2011, 05:37 pm
Normal c'est pour le shield officiel  :P, c'était pour montrer le principe.
Mais pour ton code il y aurais quelques modifs, il y a juste la partie partie contrôle et récup qui est preturbant entre ce qui est utile et pas ...
Et vu que je n'ai pas ce shield ...
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 19, 2011, 09:36 pm

Voilà ce à quoi je (on) pensais plus ou moins.


ça m'a l'air simple et efficace, merci !
Vivement la reception de mon shied...

Chicotore : Où as tu trouvé tes icônes ? Les as tu fais ?
Edit : trouvé : http://icones.pro/ampoule-idee-lumiere-2-image-png.html
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 20, 2011, 06:34 pm
Oui mes icônes viennent de ce site, ils y en a pas mal et de bonne qualités  :D après pour le reste j'ai fait ça sous photoshop, si tu les veut je peut te uploader les PSD  ;)

Je vais me pencher ce week-end pour faire pareil sur le shield ENC80J60 ( je parle du code a Osaka ^^ ) en espérant en sortir quelque chose qui fonctionne :/

thx
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 20, 2011, 08:50 pm
Non merci les icônes me suffisent pour l'instant.

Je me posais une question : comment testez vous vos pages, directement sur l'Arduino ou sur un serveur web avant ?
En fait, je fait mes pages que je teste sur le serveur de mon PC, et après j'ai fait un petit programme qui encadre les lignes de printf(" ligne"); Ensuite je fait un copier coller du résultat dans une fonction du programme. Vous m'avez suivi ?  :smiley-roll-sweat:
Mais je me demandais s'il n'y a pas plus simple...
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 20, 2011, 09:35 pm


Je me posais une question : comment testez vous vos pages, directement sur l'Arduino ou sur un serveur web avant ?
En fait, je fait mes pages que je teste sur le serveur de mon PC, et après j'ai fait un petit programme qui encadre les lignes de printf(" ligne"); Ensuite je fait un copier coller du résultat dans une fonction du programme. Vous m'avez suivi ?  :smiley-roll-sweat:


Ai tout suivi et c'est la meilleur façon de faire pour moi.


Mais je me demandais s'il n'y a pas plus simple...


Je pense pas, ça parait déjà optimal  8) à par que temps que tu n'inscrit rien d'autre que du html ou javascript dans ta page pas besoins de serveur tu peux ouvrir la page directement dans ton navigateur.

Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 20, 2011, 09:40 pm
Ok, je continuerai à jouer du copier/coller alors ! Merci :)
Peut-être générer directement les fichiers .c avec un fichier.c par page pour gagner un peu de temps…

Et effectivement j'ai pas mal de javascript (code perso + jquery mobile) et je met un peu de php pour "simuler" l'arduino, donc il faut un serveur
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 20, 2011, 09:58 pm
Vi tu peux généré directement les fichiers (.pde pour l'arduino) si tu ajoute le reste du code, tu pourras même nous donner ton petit programme   :smiley-mr-green: .
Pour le shield officiel (le mien  :smiley-mr-green:) c'est client.println("le code web");

Enfin moi je n'utilise pas le shield en serveur web  http://arduino.cc/forum/index.php/topic,72035.0.html . ;O)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 20, 2011, 10:28 pm
On ne peux pas faire d'inclue de .h "classique" avec l'arduino ? J'avoue que j'ai jamais essayé  :smiley-sad-blue:

Pour les websocket j'avais vu ton exemple mais j'ai un peu de mal à en voir l'intérêt  :smiley-red:
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 20, 2011, 10:46 pm
Si si tu peux faire des includes de .h dans tes .pde, c'est juste le type de fichier utilisé par l'application arduino.
L’intérêt de ma lib et d'utilisé les websockets est justement de ne pas devoir inclure le code web dans l'arduino, donc plus de possibilitées pour l'interface comme l'arduino et le shield sont limité à 2000 octet par connexion (4 simultanée) .
La lib donc mon protocole permet la communication entre l'arduino et n'importe quel moyen de transmission comme tcp/ip, serie, i2c, ... sans même devoir introduire de code dans l'arduino cible (à part l'instanciation de la lib et le moyen de transmission).
Les websockets me permet la communication socket donc full duplex, l'arduino peux envoyé des informations au client web et celui ci peux affiché l'information en temps réel sans devoir en faire la demande en rafraichissant la page ou par bouton, etc.
Par exemple ici chico appuie sur un bouton poussoir physique de son mur, sur sa page web l’état de son ampoule est toujours  "off", moi l'arduino aura notifier à la page que la lampe vient de passer à "on" en temps réel sans intervention de ma part.
On peux même imaginer faire des macros à l'infini à partir de la page web sans que ça prenne un gramme de place dans l'arduino.
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 20, 2011, 11:37 pm
Je continue la discussion sur ton autre post.

Chicotore : As tu résolu ton histoire de LM35 ? J'ai lu un message que je ne retrouve pas : si tu as d'autres analog utilisées, les acquisitions peuvent être faussées par le multiplexeur si on les enchaine trop vite. Pour contourner le problème, il y avait cette proposition
Code: [Select]

analogRead( pin );   // Le mux selectionne la bonne pin
delay(5);                // Le courant s'établit
valeur = analogRead (pin );  // La mesure peut-être faite
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: osaka on Sep 21, 2011, 03:12 pm
Je sais pas si c'est vraiment utile mais j'ai fais en sorte qu'à chaque démarrage de l'arduino la valeur du cookie sera un nombre aléatoire donc différent seul l'arduino connaîtra sa valeur donc.
On aurais pus le faire pour chaque session mais ça commencerait à devenir un peux lourd pour l'arduino ?

Code: [Select]

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {  0x90, 0xA2, 0xDA, 0x00, 0x6D, 0x86 };
byte ip[] = { 192,168,1,109 };

Server server(80);

boolean cookie = false;
boolean password = false;
byte action = 1;
String randCook;

void setup()
{
  Ethernet.begin(mac,ip);
  server.begin();
  randomSeed(analogRead(0));
 
  randCook = random(10000000);
  delay(1000);
 
}

void loop()
{
  Client client = server.available();
 
    if (client.connected())
    {
      if (client.available())
      {
          analyse_req(client);
      }
     
      client.println("HTTP/1.1 200 OK");
      client.println("Content-Type: text/html\n\n");
      client.println("<html>");
     
      if((!password && !cookie) || !action)
      {
        client.println("<head>");
        client.println("<script type=\"text/javascript\">function delCookie(){ document.cookie=\"arduino=''\";}</script>");
        client.println("</head>");
        client.println("<body onload=\"delCookie();\">");
        client.println("<form method=\"post\" action=\"http://only.homedns.org/\">");
        client.println("<input type=\"text\" name=\"login\" />");
        client.println("<input type=\"password\" name=\"pass\" />");
        client.println("<input type=\"submit\" value=\"Envoyer\" />");
        client.println("</form>");
       
        action = 1;
       
      }
      else if(password && !cookie)
      {
        client.println("<head>");
        client.print("<script type=\"text/javascript\">function setCookie(){var date = new Date();date.setTime(date.getTime()+(3600*1000));var expires=\"; expires=\"+date.toGMTString();document.cookie=\"arduino=");
        client.print(randCook);
        client.print("\"+expires+\"path=/\";}</script>");
        client.println("</head>");
        client.println("<body onload=\"setCookie();\">");
        client.println("test<form method=\"get\" action=\"http://only.homedns.org/\">");
        client.println("<input type=\"submit\" value=\"refresh\" /></form>");
        client.println("<form method=\"post\" action=\"http://only.homedns.org/\">");
        client.println("<input type=\"hidden\" name=\"act\" value=\"cls\" />");
        client.println("<input type=\"submit\" value=\"close\" /></form>");
      }
      else if(cookie)
      {
        client.println("<head>");
        client.println("</head>");
        client.println("<body>");
        client.println("test<form method=\"get\" action=\"http://only.homedns.org/\">");
        client.println("<input type=\"submit\" value=\"refresh\" /></form>");
        client.println("<form method=\"post\" action=\"http://only.homedns.org/\">");
        client.println("<input type=\"hidden\" name=\"act\" value=\"cls\" />");
        client.println("<input type=\"submit\" value=\"close\" /></form>");
       
      }
     
      client.println("</body>");
      client.println("</html>");
      client.println("");
     
      cookie = false;
      password = false;
      client.stop();
      }
     
}


void analyse_req(Client client)
{
    int av = client.available();
    if(av != -1)
    {
      String req = "";
      char c = 0;
     
      while(c != -1)
      {
        c = (char)client.read();
        req+=c;
        if(c == '\n' || c == -1)
        {
          if(req.indexOf("Cookie:") != -1)
          {
            if(req.indexOf("arduino") != -1 && req.indexOf(randCook) != -1)
            {
                cookie = true;
            }
          }
          else if(req.indexOf("login") != -1 && req.indexOf("admin") != -1 && req.substring(17, 25).equals("12345678"))
          {
            password = true;
          }
          else if(req.indexOf("act") != -1)
          {
            if(req.indexOf("cls") != -1)
            {
              action = 0;
            }
          }
         
          req="";
        }
      }
    }
}
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 21, 2011, 09:05 pm
ça y est shield enfin reçu, et surprise ça marche directement !!

Du coup, remontée d'infos de 2 capteurs, commande d'une sortie ça rend plutôt bien :D
Maintenant il ne reste plus qu'à attendre de recevoir les relais pour remplacer la led...

(http://img713.imageshack.us/img713/8207/photoih.th.png) (http://imageshack.us/photo/my-images/713/photoih.png/)
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 23, 2011, 04:32 pm
Tu as reçu un shield en ENC28J60 ou un "original" ? Elle est sympas ton interface, bien mieux que la mienne  :D
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: Oliv4945 on Sep 23, 2011, 06:50 pm

Tu as reçu un shield en ENC28J60 ou un "original" ? Elle est sympas ton interface, bien mieux que la mienne  :D

J'ai commandé un shield à base de Wiznet, l'Arduino aura déjà bien assez de choses à faire  :smiley-roll:

Pour l'interface je clarifie encore un peu mon code et je poste ça si tu veux. Mais j'aime bien ton interface aussi, c'est juste que j'ai moins je choses à y mettre pour le moment
Title: Re: Domo'Duino, la domotique par Arduino c'est fait et ça marche :D
Post by: chicotore on Sep 23, 2011, 07:03 pm
ok ok ^^

De mon coté je n'est pas trop le temps de bosser sur la mise en place d'un login+MDP ( et oui c'est la rentrée grrrr ) mais j'ai vue que ça avais bien déblatéré sur ce sujet ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Sep 25, 2011, 01:19 pm
Bonjour a tous,

Voila mes petits modules 2.4ghz à 2€ pièces viennent d'arriver ! Il s'agit de Nrf24l01 que l'on trouve un peut partout sur ebay, et oui encore du made in China  :smiley-mr-green:

(http://iteadstudio.com/wp-content/uploads/2010/05/20281.jpg)

Bon je vais pas vous cacher que j'ai essayer de jouer avec 5 minutes et pour le moment je n'y comprend rien ^^ ( on ne change pas les bonnes habitudes :/ ) !
J'ai essayer cet exemple => http://iteadstudio.com/application-note/nrf24l01-wireless-module-with-arduino/

Donc je reçoit bien la séquences de "bits" ( avec quelques ratés d'ailleurs ), donc l'exemple fonctionne mais après j'ai essayer de n'envoyer que un "salut" ( Serial.Println("salut")) et la bah rien ^^
Enfin a mon avis ça va pas être de la tarte a comprendre cette petite chose !

Par contre pour en revenir aux modules, ça semble de bonne qualité et c'est vraiment très petit ( 2.5 cm x 1.5 cm ) !
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Sep 25, 2011, 03:17 pm

Bon je vais pas vous cacher que j'ai essayer de jouer avec 5 minutes et pour le moment je n'y comprend rien ^^ ( on ne change pas les bonnes habitudes :/ ) !


Pendez le haut et court  ]:D :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Sep 25, 2011, 04:33 pm
Salut !

J'ai continué sur l'authentification, j'ai regardé ce qu'à fait Osaka mais je n'avais pas trop envie de gérer un cookie, du coup je suis repartit sur la piste que j'avais mis, ça donne :
Code: [Select]

           if ( authentified == 0 ) {
             networkClient.println( "HTTP/1.1 401 OK");
             networkClient.println( "WWW-Authenticate: Basic realm=\"192.168.0.9\"" );
             networkClient.println( "Date: Wed, 07 Aug 1996 11:15:43 GMT" );
             networkClient.println( "Server: Webserv test" );
             networkClient.println( "Content-Length: 0" );
             networkClient.println( "Content-Type: text/html" );
             networkClient.println();
           } else {
             // send a standard http response header
             networkClient.println("HTTP/1.0 200 OK");
             networkClient.println("Content-Type: text/html");
             networkClient.println();
             // Reste du code…
         }
         authentified = 0;

Et dans la partie qui est effectuée à chaque ligne reçue, receiveBuffer étant ma ligne
Code: [Select]

if (  strstr( receiveBuffer, "Authorization: Basic dGVzdDp0ZXN0") != NULL ) authentified = 1;



Chicotore, dans la page que tu mets en exemple ce n'est pas Serial.println() pour envoyer des données par les modules mais SPI_Write_Buf()
Le mot de passe doit être login:mdp encodé en base 64. Dans mon cas c'est test:test
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Sep 25, 2011, 07:02 pm
Quote
Pendez le haut et court   


Merci  =(
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Sep 25, 2011, 09:20 pm

Quote
Pendez le haut et court   


Merci  =(


On va dire faute avoué à moitié pardonné  :P

Pour oliv en fait je n'avais pas trop adhéré à cette solution quand j'ai vu que l'authentification http n'était pas très sécurisée à moins de passé par https (impossible de le faire supporté par l'arduino) :~ comme le code est transmis en clair dans les transactions entre le client et le serveur.
Pour les cookies c'est pareil mais je pensais donné une valeur aléatoire au cookies entre chaque authentifications et sessions et la possibilité de fermé la session quand on veux :smiley-roll-sweat: .
Je suis loin d'être une expert niveau web donc je sais pas trop ce qui est le mieux  à faire :~
C'est aussi un peux pour toutes ses raisons que j'évite de passé par l'arduino pour l'hébergement web compte tenu de ses limites dans le domaine.  :smiley-fat:

;)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Sep 25, 2011, 09:38 pm
Effectivement, mais bon je me dit que si quelqu'un m'en veux assez pour venir "écouter" ma connexion, ce n'est pas un cookie qui l'arrêtera.
En revanche avec ton système de websocket tu dois pouvoir faire quelque chose de plus sûr, en utilisant uniquement ton serveur à se connecter à l'Arduino et mettre du SSL sur le serveur ;)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Sep 25, 2011, 10:19 pm

Effectivement, mais bon je me dit que si quelqu'un m'en veux assez pour venir "écouter" ma connexion, ce n'est pas un cookie qui l'arrêtera.


D'un côté c'est vrai qu'on a beau faire le maximum, il y aura toujours un petit malin pour trouver une faille ou autre, on ne peux que limité les possibilités.  :~


En revanche avec ton système de websocket tu dois pouvoir faire quelque chose de plus sûr, en utilisant uniquement ton serveur à se connecter à l'Arduino et mettre du SSL sur le serveur ;)


En effet c'est une des principales raison de mon choix.
Sinon pour celui qui ne veut pas utilisé les websocket, chesnel avait proposé une solution intéressante presque similaire (page délocalisées) via ajax http://arduino.cc/forum/index.php/topic,68808.msg509397.html#msg509397
D'ailleurs je pourrais très facilement adapté mon projet vers une solution ajax similaire vu que ma librairie (protocole) est indépendante du moyen de transport.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Sep 26, 2011, 07:41 am


Effectivement, mais bon je me dit que si quelqu'un m'en veux assez pour venir "écouter" ma connexion, ce n'est pas un cookie qui l'arrêtera.


D'un côté c'est vrai qu'on a beau faire le maximum, il y aura toujours un petit malin pour trouver une faille ou autre, on ne peux que limité les possibilités.  :~

Oui c'est sur qu'il y a toujours des petits malins mais ce n'est pas ce que je voulais dire : sécuriser une page disponible au tout venant OK, mais après pour lire l'identifiant en base 64 il faut venir écouter ma connexion. Si quelqu'un en vient là franchement je veux bien qu'il allume 3 lampes chez moi ;)



En revanche avec ton système de websocket tu dois pouvoir faire quelque chose de plus sûr, en utilisant uniquement ton serveur à se connecter à l'Arduino et mettre du SSL sur le serveur ;)


En effet c'est une des principales raison de mon choix.
Sinon pour celui qui ne veut pas utilisé les websocket, chesnel avait proposé une solution intéressante presque similaire (page délocalisées) via ajax http://arduino.cc/forum/index.php/topic,68808.msg509397.html#msg509397
D'ailleurs je pourrais très facilement adapté mon projet vers une solution ajax similaire vu que ma librairie (protocole) est indépendante du moyen de transport.


Je regarderais ça à l'occaz !

Edit de Jean-François : essayez d'être un peu attentif avec les balises "Quote" et utilisez l'option "modify" si il y a un problème  ;)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Sep 26, 2011, 06:48 pm
Pwaa ça me semble bien complexe toutes vos histoires pour mettre en place un MDP  :smiley-eek:  :D

Il n'y aurait pas une façons toutes simple de mettre juste un MDP dans l'arduino au niveau du void-loop ? juste avant l'initialisation de la page web ?

PS: j'avance un petit peu sur mes modules 2.4ghz mais c'est pas très "intuitif" comme programmes
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Sep 26, 2011, 06:56 pm

Pwaa ça me semble bien complexe toutes vos histoires pour mettre en place un MDP  :smiley-eek:  :D

Il n'y aurait pas une façons toutes simple de mettre juste un MDP dans l'arduino au niveau du void-loop ? juste avant l'initialisation de la page web ?

PS: j'avance un petit peu sur mes modules 2.4ghz mais c'est pas très "intuitif" comme programmes

C'est ce que j'ai fait ;)

Courage pour les modules, je te laisse débroussailler et après je les achète  :D
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Sep 26, 2011, 07:26 pm
Quote
Code:
           if ( authentified == 0 ) {
              networkClient.println( "HTTP/1.1 401 OK");
              networkClient.println( "WWW-Authenticate: Basic realm=\"192.168.0.9\"" );
              networkClient.println( "Date: Wed, 07 Aug 1996 11:15:43 GMT" );
              networkClient.println( "Server: Webserv test" );
              networkClient.println( "Content-Length: 0" );
              networkClient.println( "Content-Type: text/html" );
              networkClient.println();
            } else {
              // send a standard http response header
              networkClient.println("HTTP/1.0 200 OK");
              networkClient.println("Content-Type: text/html");
              networkClient.println();
              // Reste du code…
          }
          authentified = 0;
Et dans la partie qui est effectuée à chaque ligne reçue, receiveBuffer étant ma ligne
Code:
if (  strstr( receiveBuffer, "Authorization: Basic dGVzdDp0ZXN0") != NULL ) authentified = 1;


C'est ça ton identification Oliv ? c'est pour le vrai module ethernet aussi ? pas pour la version low-cost a base de ENC28J60 ? ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Sep 26, 2011, 07:40 pm
Effectivement c'est pour une puce W5100, mais tu dois pouvoir l'adapter facilement en remplaçant "networkClient.println()" par "plen=es.ES_fill_tcp_data_p(buf,plen,PSTR())" non ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Sep 27, 2011, 11:31 am
Il faudrait une fois remettre ton dernier code fonctionnel Chico, ça sera plus facile pour t'aiguiller.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Sep 27, 2011, 07:32 pm
Je vais essayer de look ce week-end ton code Oliv  ;) merci

Mon code => http://www.megaupload.com/?d=HF8C2XX2

Le pin20 c'est un test "d'automatisme", c'est a dire pour plus tard par exemple un mode vacance ou tous les volets et lumières ce coupent ;), donc ne faites pas gaffes à ça ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 04, 2011, 07:08 pm
Plus personne n'est actif sur ce post ? Tous le monde est en pause ?  :)
Par contre moi c'est clair qu'avec cette foutu reprise des cours je n'avance plus trop sur le sujet :/
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 07, 2011, 07:05 pm
Bon j'essaye un peut de dégrossir la partie "sécurité" de l'interface, c'est a dire mettre en place un MDP a la connection sur le DNS !

J'ai donc testé

Quote


Sinon ce que tu peux faire aussi c'est mette un paramètre "pass" dans chaque lien genre.

Code:
?pge=05&pass=123456
?pin=06&val=00&pass=123456

Englobé tout la partie web par un if(pass), donc même au démarrage il faudra intégré le paramètre pass.
Donc http://blabla.dyndns.com/?pass=123456 pour le premier accès à l'arduino, sans le paramètre pass l'arduino ne retourne rien.


Je vois bien le "?pass=123456" mais aucune demande de mot de passe

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 09, 2011, 08:08 pm

Bon j'essaye un peut de dégrossir la partie "sécurité" de l'interface, c'est a dire mettre en place un MDP a la connection sur le DNS !

J'ai donc testé

Je vois bien le "?pass=123456" mais aucune demande de mot de passe

merci

Je ne comprends pas ton problème ?


De mon côté déplacement à l'étranger, donc je n'ai pas pu avancer.
Avant de partir j'ai reçu un relais, ça marche, pas de perturbations sur la sonde de température comme toi. Par contre un capteur a laché sans savoir pour quoi… je ne sais pas si ça a une faible durée de vie ou si c'est le fait de couper/remettre l'alim sans arrêt qu'il n'a pas aimé.

Tu fais quoi comme études ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 09, 2011, 08:45 pm
Quote
Je ne comprends pas ton problème ?


Et bah en fait je n'est pas de demande de mot de passe quand j'accède a la page. Avec ou sans "?pass=123456" c'est la même chose, aucune demande d'authentification

Quote
Avant de partir j'ai reçu un relais, ça marche, pas de perturbations sur la sonde de température comme toi. Par contre un capteur a laché sans savoir pour quoi… je ne sais pas si ça a une faible durée de vie ou si c'est le fait de couper/remettre l'alim sans arrêt qu'il n'a pas aimé.


Peut-être que mes relais sont moins isoler que les tient, moi c'est du made in china  :*

Mais je me suit embêté a commander des relay, des transistors ... a part alors que quand on voit le prix des platines relais toutes faites autant ne pas s'embêter ! quand je vois 20€ fdpin la platine toute faite de 16 relais ...

Quote
Tu fais quoi comme études ?


Euh licence ( bac+3) en conduite de travaux, "chef" dans le bâtiment en gros ^^ et oui rien a voir avec la programmation et l'électronique ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 09, 2011, 09:26 pm

Bon j'essaye un peut de dégrossir la partie "sécurité" de l'interface, c'est a dire mettre en place un MDP a la connection sur le DNS !

J'ai donc testé

Quote


Sinon ce que tu peux faire aussi c'est mette un paramètre "pass" dans chaque lien genre.

Code:
?pge=05&pass=123456
?pin=06&val=00&pass=123456

Englobé tout la partie web par un if(pass), donc même au démarrage il faudra intégré le paramètre pass.
Donc http://blabla.dyndns.com/?pass=123456 pour le premier accès à l'arduino, sans le paramètre pass l'arduino ne retourne rien.


Je vois bien le "?pass=123456" mais aucune demande de mot de passe

merci


En fait c'est normal là c'était juste mon exemple avec transmission de paramètres donc il fallait créer la page d'authentification , qui est un peux foireux vu que une fois la page ouverte elle est ouvert à tous.

Quote

Code:
           if ( authentified == 0 ) {
              networkClient.println( "HTTP/1.1 401 OK");
              networkClient.println( "WWW-Authenticate: Basic realm=\"192.168.0.9\"" );
              networkClient.println( "Date: Wed, 07 Aug 1996 11:15:43 GMT" );
              networkClient.println( "Server: Webserv test" );
              networkClient.println( "Content-Length: 0" );
              networkClient.println( "Content-Type: text/html" );
              networkClient.println();
            } else {
              // send a standard http response header
              networkClient.println("HTTP/1.0 200 OK");
              networkClient.println("Content-Type: text/html");
              networkClient.println();
              // Reste du code…
          }
          authentified = 0;
Et dans la partie qui est effectuée à chaque ligne reçue, receiveBuffer étant ma ligne
Code:
if (  strstr( receiveBuffer, "Authorization: Basic dGVzdDp0ZXN0") != NULL ) authentified = 1;


Avec la méthode d'Oliv le code dans le premier if sert à l'authentification, ensuite tu peux mettre ton code normal dans le else qui suit une fois authentifié (auhentified = 1).
le "if (  strstr( receiveBuffer, "Authorization: Basic dGVzdDp0ZXN0") != NULL ) authentified = 1;" est a mettre dans "analalyse_req()" pour toi.

maintenant comme Oliv a sont propre mot de passe et login dont le résultat est "dGVzdDp0ZXN0" il va falloir le modifier avec ton propre login et pass.
Tu peux l'obtenir en faisant un premier test, tu entres tes propre données et tu affiche le résultat de la requête via "println()" et tu récupère le résultat de la ligne  "Authorization: Basic " .

Normalement avec ça tu devrais pouvoir y arrivé.
http://only.dommel.be/docs/domo_ok_auth.pde
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 10, 2011, 06:26 pm
Voila le résultat avec ton code

(http://i45.servimg.com/u/f45/11/05/63/75/ard11.jpg)

Cela vient peut-être du fait que mon shield ethernet c'est un ENC28J60 non ?

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 10, 2011, 07:18 pm
Vu que c'est à partir de ton code ca devrait pas venir de là.
Ai fais une erreur dans le premier if.
correction:

Code: [Select]
         
         plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.1 401 OK"));
         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("WWW-Authenticate: Basic realm=\""));
         plen=es.ES_fill_tcp_data(buf,plen,baseurl);
         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\""));
         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Date: Wed, 07 Aug 1996 11:15:43 GMT"));
         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Server: Webserv test"));
         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Length: 0"));
         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Type: text/html"));
         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" "));


Par contre vu que le serveur n'a l'air de rien envoyer je sais pas si ça peux venir de là, difficile de savoir comme je n'ai pas ce shield ?
Faut faire des tests de débug avec la sortie du port série, test si le code rentre bien dans le if, regarde le résultat de buf, ...
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 10, 2011, 07:30 pm
Avec cette correction j'ai une page toute blanche cette fois !

Quote
Faut faire des tests de débug avec la sortie du port série, test si le code rentre bien dans le if, regarde le résultat de buf, ...


Qu'entend tu par la ? comment faire ce test ?

C'est quand même bizarre que l'arduino n'intègre pas de base un truc pour mettre un mdp :/

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 10, 2011, 07:39 pm
C'est simplement débugger ton code, c'est faire des testes pour contrôler certaine portion de code, savoir ce qu'il se passe à tel moment, si tel valeur est bien retournée , ...
Par exemple si tu veux savoir si à tel moment c'est soit ton if ou soit ton else tu fera :

Code: [Select]

if()
{
   Serial.println("c'est le if");
}
else
{
   Serial.prinln("c'est le esle");
}


avec un for par exemple

Code: [Select]

for(int i = 0; i < 10; i++)
{
    Serial.println(i);
}


Donc ici pour toi tu vas tester si a l'appel de la page il passe bien dans le "if (authentified == 0) ", ...
Différent test dans les différente action du code pour voir ou ça bloque.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 10, 2011, 07:48 pm
Voila ce que j'ai fait

Code: [Select]
uint16_t print_webpage(uint8_t *buf)
{
        uint16_t plen;
        if (authentified == 0)
        {
         
   Serial.println("c'est le if");

          plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.1 401 OK"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("WWW-Authenticate: Basic realm=\""));
          plen=es.ES_fill_tcp_data(buf,plen,baseurl);
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\""));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Date: Wed, 07 Aug 1996 11:15:43 GMT"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Server: Webserv test"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Length: 0"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Type: text/html"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(" "));
        }
        else
        {
         
   Serial.println("c'est le else");

          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/home11.png\"  ></a></center>"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br><center><table border=3 bgcolor=\"#f7f7f7\" width=\"1000\"><tr><td width=50% align=center></center>"));
         
          switch(page)


Et voila le résultat dans le serial moniteur

Code: [Select]
c'est le if
favicon.ico HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


c'est le if
favicon.ico HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


c'est le if


Merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 10, 2011, 08:52 pm
Donc on entre bien de le if.

test ceci pour voir ce que buf contient en fin de if.

Code: [Select]

if (authentified == 0)
        {
          Serial.println("auth");
          plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.1 401 OK\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("WWW-Authenticate: Basic realm=\""));
          plen=es.ES_fill_tcp_data(buf,plen,baseurl);
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\"\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Date: Wed, 07 Aug 1996 11:15:43 GMT\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Server: Webserv test\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Length: 0\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Type: text/html\n\n"));
          Serial.println(plen);
          for(int i = 0; i < plen+1; i++)
          {
            Serial.print((char)buf[i]);
          }
        }


faut vraiment regarder ce qu'il ce passe à chaque étape pour voir où ça peux bloqué, c'est le principe du débugage .
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 11, 2011, 05:30 pm
Alors j'ai refait le test avec la partie que tu as posté et voila ce que j'obtient

(http://i45.servimg.com/u/f45/11/05/63/75/ard12.jpg)

Donc a priori ça fonctionne par contre, il est demandé un LOGIN et un MDP mais dans le code j'ai ceci

Code: [Select]
  if (strstr( str, "Authorization: Basic dGVzdDp0ZXN0") != NULL) authentified = 1;

Donc il n'y a qu'un seul truc, c'est ke login ou le mdp ? le "dGVzdDp0ZXN0" c'est un langage codé non ?

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 11, 2011, 07:31 pm
Oui c'est ce que je disais dans un précédent message, c'est encodé en base 64

Pour encoder ton mot de passe il faut mettre nomUtilisateur:motDePasse, tu trouveras un encodeur ici : http://www.motobit.com/util/base64-decoder-encoder.asp
Dans l'exemple c'est test:test


Sinon pour le relais effectivement j'ai commandé une carte sur ebay, à 2€ les 2 relais je n'avais pas trop envie de m'embêter ;)
C'est une carte à base d'optocoupleur, ça éviter peut-être aux perturbations de remonter...
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 11, 2011, 08:27 pm

maintenant comme Oliv a sont propre mot de passe et login dont le résultat est "dGVzdDp0ZXN0" il va falloir le modifier avec ton propre login et pass.
Tu peux l'obtenir en faisant un premier test, tu entres tes propre données et tu affiche le résultat de la requête via "println()" et tu récupère le résultat de la ligne  "Authorization: Basic " .


C'est de ça dont je te parlais, en toute logique il suffit de faire un test avec le login et pass que tu désires et en sortie console du port série tu les retrouvent codé dans l'entête http, comme quand tu as fais le test plus haut avec le if il y a un Println() au début de analyse_req().
Code: [Select]

c'est le if
favicon.ico HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


donc tu devras voir "Authorization: Basic dGVzdDp0ZXN0" mais avec ta propre authentification.
Ensuite tu modifie ceci "if (  strstr( receiveBuffer, "Authorization: Basic dGVzdDp0ZXN0") != NULL ) authentified = 1;" dans ton code, ligne 196 normalement.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 11, 2011, 08:45 pm
Quote
C'est une carte à base d'optocoupleur, ça éviter peut-être aux perturbations de remonter...


oui toutes les cartes relais ebay sont a optocoupleur il me semble  ;) Je vais finaliser mon interface avec la sécurité et après je vais passer commande pour une grosse carte relais je pense ! j'ai bien 5 relais qui traîne mais le fait de tous souder ça donne un rendu trop bricolage a mon gout !

Pour en revenir a la sécurité, j'ai bien la fenêtre de login+mdp qui apparait mais en fait impossible de me connecter, c'est toujours cette fenêtre qui revient !
Voila ce que j'ai dans le serial monitor

(http://i45.servimg.com/u/f45/11/05/63/75/ard13.jpg)

Ca ne serait pas du au fait que l'authentification est dans le "void loop" ?

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 11, 2011, 08:55 pm
Tu peux remettre cette partie ci sans les sortie série, plus besoin.
Code: [Select]

if (authentified == 0)
        {
          plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.1 401 OK\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("WWW-Authenticate: Basic realm=\""));
          plen=es.ES_fill_tcp_data(buf,plen,baseurl);
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\"\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Date: Wed, 07 Aug 1996 11:15:43 GMT\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Server: Webserv test\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Length: 0\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Type: text/html\n\n"));
        }


Par contre tu n'as pas un Serial.println(str); vers la ligne 194 en début de la fonction analyse_req qui devrait affiché la requête http du client ?

Code: [Select]

void analyse_req(char *str)
{
  //Sortie console pour trouver ton propre code d'authentification.
  Serial.println(str);
  //authentification, modifier dGVzdDp0ZXN0 pour ta propre authentification
  if (strstr( str, "Authorization: Basic dGVzdDp0ZXN0") != NULL) authentified = 1;
.
.
.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: vincelge on Oct 12, 2011, 12:29 am
je suis (silencieusement) vos essais de shields ethernet car ça m'intéresse au plus haut point  :smiley-mr-green:

J'aurais, pour de sombres raisons pécuniaires, été tenté par un shield à base de ENC28J60, mais j'ai lu cette remarque de Oliv4945 ici (http://arduino.cc/forum/index.php/topic,66139.msg549706.html#msg549706), et que je recolle là:


Tu as reçu un shield en ENC28J60 ou un "original" ? Elle est sympas ton interface, bien mieux que la mienne  :D

J'ai commandé un shield à base de Wiznet, l'Arduino aura déjà bien assez de choses à faire  :smiley-roll:

...

je comprends donc qu'il y a des écarts fonctionnels entre un shield à base de ENC28J60 ou de Wiznet.
Quels sont-ils ?

Par ailleurs, en lisant les essais que vous avez faits pour mettre en oeuvre le ENC28J60, je me dis qu'un petit récap ne serait pas du luxe pour les gens comme moi, franchement newbie dans le domaine. Prévoyez-vous de faire un petit résumé ?  :smiley-red:
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 12, 2011, 01:03 pm
http://arduino.cc/forum/index.php/topic,71750.15.html


Quote
pourquoi serai t'elle différente qu'avec le shield ethernet officiel ?

La puce W5100 des shields 'officiels' comporte en interne la pile TCP/IP
La puce ENC28J60 (moins couteuse) ne le fait pas, d'ou la necessité de faire prendre en charge ces fonctions par le microcontroleur de la carte Arduino (librairie spéciale et code un peu plus indigeste !!)
La différence pour l'utisateur se voit en mettant côte à côte les sources de deux applications identiques utilisant les 2 types de shields.
C'est un choix  : les € gagnés sur le shield se paient par un code source un peu plus long et moins lisible.


Ici il faut également compté que peux de monde on cet ENC28J60 ici, donc même avec la meilleur volonté il n'y aura pas grand foule pour avoir de l'aide et ironiquement ceux qui l'ont sont débutant.
Rien qu'ici pour aider chico c'est pas facile, un problème résolu en 5 min peux prendre 1 semaine (faut dire que je suis souvent pas claire dans mes explications) parce qu'on marche en aveugle , je ne peux pas tester moi même, ...
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: vincelge on Oct 12, 2011, 05:23 pm
Merci pour cette précision.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 12, 2011, 08:27 pm
Quote
Par ailleurs, en lisant les essais que vous avez faits pour mettre en oeuvre le ENC28J60, je me dis qu'un petit récap ne serait pas du luxe pour les gens comme moi, franchement newbie dans le domaine. Prévoyez-vous de faire un petit résumé ?  


Dès que la partie sécurité est au point je fait un résumé complet ici ( et sur mon blog ) afin de recentrer un peut toutes les infos  ;)
Car après je me penche sur la mise en place d'une liaison sans fil 2.4ghz et la mon interface sera finit en "codage", il ne restera plus que des finitions de "design"

Quote
Ici il faut également compté que peux de monde on cet ENC28J60 ici, donc même avec la meilleur volonté il n'y aura pas grand foule pour avoir de l'aide et ironiquement ceux qui l'ont sont débutant.
Rien qu'ici pour aider chico c'est pas facile, un problème résolu en 5 min peux prendre 1 semaine (faut dire que je suis souvent pas claire dans mes explications) parce qu'on marche en aveugle , je ne peux pas tester moi même, ...


C'est clair que le codage de ce shield est super chaud pour un débutant comme moi. Heureusement que OSAKA et les autres sont la car je n'en serait pas à ce point ! ils ont quasiment fait 80 voir 90% du boulot et je l'est en remercie beaucoup !

Bon pour en revenir a la sécurité, ce qui fonctionnait hier ne fonctionne plus ! j'ai de nouveau le message comme quoi le serveur ne répond plus alors que je n'est rien touché depuis hier  :smiley-eek: ca c'est vraiment le genre de chose qui me soule au plus haut point !

EDIT: bon bah en fait c'est bien plus grave que ça, je croit que c'est mon ethernet shield qui est mort, même mon code de base sans sécurité ne fonctionne plus -_-

EDIT2: bon ça remarche, il a fallut que je change l'ip de mon ethernet shield, bizare

Quote
Par contre tu n'as pas un Serial.println(str); vers la ligne 194 en début de la fonction analyse_req qui devrait affiché la requête http du client ?


J'ai bien ça mais il n'apparaît pas dans le serial moniteur :/


merci

Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 12, 2011, 10:38 pm

EDIT: bon bah en fait c'est bien plus grave que ça, je croit que c'est mon ethernet shield qui est mort, même mon code de base sans sécurité ne fonctionne plus -_-
EDIT2: bon ça remarche, il a fallut que je change l'ip de mon ethernet shield, bizare

ça m'a fait pareil hier, mais avec un W5100. Pas compris  :smiley-eek:

Quote
Par contre tu n'as pas un Serial.println(str); vers la ligne 194 en début de la fonction analyse_req qui devrait affiché la requête http du client ?

J'ai bien ça mais il n'apparaît pas dans le serial moniteur :/

merci

Je n'ai pas ton code sous les yeux, il est où ?  :smiley-red:
Mais dans ce cas es-tu sur que tu passes bien sur l'instruction Serial.println(str) ? Essaie de remonter à la condition précédente, et mettre un println() avant la condition, un après pour voir si tu la franchis bien.

Pour les comparatifs shield W5100 ou ENC28J60, la documentation est bien plus grande pour le W5100; la communauté (française) aussi je pense. Et le fait de ne pas avoir a gérer la pile tcp/ip permet aussi de gagner en temps d'execution de code, pas seulement en lisibilité/place mémoire. Regardes dans la partie "home automation" il y a régulièrement des articles
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 12, 2011, 11:00 pm
Pourtant ça marchait apparemment lors du test précédent avec l'histoire du if.

Code: [Select]

c'est le if
favicon.ico HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


La seule instruction précédente c'est l'appel de la fonction même dans le loop "analyse_req((char *)&(buf[dat_p+5]));", donc maintenant ça vient peut être de tout le contrôle et chipotage du programme  avant récupération de la requête.

Faudrait une fois virer ce qui me semble inutile et ne me parait pas indispensable vu que ça vient du code d'exemple, genre

Code: [Select]

       // check if ip packets are for us:
       if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0)
       {
          return;
       }

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


Tu peux peut être mettre ceci à la place pour la sortie serie ligne 125 pour affiche ce qui entre dans ton shield.

Code: [Select]

 if(plen!=0)
 {
   Serial.println(buf);


http://only.dommel.be/docs/domo_ok_auth.pde la dernière version du code que j'ai
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 13, 2011, 07:21 pm
Quote
Je n'ai pas ton code sous les yeux, il est où ? 
Mais dans ce cas es-tu sur que tu passes bien sur l'instruction Serial.println(str) ? Essaie de remonter à la condition précédente, et mettre un println() avant la condition, un après pour voir si tu la franchis bien.


Il est placé comme tu l'a marqué !

Voila mon code tel qu'il est aujourd'hui avec la sécurité => http://www.megaupload.com/?d=8BYWJOAF

Quote
Tu peux peut être mettre ceci à la place pour la sortie serie ligne 125 pour affiche ce qui entre dans ton shield.

Code: [Select]
Code:
if(plen!=0)
  {
    Serial.println(buf);



Impossible de faire ça, le compilateur détecte une erreur :/


Merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 13, 2011, 08:06 pm


Code: [Select]

if(plen!=0)
  {
    Serial.println((char*)buf);   



Impossible de faire ça, le compilateur détecte une erreur :/

Merci


Arf vi j'ai oublier le cast.

Code: [Select]

Serial.println((char*)buf);   
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 14, 2011, 06:36 pm
Voila ce que j'ai dans le serial moniteur quand j'accède a ma page et que je rentre le MDP

Code: [Select]
ÿÿÿÿÿÿ
ÿÿÿÿÿÿ
TUX
TUX
TUX
TUX
TUX
TUX
TUX
TUX
TUX
TUX
TUX
TUX
TUX
TUX


C'est pas super utile a mon avis  :smiley-eek:
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 14, 2011, 07:36 pm
lol en effet on ira pas bien loin avec ça ...

Essaie de le mettre plus bas juste avant: analyse_req((char *)&(buf[dat_p+5]));

Enfin d'un côté je comprend pas pourquoi ça ne passe pas juste dans la fonction analyse_req ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 14, 2011, 07:44 pm
rien a faire je n'est rien dans le serial monitor en faisant ça

Code: [Select]
//analyse de buf (utilisation de la class String (chaine da caractÃÆ'ƒÆ’ÃÆ'‚¨re) pour facilitÃÆ'ƒÆ’ÃÆ'‚© les choses)
void analyse_req(char *str)
{
 Serial.println();  
 //Sortie console pour trouver ton propre code d'authentification.
 //authentification, modifier dGVzdDp0ZXN0 pour ta propre authentification
 if (strstr( str, "Authorization: Basic dGVzdDp0ZXN0") != NULL) authentified = 1;
 
 String sstr = str;


ou

Code: [Select]
//analyse de buf (utilisation de la class String (chaine da caractÃÆ'ƒÆ’ÃÆ'‚¨re) pour facilitÃÆ'ƒÆ’ÃÆ'‚© les choses)
void analyse_req(char *str)
{
 Serial.println((char*)buf);  
 //Sortie console pour trouver ton propre code d'authentification.
 //authentification, modifier dGVzdDp0ZXN0 pour ta propre authentification
 if (strstr( str, "Authorization: Basic dGVzdDp0ZXN0") != NULL) authentified = 1;
 
 String sstr = str;


ou

Code: [Select]
       if (strncmp("GET ",(char *)&(buf[dat_p]),4)!=0)
        {
          Serial.println((char*)buf); 
          // 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;
        }
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 14, 2011, 07:56 pm
Je comprend pas il devrait y avoir quelque chose au minimum comme tu arrive à atteindre la page d'authentification  :(
Essaie ceci mais bon ça revient au même normalement.

Code: [Select]

String sstr = str;
Serial.println(sstr);


ligne 195 normalement.

Sinon peut être passé par ici http://www.motobit.com/util/base64-decoder-encoder.asp comme suggéré par Oliv
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 14, 2011, 08:02 pm
Rien du tous non plus dans le serial monitor avec ça  :smiley-eek: c'est a rien y comprendre :/

Quote
Sinon peut être passé par ici http://www.motobit.com/util/base64-decoder-encoder.asp comme suggéré par Oliv


J'ai deja changer le mdp en faisant => login:mdp
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 14, 2011, 08:30 pm

Voila ce que j'ai dans le serial moniteur quand j'accède a ma page et que je rentre le MDP

Je viens de jeter un oeil au code, effectivement c'est vite le bordel avec cette puce  :smiley-eek:
Code: [Select]
ÿÿÿÿÿÿ
ÿÿÿÿÿÿ
TUX
...
TUX
TUX


C'est pas super utile a mon avis  :smiley-eek:

C'est ce que tu obtiens quand tu mets le code ci-dessous ?
Code: [Select]

if(plen!=0)
  {
    Serial.println((char*)buf); 

Ou tu obtiens aussi autre chose que tu n'as pas montré ?

D'ailleurs essaie de faire Serial.println((char)buf);  je ne suis pas convaincu du *, et ça expliquerai ton affichage
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 14, 2011, 08:33 pm
essaie une fois en supprimant toute cette partie ci ou en la commentant avec //

Code: [Select]

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


de la ligne 163 à 174 normalement
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 14, 2011, 08:42 pm
Quote
D'ailleurs essaie de faire Serial.println((char)buf);  je ne suis pas convaincu du *, et ça expliquerai ton affichage


Obligé de mettre le "*" sinon le compilateur détecte une erreur !

EDIT: bon bah ça fonctionne  :D en retirant la partie que tu vient de me dire tous fonctionne au poil ! merci merci merci  :smiley-mr-green:

Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 14, 2011, 08:42 pm

D'ailleurs essaie de faire Serial.println((char)buf);  je ne suis pas convaincu du *, et ça expliquerai ton affichage


Vu que buf est un pointeur (uint8_t = char non signé il me semble) tu ne peux pas le caster en un "type" char.


EDIT: bon bah ça fonctionne  :D en retirant la partie que tu vient de me dire tous fonctionne au poil ! merci merci merci  :smiley-mr-green:


C'était une partie juste adapté au cas de l'exemple sur lequel tu t'étais basé donc op poubelle lol.
Faudra une fois faire un gros nettoyage de tout le code lol.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 14, 2011, 08:50 pm


D'ailleurs essaie de faire Serial.println((char)buf);  je ne suis pas convaincu du *, et ça expliquerai ton affichage


Vu que buf est un pointeur (uint8_t char non signé il me semble) tu ne peux pas le caster en un "type" char.

Justement c'est là le truc, buf est un tableau de unint8_t, donc on veut le convertir en char directement non ?

Et quel est l'interêt d'utiliser un uint_t et non un char ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 14, 2011, 08:51 pm
Quote
C'était une partie juste adapté au cas de l'exemple sur lequel tu t'étais basé donc op poubelle lol.
Faudra une fois faire un gros nettoyage de tout le code lol.


Oui c'est clair !

Par contre j'ai un nouveaux soucis ^^ mon DNS ne fonctionne plus qu'en local, en 3G+ sur mon iPhone impossible d'accéder a mon interface alors que ça fonctionnais avant  :smiley-eek: encore un mystère à résoudre ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 14, 2011, 09:19 pm



D'ailleurs essaie de faire Serial.println((char)buf);  je ne suis pas convaincu du *, et ça expliquerai ton affichage


Vu que buf est un pointeur (uint8_t char non signé il me semble) tu ne peux pas le caster en un "type" char.

Justement c'est là le truc, buf est un tableau de unint8_t, donc on veut le convertir en char directement non ?

Et quel est l'interêt d'utiliser un uint_t et non un char ?


non, tu ne peux que caster un type uint8_t en type char et un tableau (pointeur) de uint_8t en un tableau (pointeur) de char
En fait un uint8_t on va dire que c'est une façons d'avoir une variable de type byte (8bit non signé) qui existe en c++ et non en c il me semble, son utilisation ici est requise par la librairie du shield,la raison je ne la connais pas faut voir la lib lol.

http://www.nongnu.org/avr-libc/user-manual/group__avr__stdint.html#gaba7bc1797add20fe3efdf37ced1182c5
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 14, 2011, 09:30 pm

non, tu ne peux que caster un type uint8_t en type char et un tableau (pointeur) de uint_8t en un tableau (pointeur) de char
En fait un uint8_t on va dire que c'est une façons d'avoir une variable de type byte (8bit non signé) qui existe en c++ et non en c il me semble, son utilisation ici est requise par la librairie du shield,la raison je ne la connais pas faut voir la lib lol.

http://www.nongnu.org/avr-libc/user-manual/group__avr__stdint.html#gaba7bc1797add20fe3efdf37ced1182c5

En me relisant je suis d'accord avec toi mais ya un truc qui cloche :


Quote
D'ailleurs essaie de faire Serial.println((char)buf);  je ne suis pas convaincu du *, et ça expliquerai ton affichage

Obligé de mettre le "*" sinon le compilateur détecte une erreur !

EDIT: bon bah ça fonctionne  :D en retirant la partie que tu vient de me dire tous fonctionne au poil ! merci merci merci :smiley-mr-green:

Jm'y perds avec tous ces pointeurs... :smiley-roll-sweat:
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 14, 2011, 09:45 pm
En fait pour la partie supprimée c'était un restant du code de l'exemple de la librairie sur lequel chico c'était basé, il fallait obligatoirement que la requête soit de type "GET" et qu'il y ai un ou des paramètres ce qui n'était pas le cas pour l'authentification, alors il passait directement a l'affichage de la page par défaut.

Code: [Select]

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


Il y a encore quelques trucs supprimable à mon avis, on nettoiera tout ça une fois.
Pour les pointeurs et référence je m'en passerais bien aussi ...  ]:D :smiley-roll-sweat: .
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 15, 2011, 12:22 pm
Je n'y comprend plus rien avec mon DNS  :smiley-eek: il fonctionne en local mais pas en 3G sur mon iPhone alors que il y à encore une semaine ça fonctionnais !

Quelqu'un connais t-il un DNS gratuit autre que Dyndns ? No-ip n'est plus gratuit en plus ....

EDIT: c'est bon ça remarche, un bon gros "reset-belge" de la Bbox et ça remarche ^^ j'aime l'informatique

merci

EDIT2: bon par contre le fait d'avoir supprimé la partie qui faisait merdouiller la sécurité, maintenant cela fait merdouiller mes boutons !
Quand je click pour allumer une LED, l'image ce met bien en "ON" mais quand je veut l'éteindre l'image ne repasse pas en "OFF" et si je quitte la page avec l'image en "ON" quand je revient sur la page l'image est repassé en "OFF" :/

thx
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 15, 2011, 12:43 pm

un bon gros "reset-belge"


Tu l'as gaufré ?  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 15, 2011, 12:48 pm
Quote
Tu l'as gaufré ? 


Non j'ai juste arraché la prise et rebranché la prise ^^ un Hard-reset quoi
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 15, 2011, 06:52 pm

EDIT2: bon par contre le fait d'avoir supprimé la partie qui faisait merdouiller la sécurité, maintenant cela fait merdouiller mes boutons !
Quand je click pour allumer une LED, l'image ce met bien en "ON" mais quand je veut l'éteindre l'image ne repasse pas en "OFF" et si je quitte la page avec l'image en "ON" quand je revient sur la page l'image est repassé en "OFF" :/


Normalement la partie supprimée ne devrait pas avoir d'effet sur la partie concernée par le problème.
Les leds, ampoules ou autre sont bien dans l'état correspondant à  la page web ?
Il y a un problème avec le statut des sorties je dirais, il faudrait remanier et optimisé ça en utilisant les registres de port par exemple.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 16, 2011, 04:25 pm
Bah en fait j'ouvre ma page web, la led est sur off et l'image est bien en off ! je click sur l'image (plusieurs fois car ça "bug" a moitié ) et donc l'image passe a ON et la led s'allume. Mais ensuite impossible de repasser l'image en off et la led reste allumé :/

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 16, 2011, 04:28 pm
Essaie d'utiliser Firefox avec le module "Firebug" pour avoir une idée plus précise d'où peut provenir le problème
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 16, 2011, 08:25 pm
Chicotore, est-ce que tu as résolu tes problèmes de lm35 ? Est-il stable ?

Car je fais une moyenne de 8 points sur 8ms pour acquérir une valeur, ensuite je l'arrondi à 0.5°C près, mais je le trouve assez instable
Ci dessous une capture qui explique mon problème, sachant que le réchauffement "global"  16h et 18h est normal (soleil)

(http://img5.imageshack.us/img5/3703/capturedcran20111016201.png)

Oliv'
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 17, 2011, 06:27 pm
Oui j'ai "réussit" à régler l'instabilité de mon LM35 déjà en l'éloignant de mon relais et deuxièmement en l'alimentant par un LC7805 branché sur le +12V d'une alim de PC et la j'ai des valeurs stables  ;)

C'est super sympas ton graphique, c'est fait avec quoi ? C'est insérable dans une page généré par ethernet-shield ?

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 17, 2011, 06:41 pm
Ok merci, j'essaierai de lui coller un lm7805 dédié dès que je les reçois…

Le graphique est généré via la librairie flot (http://code.google.com/p/flot/), et non le shield ethernet ;)
En fait l'Arduino va enregistrer les valeurs dans une base SQL en ligne, et je c'est ce serveur qui affiche les graphiques. ça permet de décharger au maximum l'Arduino ;)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 17, 2011, 07:36 pm
Ok, c'est vraiment sympas comme truc, tu devrais faire un petit "tuto" la dessus ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 17, 2011, 08:05 pm
Je veux bien t'aider à avancer si tu as des problèmes après faire un tutoriel.. je ne maîtrise pas assez ;)
Mais il y a déjà plein de choses comme ici (http://www.kicoe.net/blog/web-internet/flot-une-librairie-de-graphes-pour-jquery-1646) ou là (http://eremiya.net/2009/07/08/jquery-flot-tutorial-part-1/)

La partie qui m'a le plus posé problème est le passage de PHP vers le javascript :
Code: ("Javascript") [Select]

function graphTemperature( scale, timeDisplay ) {
$.getJSON( 'jsonServer.php5?action=temperature&scale=' + scale, function( temp ) {
$.plot($("#graph_temperature"),
        [{
            data: temp,
            lines: { show: true, fill: true, fillColor: "rgba( 200, 200, 200, 0.1 )"},
            color: '#CCC'
        }],
        {
            grid: {
            backgroundColor: { colors: ["#8EAFEF", "#0A1832"] },
            borderColor:"#000",
            color: "#fff",
            labelMargin: 0
        },
        xaxis: {
        mode: "time",
        timeformat: timeDisplay,
        ticks: 5,
        color: "#000"
        },
         yaxis: {
          color: "#000",
            min: "15"
        }
      });
});
timeout_graphTemperature = setTimeout( 'graphTemperature( "' + scale + '", "' + timeDisplay + '" )', 60000 );
}

Et la partie PHP
Code: [Select]

try {
$result = $SQL_con->query( $query );
} catch(Exception $e) {
echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
}
foreach ($result as $row){
$values[$i] = $row["values"];
$date[$i] = (strtotime($row["date"])+7200)*1000;
$i++;
}

$temp = array_map(null, $date, $values);
echo json_encode($temp);


Et il ne faut pas oublier à la ligne "$date[$i] = (strtotime($row["date"])+7200)*1000;" le *1000 car jflot nécessite un temps en ms. Le 7200 est pour le décalage horaire, je ne gère pas encore heure été/hiver.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 22, 2011, 04:31 pm
Merci Oliv, mais bon je verrais ça plus tard, pour le moment j'ai toujours mon soucis du code "avec mdp+login" qui fait buger les boutons de mon interface  :~
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 25, 2011, 03:06 pm
Bon alors je rebosse un peut sur l'interface histoire de comprendre pourquoi le "mdp+login" fait merdouiller cette dernière  :smiley-sleep:

Alors déjà voila le problème actuellement:

1_ Les états des boutons ne sont plus gardés en mémoire, si je passe la photo de la lampe sur "ON", si je revient sur le page d'accueil et ensuite retourne voir l'état de la lampe, elle est de nouveaux sur "OFF". Je parle bien de l'image de la lampe sur l'interface et pas de l'état de la LED branché sur l'arduino

2_ La LED quand à elle s'allume bien depuis l'interface mais ensuite impossible de l'éteindre sauf en cliquant sur d'autres boutons. En ensuite impossible de la rallumer, il faut aussi cliquer à droite ou a gauche ...

3_ Les images d'état des LED réagissent n'importe comment, quand j'en éteint un c'est les deux autres qui s'allument etc etc ...


Je pense que ces soucis viennent de la partie du code qui à été supprimé afin de faire fonctionner le "login+mdp" car avant de supprimer cette partie, l'interface fonctionnait très bien mais pas le "login+mdp" et maintenant c'est le contraire. L'interface bug mais le "login+mdp" fonctionne bien ...

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 25, 2011, 06:58 pm
De mémoire tu as supprimé 2 conditions if non ?

Réintègres ce que tu as supprimé morceau par morceau pour voir lequel est nécessaire/fait planter ton code login/mdp ;)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 25, 2011, 07:07 pm
Voila ce que j'ai supprimé

Code: [Select]
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;
         }


Je vais faire comme tu as dit on va bien voir ^^

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 25, 2011, 07:29 pm
Bon alors je vient de faire le test, il y à bien un "if" sur les deux qui fait buger le "login+MDP" !

Ca fonctionne avec ce if

Code: [Select]
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;
        }


Mais pas avec celui la

Code: [Select]
if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0)
        {
                plen=print_webpage(buf);
            goto SENDTCP;
         }


Donc j'ai essayer l'interface en laissant le "if" qui fonctionne mais toujours le même soucis de bouton qui font n'importe quoi ^^

merci

Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 25, 2011, 07:42 pm
Aie aie, faut préciser qui fonctionne avec quoi, car là je suis perdu, qu'entends tu par "ça fonctionne", les boutons ou le login ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 25, 2011, 07:48 pm
Je parle bien du login+MDP !

Des que je met ce if dans mon code

Code: [Select]
if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0)
        {
                plen=print_webpage(buf);
            goto SENDTCP;
         }


La page d'authentification apparaît bien mais impossible de ce loguer, il tourne en boucle sur la demande du MDP+Login

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 25, 2011, 07:58 pm
L410 tu fais "authentified = 0;", du coup c'est normal que ça tourne en boucle  :smiley-roll-sweat:
Oops, bétise, il faut bien remettre ta variable à 0. :*

Cependant essaie de le mettre juste au dessus du '}', dans le else
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 25, 2011, 08:13 pm
Tu parle de celui la ?

Code: [Select]
uint16_t print_webpage(uint8_t *buf)
{
        uint16_t plen;
        if (authentified == 0)
        {
          plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.1 401 OK\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("WWW-Authenticate: Basic realm=\""));
          plen=es.ES_fill_tcp_data(buf,plen,baseurl);
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\"\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Date: Wed, 07 Aug 1996 11:15:43 GMT\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Server: Webserv test\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Length: 0\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Type: text/html\n\n"));
        }
        else
        {
         

          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/home11.png\"  ></a></center>"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br><center><table border=3 bgcolor=\"#f7f7f7\" width=\"1000\"><tr><td width=50% align=center></center>"));
         
          switch(page)
          {


Du coup je le met ou dans le else ? comme ça ?

Code: [Select]
uint16_t print_webpage(uint8_t *buf)
{
        uint16_t plen;
       
        {
          plen=es.ES_fill_tcp_data_p(buf,0,PSTR("HTTP/1.1 401 OK\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("WWW-Authenticate: Basic realm=\""));
          plen=es.ES_fill_tcp_data(buf,plen,baseurl);
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("\"\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Date: Wed, 07 Aug 1996 11:15:43 GMT\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Server: Webserv test\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Length: 0\n"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("Content-Type: text/html\n\n"));
          if (authentified == 0)     
        }
        else
        {
         

          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/home11.png\"  ></a></center>"));
          plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br><center><table border=3 bgcolor=\"#f7f7f7\" width=\"1000\"><tr><td width=50% align=center></center>"));
         
          switch(page)
          {


Tient d'ailleurs à chaque fois tu me dit " a telle ou telle ligne" mais dans le logiciel arduino je n'est pas les numéro de ligne qui apparaissent, il faut activer une option ou tu utilise un autre logiciel ?

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 25, 2011, 08:23 pm
Non, en bas de la fonction tu as ça :
Code: [Select]

             
              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\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/salon10.png\"></center></a><br>"));
             
              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=05\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/sdb10.png\"></center></a><br>"));
           
          }
        }
        authentified = 0;
         
        // !!! toujour bien envoyer 2 caractÃÆ'ƒÆ’ÃÆ'‚¨re l'ors de l'envois de paramÃÆ'ƒÆ’ÃÆ'‚¨tre ex: '?pge=01' m^me si le 0 parait inutile.
       
        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)
{


Mais essaie
Code: [Select]

             
              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\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/salon10.png\"></center></a><br>"));
             
              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=05\"><center><img src=\"http://i45.servimg.com/u/f45/11/05/63/75/sdb10.png\"></center></a><br>"));
           
          }
          authentified = 0;  // ***********    ICI  *****************
        }
       
         
        // !!! toujour bien envoyer 2 caractÃÆ'ƒÆ’ÃÆ'‚¨re l'ors de l'envois de paramÃÆ'ƒÆ’ÃÆ'‚¨tre ex: '?pge=01' m^me si le 0 parait inutile.
       
        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)
{


Pour les numéro de ligne c'est tout en bas à gauche, en blanc sur bleu
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 26, 2011, 12:27 pm
J'ai donc remis les deux if et j'ai déplacé le "authentified = 0" et toujours le même soucis. La page pour se loger apparaît bien mais elle tourne en boucle, le MDP+Login tapé n'est pas prit en compte  =(
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 26, 2011, 01:27 pm
Normal comme:

Code: [Select]

        if (strncmp("/ ",(char *)&(buf[dat_p+4]),2)==0)
        {
            plen=print_webpage(buf);
            goto SENDTCP;
         }


Dit que s'il n'y a pas de "/" à partir l'emplacement prévu [dat_p+4] , il affiche la page par défaut sans passé par analyse_req donc pas d'authentification et ça tourne en boucle.
Mais je ne comprend toujours pas en quoi ses deux "if" jouent un rôle sur l'état des sortie ?  :(

Essaie une fois ceci, j'ai mis plusieurs sortie série pour debugger et changer le système des états des sorties. 
http://only.dommel.be/docs/secu2.pde
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 26, 2011, 06:13 pm
La page reste toujours bloqué sur l'authentification

Voila ce que j'ai dans le serial moniteur

Code: [Select]
TUX
TUX
TUX
fonction Analyse_req
Requete:

$

Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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



Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

$

Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

$

Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

$

Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

$

Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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



Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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



Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

$

Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

$

Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

TUX
fonction Analyse_req
Requete:

$

Authentification =
0
Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction

fin de la fonction

fonction print_webpage
fin de la fonction

Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 26, 2011, 06:34 pm
Quelques corrections pour la lisibilité, j'ai aussi changer la valeur de l'authentification d'après la requête, je sais pas si tu l'a fais ?

Code: [Select]

Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==


http://only.dommel.be/docs/secu2.pde
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 26, 2011, 07:26 pm
Oui c'est chicotore:domo*** le MDP  ;)

Bon alors voila ce que j'ai:

1 _ j'upload ton dernier code, je m'authentifie et j'ai bien le menu qui apparaît
2 _ quand je click pour accéder à un sous-menu j'ai de nouveau l'authentification qui apparaît et a partir de la l'authentification retourne en boucle
3_ je ferme la page web, je la ré-ouvre et la l'authentification tourne toujours en boucle, je n'est plus accès au menu de l'interface
4 _ je débranche l'arduino et la rebranche et la ça repart comme à l'étape 1 ...

Code: [Select]
fonction Analyse_req
Requete:
$
Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
$
Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
$
Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
$
Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
$
Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 1

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
$
Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 1

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
$
Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
$
Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 1

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
$
Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

fonction Analyse_req
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 1

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage


merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 26, 2011, 08:19 pm
Ce qui est bizarre ce sont ses blancs entre requêtes, il y a des données qui ce perdent quelque part  :|
Tu as essayé firebug sous firefox, ça permettrait de voir ce qu'il se passe entre chaque transactions ?
http://www.siteduzero.com/tutoriel-3-31228-firebug-une-merveille-de-plus-pour-firefox.html

J'ai rajouté quelque sortie série.
http://only.dommel.be/docs/secu2.pde
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 26, 2011, 08:36 pm
Bon alors l'authentification fonctionne bien, j'arrive bien sur ma page de menu par contre il subsiste un soucis ^^

A chaque "premier" démarrage de mon arduino ( c'est a dire quand je chargeais le programme de l'interface ou quand je branché l'arduino en usb ), je me connectais sur mon interface et pour lancer les sous-menu je devais cliker sur un sous-menu, faire reset sur l'arduino et ensuite actualiser la page et la les sous-menu fonctionnais nikel jusqu'à la prochaine coupure d'alimentation de l'arduino !

Ici le soucis est que quand je reset l'arduino, je reste toujours bloqué sur le menu, impossible d'accéder au sous-menus ...

Du coup ce qui étais un problème mineur devient plutôt embêtant vu que je n'est plus accès au sous-menu et donc je ne sait pas si le problème des boutons qui bugais est toujours présent ....



Code: [Select]
------------------------------------- Reception d'une requete -------------------------------
plen = 60
------------------------------------- Reception d'une requete -------------------------------
plen = 60
------------------------------------- Reception d'une requete -------------------------------
plen = 62
------------------------------------- Reception d'une requete -------------------------------
plen = 62
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 453
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 0

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 504
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 1

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
------------------------------------- Reception d'une requete -------------------------------
plen = 62
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0




merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 26, 2011, 08:44 pm
Apparement il ne reçoit rien dans la requête lorsque tu clic dans le menu "plen = 60"  :%
Faudrait une fois mettre le source du code de la page menu une fois que tu arrives dessus.

Tu as essayé firebug sous firefox comme l'a conseillé Oliv, ça permettrait de voir ce qu'il se passe entre chaque transactions ?
http://www.siteduzero.com/tutoriel-3-31228-firebug-une-merveille-de-plus-pour-firefox.html

La totale niveau débug.  ]:D
http://only.dommel.be/docs/secu2.pde
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 26, 2011, 09:02 pm
Voila ce que j'ai quand je veut accéder à un sous-menu

Code: [Select]
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 562
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
?pge=01 HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://domotique.dyndns-home.com/?pge=01
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


Authentification = 1

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 455
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
favicon.ico HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 1

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 455
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
favicon.ico HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 1

Pin = 0
value = 0
Fonction cmd_pin
fin de la fonction cmd_pin

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
ligne 102
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------


Le sous-menu ne s'ouvre pas !

Quote
Faudrait une fois mettre le source du code de la page menu une fois que tu arrives dessus.


C'est à dire ? du menu ou du sous-menu ?

Quote
Tu as essayé firebug sous firefox comme l'a conseillé Oliv, ça permettrait de voir ce qu'il se passe entre chaque transactions ?


Non pas encore, je vais le faire bien que ça me dérangeais un peu d'installer firefox juste pour ça mais bon il faut bien ça ^^

merci

EDIT: j'ai installer le plugin firebug pour chrome mais rien ne s'affiche dedans ...
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 26, 2011, 09:14 pm


Quote
Faudrait une fois mettre le source du code de la page menu une fois que tu arrives dessus.


C'est à dire ? du menu ou du sous-menu ?



Le code source de la page menu quand tu réussis à t'authentifié avant que ça foire.
firebug pour chrome n'a pas l'air au point?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 26, 2011, 09:25 pm
Le code source ? le code arduino que tu veut ?
Mais le code du menu fonctionne je pense car j'y accède bien, c'est les sous-menu qui reste impossible à ouvrir ....

Demain je vais installer firefox et firebug pour voir  ;)

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 26, 2011, 09:28 pm
Non il parle du code source de la page html qui s'affiche dans ton navigateur  ;)

Je ne sais pas ce qu'Osaka en pense mais j'ai l'impression que ton code gagnerai à être réécrit proprement maintenant que tu as mieux compris comment faire les choses...
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 26, 2011, 09:36 pm
Je vient de tester avec firebug sous firefox et je n'est rien qui s'affiche  :smiley-sleep:

Quote
Je ne sais pas ce qu'Osaka en pense mais j'ai l'impression que ton code gagnerai à être réécrit proprement maintenant que tu as mieux compris comment faire les choses...


Bah oui c'est sur mais je pense qu'il est mieux de vraiment finir la mise en place du MDP+Login avant de faire du propre non ?


Voila le code source HTML mais bon sert pas a grand chose ^^

Code: [Select]

<body bgcolor="#EFECCA"> <center><img src="http://i45.servimg.com/u/f45/11/05/63/75/home11.png"  ></a></center><br><center><table border=3 bgcolor="#f7f7f7" width="1000"><tr><td width=50% align=center></center> <a href="http://domotique.dyndns-home.com/?pge=01"><img src="http://i45.servimg.com/u/f45/11/05/63/75/bureau11.png"></a><br> <a href="http://domotique.dyndns-home.com/?pge=02"><img src="http://i45.servimg.com/u/f45/11/05/63/75/chambr11.png"></c</a><br><br> <a href="http://domotique.dyndns-home.com/?pge=03"><center><img src="http://i45.servimg.com/u/f45/11/05/63/75/cuisin10.png"></center></a><br><br> <a href="http://domotique.dyndns-home.com/?pge=04"><center><img src="http://i45.servimg.com/u/f45/11/05/63/75/salon10.png"></center></a><br> <a href="http://domotique.dyndns-home.com/?pge=05"><center><img src="http://i45.servimg.com/u/f45/11/05/63/75/sdb10.png"></center></a><br>


merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 26, 2011, 09:49 pm
Une petit modif, j'ai un doute que ça change quelque chose mais sait on jamais.

http://only.dommel.be/docs/secu2.pde
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 27, 2011, 12:56 pm
J'arrive a ma loger mais j'accède à une page toute blanche, je n'arrive plus sur mon menu  =(

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 27, 2011, 04:24 pm
Tu as réussi avec firebug  ? (onglet réseau)
Et la sortie série arduino ça donne quoi ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 27, 2011, 04:58 pm
Avec firebug je n'est absolument rien, ça reste blanc, aucune informations n'apparaît ...

Avec le serial monitor voila ce que j'ai

Code: [Select]
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 453
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 0

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 504
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 1

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 455
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
favicon.ico HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


Authentification = 1

fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------


Tous ça avec le dernier code que tu as posté

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 27, 2011, 05:07 pm
Dans FireBug, tu n'as rien dans l'onglet console ni html ??

Regarde aussi l'onglet réseau pour voir ce qui passe
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 27, 2011, 05:56 pm
Non je n'est rien du tout ! mais la j'ai un nouveau bug, j'arrive toujours sur une page blanche même avec l'ancien code qui fonctionnais a peut près  :smiley-yell: c'est vraiment super chiant ces petites conneries ...
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 27, 2011, 06:22 pm
Encore un petit test  :smiley-yell:

http://only.dommel.be/docs/secu2.pde
Faudrait vraiment arrivé à voir ce qui ce passe avec firebug  :~
La page blanche ça le fait également avec un autre navigateur ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 27, 2011, 07:04 pm
Oui page blanche même avec chrome ... et même avec le code qui fonctionnais avant  :smiley-yell: je re-testerais demain et si c'est pareil je croit que je vais faire un feux de joie avec l'arduino  :D
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 27, 2011, 07:34 pm
Normalement dans l'onglet réseau tu devrais au moins voir "Get XXXXXX", essaie de pointer sur un site avec Firebug vérifier que tout marche bien ;)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 28, 2011, 01:20 pm
Bon j'en est définitivement marre de cet arduino  ]:D

A chaque fois j'accède à des pages blanches, il n'y à plus que le tout premier code qui fonctionne ... celui sans les deux "if" ou les boutons merdouilles ...
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 28, 2011, 02:01 pm
J'ai commenté la partie authentification pour voire si ça vient bien de là.

http://only.dommel.be/docs/sans_secu.pde
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 28, 2011, 02:17 pm
Voila ce que j'ai dans le serial moniteur

Code: [Select]
------------------------------------- Reception d'une requete -------------------------------
plen = 60
ligne 94
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
ligne 94
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 453
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


fin de la fonction Analyse_req

fonction print_webpage
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------


Et la page se charge en permanence ... même plus d'authentification ou de page blanche ...

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 28, 2011, 02:32 pm
bizarre cette parie là

Code: [Select]

------------------------------------- Reception d'une requete -------------------------------
plen = 999
ligne 102
---------------------------------------------------------------------------------------------


ce qui correspond à ça dans le code

Code: [Select]

    // check if ip packets are for us:
    if(es.ES_eth_type_is_ip_and_my_ip(buf,plen)==0)
    {
      Serial.println("ligne 102");
      Serial.println("---------------------------------------------------------------------------------------------");
      return;
    }


Décommante une fois les if qu'on avais incriminé pour l'authetification.

Edit: une petite correction http://only.dommel.be/docs/sans_secu.pde
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 28, 2011, 03:23 pm
Bon alors j'ai résolu le syndrome de la page blanche en supprimant tous mon historique de navigation sous chrome et ça remarche ...

Avec ton dernier code j'ai bien accès a mon menu principal mais sans authentification ( a voir ton code c'est normal vu que tu as "désactivé" cette partie avec des // ), par contre les sous-menus ne fonctionnent toujours pas mais en resetant l'arduino comme je faisait avant ...

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 28, 2011, 03:53 pm

Bon alors j'ai résolu le syndrome de la page blanche en supprimant tous mon historique de navigation sous chrome et ça remarche ...


avec l'authentification donc ?


Avec ton dernier code j'ai bien accès a mon menu principal mais sans authentification ( a voir ton code c'est normal vu que tu as "désactivé" cette partie avec des // ), par contre les sous-menus ne fonctionnent toujours pas mais en resetant l'arduino comme je faisait avant ...

C'était pour voir sans authentification une fois.
Et en sortie série ça donne quoi ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 28, 2011, 05:58 pm
Alors voila le test de ton dernier code sur le serial monitor:

Quand j'accède à la page "menu" en allant sur domotique.dyndns ...

Code: [Select]
------------------------------------- Reception d'une requete -------------------------------
plen = 60
ligne 94
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
ligne 94
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 453
data pointeur = 54
ligne 149
---------------------------------------------------------------------------------------------
fonction print_webpage
menu
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 404
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
favicon.ico HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


fin de la fonction Analyse_req

fonction print_webpage
menu
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------


Et voila quand je click sur un sous-menu ( mais ce dernier ne s'ouvre pas, je reste bloqué sur la page du menu )

Code: [Select]
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 504
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
?pge=01 HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 Safari/535.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://domotique.dyndns-home.com/
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


fin de la fonction Analyse_req

fonction print_webpage
menu
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 62
ligne 121
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 404
data pointeur = 54
fonction Analyse_req
req length = 0
Requete:
favicon.ico HTTP/1.1
Host: domotique.dyndns-home.com
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.202 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


fin de la fonction Analyse_req

fonction print_webpage
menu
fin de la fonction print_webpage

---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------
------------------------------------- Reception d'une requete -------------------------------
plen = 60
data pointeur = 0
dat_p = 0
---------------------------------------------------------------------------------------------


merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 28, 2011, 06:52 pm
Je vais essayé une fois d'adapté ton code à mon shield pour tester.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 29, 2011, 12:12 am

Bon alors j'ai résolu le syndrome de la page blanche en supprimant tous mon historique de navigation sous chrome et ça remarche …

Firebug sous chrome n'a pas l'air tout a fait fini, utilises le sous FireFox plutôt, et pour éviter les problèmes de cache le mode de navigation privée est parfait pour ce genre de développements  :)

Je n'arrive pas à comprendre ton code avec la facilité d'Osaka du coup je n'arrive pas à t'aider mais j'ai vraiment l'impression que ton code est assez bordélique… ce qui n'aide pas niveau bugs.
De plus, tu passes ton temps à revenir en avant/arrière, mais avec bcp de difficultées à revenir en arrière visiblement, essaie de faire un compte svn gratuit (ex riouxsvn) et envoyer régulièrement ton code dessus, ensuite avec un bon client svn tu vois vite les différences entre ce que tu as changé et la version précédente -> erreurs éventuelles. Par exemple j'ai ajouté un caractère par erreur dans mon code ce soir, j'ai passé 20 bonnes min à chercher, puis je me suis décidé à comparer les différences avec le SVN, problème résolu en 1 minute ;)

Au fait, as tu continué à bosser sur ta liaison sans fil ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Oct 29, 2011, 11:42 am
Quote
Je vais essayé une fois d'adapté ton code à mon shield pour tester.


Ok merci  :D

Quote
Firebug sous chrome n'a pas l'air tout a fait fini, utilises le sous FireFox plutôt


Je l'utilise sous Firefox

Quote
j'ai vraiment l'impression que ton code est assez bordélique


Certe il est bordélique mais a vrai dire je fait ce que je peut avec mes maigres connaissances et déjà arriver a ce code "bordélique" c'étais pas gagné
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Oliv4945 on Oct 29, 2011, 11:58 am

Quote
Firebug sous chrome n'a pas l'air tout a fait fini, utilises le sous FireFox plutôt

Je l'utilise sous Firefox

Ah ok, comme tu dis avoir résolu le pb de la page blanche en vidant le cache Chrome je n'avais pas compris, désolé :smiley-red:



Quote
j'ai vraiment l'impression que ton code est assez bordélique

Certe il est bordélique mais a vrai dire je fait ce que je peut avec mes maigres connaissances et déjà arriver a ce code "bordélique" c'étais pas gagné

Ce n'est absolument pas un reproche, ce que je voulais dire c'est que c'est normal de faire un truc avec plein de rustines, surtout quand on ne connais pas; mais de temps en temps faire du nettoyage, ou carrément changer de façon quand on a vu comment faire c'est tout bénéfique ;)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Oct 30, 2011, 05:47 pm
Voilà comme promis ma version de ton code pour le shield officiel.
http://only.dommel.be/docs/myversionchico.pde

il y a beaucoup de changement:

- Correction d'erreur html.
- macro pour le code répétitif.
- changement pour l'analyse de la requête.
- ici le code de gestion du contenu html ce fait différemment comme les shield sont différents, pour gagner une quantité non négligeable en mémoire sram j'ai créer des variables contenant le code html au lieu de les répéter dans les chaines de caractères.
- Utilisation des ports avec gestion dynamique des différents registres (repris de la lib Sd2PinMap.h).

Donc le plus gros problème qu'il doit y avoir sur ton code viennent de la sram.
Je regarderai pour l'adapter à ton shield.
(tu n'as pas un Mega ?)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: arduimat on Nov 09, 2011, 10:04 am
Yop,

Je viens poser la question ici car il me semble que tu as utilisé la puce ENC28J60 pour ta connexion Ethernet.

J'ai trouvé ça : http://www.geeetech.com/index.php?main_page=product_info&products_id=263

Arduino ENC28J60 Ethernet Module pour 7€

C'est vraiment pas cher comparé à la puce W5100 et aux shields.

Et j'aimerai avoir ton avis concernant ce produit, tu as réussi à le faire avec cette puce, donc j'ose espérer pouvoir en faire de même :)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Nov 09, 2011, 02:39 pm

Et j'aimerai avoir ton avis concernant ce produit, tu as réussi à le faire avec cette puce, donc j'ose espérer pouvoir en faire de même :)


Je te renvoie à ton propre poste et au 27 pages de ce post relatant la facilité (relatif, ironique ?  :*) d'utilisation de ce shield  :smiley-mr-green:
http://arduino.cc/forum/index.php/topic,71750.15.html

La plus grosse difficulté est la gestion de la mémoire  :~

Ai oublier de donner la version adapté pour chico.  :smiley-red:
http://only.dommel.be/docs/avecsecu.pde
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Nov 10, 2011, 08:14 pm
Un petit mot rapide ^^ je n'est pas abandonné le projet mais pour le moment je n'est pas du tout le temps de bosser la dessus  ;)

merci Osaka pour le code ;)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: trigger on Dec 11, 2011, 01:09 pm
Bonjour, bonjour

Cela fait un moment que suis votre aventure domo'duino sans oser poster ...
Je suis sur un projet similaire et je peine un peu pour tout vous dire ^^ J'arrive à piloter 5 relais, un LCD, un servo et affichage de la température.
( le tout protégé par un log/pass).

Cependant n'ayant pas beaucoup d'expérience en html je voudrais savoir comment arrivez vous à modifier la page web suivant si vous êtes dans la cuisine/salon ...

Votre code est tellement intéressant que j'ai plein de questions ^^

Je voudrais bien savoir comment vous faites pour vous connecter en rentrant "http://domotique.dyndns-home.com/" et non "http://192.168.1.109:9390/" dans l'url de votre navigateur

Autre question par rapport à l'affichage de votre code html : vous utilizer un syntaxe de la forme :
Code: [Select]
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
etant vraiment novice je voudrais connaitre la différence avec
Code: [Select]
client.println(F("<br>"));

J'aurais surement plein d'autre question, alors en attendant je vous souhaite bonne chance pour cette superbe aventure :)

ps : je peux vous piquer les liens de vos images ? les miennes sont vraiment tres moches ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Dec 12, 2011, 02:49 am

Bonjour, bonjour

Cela fait un moment que suis votre aventure domo'duino sans oser poster ...
Je suis sur un projet similaire et je peine un peu pour tout vous dire ^^ J'arrive à piloter 5 relais, un LCD, un servo et affichage de la température.
( le tout protégé par un log/pass).

Bonjour,
Be c'est déjà un bon début.


Cependant n'ayant pas beaucoup d'expérience en html je voudrais savoir comment arrivez vous à modifier la page web suivant si vous êtes dans la cuisine/salon ...


En fait la première page ne contiens que les argument permettant de demander au serveur le contenu html (interprété par ton navigateur) de la page (pièce) désirée, ça permet d'économisé le buffer et de n'afficher que ce dont on a besoin.


Je voudrais bien savoir comment vous faites pour vous connecter en rentrant "http://domotique.dyndns-home.com/" et non "http://192.168.1.109:9390/" dans l'url de votre navigateur


Chico avait fais un petit tuto au début du topic.
http://arduino.cc/forum/index.php/topic,66139.msg489567.html#msg489567


Autre question par rapport à l'affichage de votre code html : vous utilizer un syntaxe de la forme :
Code: [Select]
plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("<br>"));
etant vraiment novice je voudrais connaitre la différence avec
Code: [Select]
client.println(F("<br>"));


Ici c'est plus une différence entre la lib du shield officiel (w5100) et l'enc28j60 (qui est plus difficile à appréhendé pour un débutant).


J'aurais surement plein d'autre question, alors en attendant je vous souhaite bonne chance pour cette superbe aventure :)

ps : je peux vous piquer les liens de vos images ? les miennes sont vraiment tres moches ^^


Je pense pas que ça pose de problème à chico.  ;)
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: trigger on Dec 14, 2011, 06:50 pm
Salut salut,

J'espère que votre projet avance bien et merci pour toute ces réponses ! :)

@Chico je t'ai chipé tes très jolis boutons pour naviguer dans les différentes parties de la maison ( bien sur si cela te dérange n'hésites pas à m'en informer !! ) par contre si cela ne te dérange tu pourrais m'envoyer les liens de ceux que tu as utilisé pour le reste :)

En effet je trouve vraiment supers ceux que j'ai pu voir sur ton blog (allumer/ éteindre...)

Amicalement,
trigger
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on May 27, 2012, 12:45 pm
Bonjour a tous,

Un petit mot pour dire que je reprend le projet  :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on May 27, 2012, 02:57 pm
Content de voir que tu es toujours en vie, je parlais justement de toi ici http://arduino.cc/forum/index.php/topic,80422.315.html.   :)
L'enc28j60 toujours en vie également ?  :smiley-mr-green:
Toujours dans la même optique pour ton projet ?
Pas envie de rejoindre l'autre projet ?
Attention beaucoup de changement niveau core arduino depuis la dernière fois !  ]:D
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on May 27, 2012, 06:11 pm
Quote
Content de voir que tu es toujours en vie, je parlais justement de toi ici http://arduino.cc/forum/index.php/topic,80422.315.html.   


Oui je vient de voir ça ^^
Quote
L'enc28j60 toujours en vie également ? 
Toujours dans la même optique pour ton projet ?


Oui toujours en vie et oui toujours la même optique pour le projet. En fait je vient de reprendre mon code et il est presque finit en fait ! Il me manque juste le fait de pouvoir sécurisé le tous avec un mot de passe à la connections sur mon arduino sinon tous le reste est OK et fonctionnel ... mais je galère toujours autant a faire un login+mdp ^^

Quote
Pas envie de rejoindre l'autre projet ?


Bah en fait j'ai un peut raté le train de ce projet donc je ne sait pas du tout de quoi il en retourne ... c'est une interface full arduino ou PC+Arduino ? Car moi je veut vraiment faire un truc sans PC, juste l'arduino qui gère tout ^^

Quote
Attention beaucoup de changement niveau core arduino depuis la dernière fois !


C'est a dire ? changement core ?

merci
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Brisebee on May 27, 2012, 06:59 pm

Bah en fait j'ai un peut raté le train de ce projet donc je ne sait pas du tout de quoi il en retourne ... c'est une interface full arduino ou PC+Arduino ? Car moi je veut vraiment faire un truc sans PC, juste l'arduino qui gère tout ^^


Pour ce qui me concerne il n'y aura pas de PC. Même si je ne sais pas encore si le site web sera dans l'arduino ou sur un serveur externe.
Cela dépendra du nombre de données à stocker, et plus j'y réfléchi, plus je pense qu'il va falloir externaliser.

Je vais relire tranquillement ce topic, comme me le suggérait Osaka, j'aurai probablement des questions à te poser.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on May 27, 2012, 07:02 pm
Moi je part vraiment sur un programme entièrement dans l'arduino sans serveur externe ou PC ... le but est d'avoir l'arduino et rien d'autre  :smiley-mr-green:

D'ailleurs le projet est quasiment finit, il me manque juste a faire une sécurité d'accès avec login+mdp mais je galère encore et toujours ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: zoroastre on May 27, 2012, 09:10 pm
Yep!

J'ai hâte de voir les avancés de ton projet, d'autant plus que j'ai un enc28j dans mes bacs et j'escompe vivement l'integrer dans mon projet en cours.

De toute manière et dans la globalité, je suis admiratif !!! Tu as réalisé un projet domotique superbe et relativement complet dont beaucoup vont à coup sûr s'inspirer, et moi le premier. Je suis donc avec une grande attention tes interventions ;)

Quote
Pas envie de rejoindre l'autre projet ?

Je rejoins cette reflexion, l'ideal domotique est personnel, n'empêche que la modularité des projets rend cet aspect durement commun et distant à la fois. C'est un peu comme si nous recherchions tous un vaccin contre le virus ebola avec nos methodes propres, méthodes de laborantin. Alors que la philosophie "opensource" devrait permettre à chacun de nous de participer à un projet unique aux milles facettes et couleurs, mais tous ensemble.
D'ailleurs, au vue de l'avancé de untel et de la motivation d'autres, nous devrions tous collaborer dans le même laboratoire, dans le même atelier.
Le projet de Chicotore est on ne peut plus remarquable, mais certains ont des sillons bien costauds aussi, et là, je pense à Gromain59 et au XPL.

@+

Zoroastre.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on May 27, 2012, 09:13 pm

Quote
Pas envie de rejoindre l'autre projet ?


Bah en fait j'ai un peut raté le train de ce projet donc je ne sait pas du tout de quoi il en retourne ... c'est une interface full arduino ou PC+Arduino ? Car moi je veut vraiment faire un truc sans PC, juste l'arduino qui gère tout ^^


En fait c'est pas vraiment un poste pour un projet, mais plutôt un poste pour plusieurs projets presque similaire qui tourne autour de la domotique.
On discutes et s'entraide surtout.  :smiley-surprise:
Maintenant la solution full arduino pour l'interface web, tu connais les limites hein mais pour tes besoins c'est suffisant.  :smiley-mr-green:. 


Quote
Attention beaucoup de changement niveau core arduino depuis la dernière fois !


C'est a dire ? changement core ?


Ici c'est l'ensemble des classes dédié au code arduino (main, HardwareSerial, wiring, etc), tout ce que la team arduino à écrit pour te "facilité" la vie (pinMode(), digitalWrite(), Serial.println(), etc ) qui te cache ce qu'il ce passe réellement  XD.
Enfin il y a eu pas mal de changement qui peuvent rendre l'ancien code ou lib incompatible avec les dernières màj du core arduino. 
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on May 28, 2012, 02:00 pm

Yep!

J'ai hâte de voir les avancés de ton projet, d'autant plus que j'ai un enc28j dans mes bacs et j'escompe vivement l'integrer dans mon projet en cours.

De toute manière et dans la globalité, je suis admiratif !!! Tu as réalisé un projet domotique superbe et relativement complet dont beaucoup vont à coup sûr s'inspirer, et moi le premier. Je suis donc avec une grande attention tes interventions ;)

Quote
Pas envie de rejoindre l'autre projet ?

Je rejoins cette reflexion, l'ideal domotique est personnel, n'empêche que la modularité des projets rend cet aspect durement commun et distant à la fois. C'est un peu comme si nous recherchions tous un vaccin contre le virus ebola avec nos methodes propres, méthodes de laborantin. Alors que la philosophie "opensource" devrait permettre à chacun de nous de participer à un projet unique aux milles facettes et couleurs, mais tous ensemble.
D'ailleurs, au vue de l'avancé de untel et de la motivation d'autres, nous devrions tous collaborer dans le même laboratoire, dans le même atelier.
Le projet de Chicotore est on ne peut plus remarquable, mais certains ont des sillons bien costauds aussi, et là, je pense à Gromain59 et au XPL.

@+

Zoroastre.


Merci a toi  ;) mais c'est surtout grâce a cette communautés que le programme en est a ce stade  :smiley-mr-green:

Quote
Ici c'est l'ensemble des classes dédié au code arduino (main, HardwareSerial, wiring, etc), tout ce que la team arduino à écrit pour te "facilité" la vie (pinMode(), digitalWrite(), Serial.println(), etc ) qui te cache ce qu'il ce passe réellement  .
Enfin il y a eu pas mal de changement qui peuvent rendre l'ancien code ou lib incompatible avec les dernières màj du core arduino.


Ok, je n'est pas mis a jour mon logiciel arduino, ça doit être pour ça que je n'est pas vu les news ^^

Sinon pour en revenir a mon mot de passe, est-ce que il ne serait pas possible de mettre un MDP directement a mon DNS que de vouloir le mettre dans mon code arduino ? j'essaye de trouver un DNS gratuit avec MDP mais pour le moment je trouve pas grand chose ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on May 30, 2012, 06:41 pm
Plus personne ? ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on May 30, 2012, 07:40 pm

Plus personne ? ^^


Lol c'est toujour le même problème, tu n'as pas choisis la facilité avec l'enc28j60.  ]:D
Sinon je sais plus ce qui avais été testé et ce qui ne marchait pas  :smiley-sweat:, tu avais testé la dernière solution que je t'avais donné page précédente ?
Pas le courage d'y regarder tout de suite ...  :smiley-fat:  XD
Va me falloir un mois pour me remettre dans ton projet lol. :smiley-mr-green:
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on May 30, 2012, 07:44 pm
Je vient d'avoir une nouvelle idée pour ma gestion de la sécurité ^^ Comme j'ai un code complet avec accès par MDP qui fonctionne mais fait bugger le reste du code ! que pensez vous de mettre en place ce code avec MDP sur un arduino seul et une fois le bon MDP taper, cela donne accès au second arduino qui contient le code domotique ?

Cela permet également de gagner un peut de place pour le programme domotique non ? mais comment ouvrir un programme sur un autre arduino a partir d'un premier arduino ? qu'en pensez-vous ?

Code: [Select]
void analyse_req(char *str)
{
 //  Serial.println(str);
 //authentification, modifier dGVzdDp0ZXN0
 if (strstr( str, "Authorization: Basic Y2hpY290b3JlOmRvbW90aXF1ZQ==") != NULL) authentified = 1;


Apres sauf si quelqu'un sait comment faire pour avoir une authentification par MDP dans un programme arduino car la je sèche vraiment et ça m'énerve un peut d'être bloqué pour un truc tout bête je suit sur ...
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on May 30, 2012, 07:53 pm
Salut,

Voila le code actuel sur lequel j'essaye de bidouiller pour arriver à le faire fonctionner. En fait l'identification fonctionne mais ensuite plus rien ne fonctionne dans le code. Aucun bouton rien ...

http://chicowebsite.free.fr/secu.pde

J'ai essayer ton dernier code mais il ne fonctionne pas du tout et comme tous à été changer dedans j'ai un peu (beaucoup) de mal à le comprendre ^^
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on May 30, 2012, 09:05 pm
Il me semble qu'à l'époque, ce "figage" était du a un problème de taille mémoire (sram) c'est pour celà que j'avais fais un max de macro avec le code html répétitif en progmem dans la dernière version ?
Tu utilisais un arduino uno ou mega, je sais plus ?
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Brisebee on May 31, 2012, 09:02 am
Bonjour,

En cherchant des exemples de mise en oeuvre de serveur web avec arduino, je suis tombé sur un exemple d'authentification par MdP dans les exemples de la librairie Webduino, mais tu l'as probablement déjà vu.

A tout hasard, voici le code de cet exemple :
Code: [Select]
/* Web_Authentication.ino - Webduino Authentication example */

/* This example assumes that you're familiar with the basics
* of the Ethernet library (particularly with setting MAC and
* IP addresses) and with the basics of Webduino. If you
* haven't had a look at the HelloWorld example you should
* probably check it out first */

/* you can change the authentication realm by defining
* WEBDUINO_AUTH_REALM before including WebServer.h */
#define WEBDUINO_AUTH_REALM "Weduino Authentication Example"

#include "SPI.h"
#include "Ethernet.h"
#include "WebServer.h"

/* CHANGE THIS TO YOUR OWN UNIQUE VALUE.  The MAC number should be
* different from any other devices on your network or you'll have
* problems receiving packets. */
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

/* CHANGE THIS TO MATCH YOUR HOST NETWORK.  Most home networks are in
* the 192.168.0.XXX or 192.168.1.XXX subrange.  Pick an address
* that's not in use and isn't going to be automatically allocated by
* DHCP from your router. */
static uint8_t ip[] = { 192, 168, 1, 210 };

/* This creates an instance of the webserver.  By specifying a prefix
* of "", all pages will be at the root of the server. */
#define PREFIX ""
WebServer webserver(PREFIX, 80);

void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  server.httpSuccess();
  if (type != WebServer::HEAD)
  {
    P(helloMsg) = "<h1>Hello, World!</h1><a href=\"private.html\">Private page</a>";
    server.printP(helloMsg);
  }
}

void privateCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  /* if the user has requested this page using the following credentials
   * username = user
   * password = user
   * display a page saying "Hello User"
   *
   * the credentials have to be concatenated with a colon like
   * username:password
   * and encoded using Base64 - this should be done outside of your Arduino
   * to be easy on your resources
   *
   * in other words: "dXNlcjp1c2Vy" is the Base64 representation of "user:user"
   *
   * if you need to change the username/password dynamically please search
   * the web for a Base64 library */
  if (server.checkCredentials("dXNlcjp1c2Vy"))
  {
    server.httpSuccess();
    if (type != WebServer::HEAD)
    {
      P(helloMsg) = "<h1>Hello User</h1>";
      server.printP(helloMsg);
    }
  }
  /* if the user has requested this page using the following credentials
   * username = admin
   * password = admin
   * display a page saying "Hello Admin"
   *
   * in other words: "YWRtaW46YWRtaW4=" is the Base64 representation of "admin:admin" */
  else if (server.checkCredentials("YWRtaW46YWRtaW4="))
  {
    server.httpSuccess();
    if (type != WebServer::HEAD)
    {
      P(helloMsg) = "<h1>Hello Admin</h1>";
      server.printP(helloMsg);
    }
  }
  else
  {
    /* send a 401 error back causing the web browser to prompt the user for credentials */
    server.httpUnauthorized();
  }
}

void setup()
{
  Ethernet.begin(mac, ip);
  webserver.setDefaultCommand(&defaultCmd);
  webserver.addCommand("index.html", &defaultCmd);
  webserver.addCommand("private.html", &privateCmd);
  webserver.begin();
}

void loop()
{
  char buff[64];
  int len = 64;

  /* process incoming connections one at a time forever */
  webserver.processConnection(buff, &len);
}


Je ne sais pas si c'est exactement ce que tu cherches !

@+
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on May 31, 2012, 05:32 pm
Je ne connais pas lib Webduino et la classe WebServer, mais ça ressemble à ce que l'on a fais non ?
Donc chico, il faudrait peut être regardé ce qu'il y a de nouveau depuis ton retour (Webduino par exemple) et qui pourrait t'être utile  ?
Merci Bribri je crois que tu as trouvé quelque chose de sympa là, enfin je connaissais pas.  :smiley-surprise:
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: chicotore on Jun 08, 2012, 05:58 pm

Bonjour,

En cherchant des exemples de mise en oeuvre de serveur web avec arduino, je suis tombé sur un exemple d'authentification par MdP dans les exemples de la librairie Webduino, mais tu l'as probablement déjà vu.

A tout hasard, voici le code de cet exemple :
Code: [Select]
/* Web_Authentication.ino - Webduino Authentication example */

/* This example assumes that you're familiar with the basics
* of the Ethernet library (particularly with setting MAC and
* IP addresses) and with the basics of Webduino. If you
* haven't had a look at the HelloWorld example you should
* probably check it out first */

/* you can change the authentication realm by defining
* WEBDUINO_AUTH_REALM before including WebServer.h */
#define WEBDUINO_AUTH_REALM "Weduino Authentication Example"

#include "SPI.h"
#include "Ethernet.h"
#include "WebServer.h"

/* CHANGE THIS TO YOUR OWN UNIQUE VALUE.  The MAC number should be
* different from any other devices on your network or you'll have
* problems receiving packets. */
static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

/* CHANGE THIS TO MATCH YOUR HOST NETWORK.  Most home networks are in
* the 192.168.0.XXX or 192.168.1.XXX subrange.  Pick an address
* that's not in use and isn't going to be automatically allocated by
* DHCP from your router. */
static uint8_t ip[] = { 192, 168, 1, 210 };

/* This creates an instance of the webserver.  By specifying a prefix
* of "", all pages will be at the root of the server. */
#define PREFIX ""
WebServer webserver(PREFIX, 80);

void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  server.httpSuccess();
  if (type != WebServer::HEAD)
  {
    P(helloMsg) = "<h1>Hello, World!</h1><a href=\"private.html\">Private page</a>";
    server.printP(helloMsg);
  }
}

void privateCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
{
  /* if the user has requested this page using the following credentials
   * username = user
   * password = user
   * display a page saying "Hello User"
   *
   * the credentials have to be concatenated with a colon like
   * username:password
   * and encoded using Base64 - this should be done outside of your Arduino
   * to be easy on your resources
   *
   * in other words: "dXNlcjp1c2Vy" is the Base64 representation of "user:user"
   *
   * if you need to change the username/password dynamically please search
   * the web for a Base64 library */
  if (server.checkCredentials("dXNlcjp1c2Vy"))
  {
    server.httpSuccess();
    if (type != WebServer::HEAD)
    {
      P(helloMsg) = "<h1>Hello User</h1>";
      server.printP(helloMsg);
    }
  }
  /* if the user has requested this page using the following credentials
   * username = admin
   * password = admin
   * display a page saying "Hello Admin"
   *
   * in other words: "YWRtaW46YWRtaW4=" is the Base64 representation of "admin:admin" */
  else if (server.checkCredentials("YWRtaW46YWRtaW4="))
  {
    server.httpSuccess();
    if (type != WebServer::HEAD)
    {
      P(helloMsg) = "<h1>Hello Admin</h1>";
      server.printP(helloMsg);
    }
  }
  else
  {
    /* send a 401 error back causing the web browser to prompt the user for credentials */
    server.httpUnauthorized();
  }
}

void setup()
{
  Ethernet.begin(mac, ip);
  webserver.setDefaultCommand(&defaultCmd);
  webserver.addCommand("index.html", &defaultCmd);
  webserver.addCommand("private.html", &privateCmd);
  webserver.begin();
}

void loop()
{
  char buff[64];
  int len = 64;

  /* process incoming connections one at a time forever */
  webserver.processConnection(buff, &len);
}


Je ne sais pas si c'est exactement ce que tu cherches !

@+


Salut,

Merci a toi mais ce code ne fonctionne pas, il y a une erreur au niveau de

Code: [Select]
WebServer webserver(PREFIX, 80);
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Brisebee on Jun 08, 2012, 06:38 pm
Bonjour,
As-tu téléchargé et installé la librairie WebServer.h ?
https://github.com/sirleech/Webduino (https://github.com/sirleech/Webduino)
Il faudra certainement adapter le sketch, car il a été écrit pour l'IDE 1.0 : Web_Authentication.ino et non Web_Authentication.pde
Je ne suis pas du tout un spécialiste du C, je ne te serai pas d'un grand secours dans le « debuggage » du sketch.
J'ai pas mal galéré pour transformer tout mon sketch pour l'IDE 1.01
@+
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: osaka on Jun 08, 2012, 06:46 pm
Oups  :smiley-sleep:, on a complètement zapper le fait que tu utilises un shield à base d'enc28j60 et non w5100 donc il y a de grande chance que la lib webduino ne soit tout simplement pas compatible  :smiley-sweat: .
%#$£ d'enc28j60  :smiley-mr-green:.
Title: Re: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz )
Post by: Brisebee on Jun 08, 2012, 06:55 pm
En plus !