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

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

là je vois les images :D Mais la lampe éteinte c'est ecrit allumée ! :astonished:

A+ chabot380

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

une question.
A quoi servent les balises color ?

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”));

:roll_eyes:

chicotore:

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

@chabot: Les balises color étais pour afficher en rouge le texte sur le forum mais a l’intérieur de

 cela ne fonctionne pas ^^ mais dans mon programme arduino elles n'y sont pas  ;)

@chesnel: Ok ^^

salut chicotore.

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 ? :roll_eyes:

A+ chabot380

Edit de Jean-François : avec les balise [code ][/ code] c'est mieux aussi XD

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?

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 !

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 !

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

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(" "));
        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("
"));                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("

REMOTE LED is  

"));                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("   ") );

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

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(" "));
        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("
"));                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));        plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("

REMOTE LED is  

"));                if(on_off)         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));        else         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));                plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("   ") );

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 =(

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.

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

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 et #include ?

Normalement si tu fais #include ça doit suffir non ? dans librarie Ethernet il y a :

ifndef ethernet_h

define ethernet_h

include

//#include "w5100.h"

include "Client.h"

include "Server.h"

je dis une con..rie ou pas ?

A+ chabot380

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

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

 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(" "));
        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("
"));

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

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" ^^

#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

200 OK

"));             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 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(" "));         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));                 plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));                 if(on_off)         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));         else         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("
"));                 plen=es.ES_fill_tcp_data_p(buf,plen,PSTR("  ") );                 if(on_off){         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(""));         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(""));         }         else {         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(""));         plen=es.ES_fill_tcp_data_p(buf,plen,PSTR(""));         }                           return(plen); }

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

J'espere que je ne t'ai pas offusqué

Euh ... non du tout XD

t'as raison, il faut keeper la peach ^^

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

[u]Code Arduino 2 boutons (fonctionnel ):[/u]

[u]Code Arduino 4 boutons (non fonctionnel ):[/u]

PS: j'ai mis les codes sur megaupload car ils sont trop long pour être posté sur le forum dans les balises ^^

Bon bah j'ai essayer de modifier 2 ou 3 trucs mais c'est pas ça, ça ne fonctionne toujours pas :stuck_out_tongue_closed_eyes:

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 :stuck_out_tongue_closed_eyes:

merci

Salut chico ! ;)

dans ta page tu mets :

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

ça doit marcher.

A+