Go Down

Topic: Domo'Duino, la domotique par Arduino (NEWS: Modules 2.4ghz ) (Read 105352 times) previous topic - next topic

chabot380

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
ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

chicotore

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

chabot380

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




A+
chabot380
ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

chicotore

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

chabot380

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:
ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

chesnel


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

chicotore

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

chabot380

#67
Jul 22, 2011, 07:58 am Last Edit: Jul 22, 2011, 08:51 am by Jean-François Reason: 1
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
ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

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?

chicotore

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

chesnel

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.

chicotore

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

chabot380

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
ORDINAUSORE 2Ghz AMD64 QUI S'ALLUME EN 48 SECONDES AVEC UBUNTU 12.04
ARDUINO UNO / Shield Ethernet / RTC DS1307
Programmation Python et j'apprends le C
Technicien Télé Vidéo à la retraite.

colassep

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

chicotore

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



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

Go Up