Pages: 1 [2]   Go Down
Author Topic: Serveur domotique raspberry pi + arduino  (Read 5303 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j'arrive a envoyer un code en php pour allumer la led sur l'arduino par le port usb grace au code suivant:
Code:
<?php
 exec
("mode com3: BAUD=9600 PARITY=N data=8 stop=1 xon=off dtr=off");
 
$fp fopen("COM3""w+");
 
fwrite($fp"m1 off");
 
fclose($fp);
 
?>
code arduino:
Code:
char inData[20]; // Allocate some space for the string
char inChar=-1; // Where to store the character read
byte index = 0; // Index into array; where to store the character

void setup(){

  Serial.begin(9600);
  Serial.write("Power On");
}
char Comp(char* This){
  while(Serial.available() > 0) // Don't read unless
    // there you know there is data
  {
    if(index < 19) // One less than the size of the array
    {
      inChar = Serial.read(); // Read a character
      inData[index] = inChar; // Store it
      index++; // Increment where to write next
      inData[index] = '\0'; // Null terminate the string
    }
  }
  if(strcmp(inData,This)  == 0){
    for(int i=0;i<19;i++){
      inData[i]=0;
    }
    index=0;
    return(0);
  }
  else{
    return(1);
  }
}
void loop()
{
  if(Comp("m1 on")==0){
     digitalWrite(8,HIGH);
     Serial.write(" On");
  }
  if(Comp("m1 off")==0){
     digitalWrite(8,LOW);
     Serial.write(" Off");
  }
}

Maintenant sur mon ancien code arduino il décodait un message json genre : 
 var textejson = {"str":0x02,"len":0x04, "cmd":0x08, "dt1":1, "dt2":1, "dt3":1, "end":0x03  };

je ne sais pas comment faire pour changer mon code php pour pouvoir envoyer cette trame json par le port usb vers l'arduino.

Un indice??

Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 23
Posts: 2054
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu veux dire envoyer par PHP une chaine JSON à l'Arduino ?
Ca devrait être du genre :
Code:
fwrite($fp, "{ \"str\":0x02, \"len\":0x04, \"cmd\":0x08, \"dt1\":1, \"dt2\":1, \"dt3\":1, \"end\":0x03  }" );

Et si les valeurs à passer sont des variables PHP de même nom:
Code:
fwrite($fp, "{ \"str\":" . $str . ", \"len\":" . $len . ", \"cmd\":" . $cmd . ", \"dt1\":" . $dt1 . ", \"dt2\":" . $dt2 . ", \"dt3\":" . $dt3 . ", \"end\":" . $end ." }" );

Si ta question est dans l'autre sens : comment récupérer en PHP des variables que l'Arduino transmet en JSON, je pense qu'il va falloir simplifier le format et écrire un petit "parser" de réponses car je ne connais pas d'équivalent de la fonction d'exécution du Javascript qui permet de traiter des réponse JSON (qui sont en fait du code Javascript).
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

pas trop de temps aujourd'hui j'essayerai
Code:
fwrite($fp, "{ \"str\":0x02, \"len\":0x04, \"cmd\":0x08, \"dt1\":1, \"dt2\":1, \"dt3\":1, \"end\":0x03  }" );

et par la suite oui il faudrait faire l'inverse  récupérer en PHP des variables que l'Arduino transmet en JSON.

Merci.
Logged

Offline Offline
Edison Member
*
Karma: 8
Posts: 1599
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

pas trop de temps aujourd'hui j'essayerai
Code:
fwrite($fp, "{ \"str\":0x02, \"len\":0x04, \"cmd\":0x08, \"dt1\":1, \"dt2\":1, \"dt3\":1, \"end\":0x03  }" );

et par la suite oui il faudrait faire l'inverse  récupérer en PHP des variables que l'Arduino transmet en JSON.

Merci.

bonjour,
ca pourrait ressembler à un truc comme ca
Quote
$retour = "str":0x02, "len":0x04, "cmd":0x08, "dt1":1, "dt2":1, "dt3":1,"end":0x03  ;
$resultat = explode ('":',$retour);
$str  = $resultat[0];
$len =  $resultat[1];
etc......

ou encore

Quote
$output = str:0x02, len:0x04, cmd:0x08, dt1:1,dt2:1, dt3:1,end:0x03  ;
parse_str($str, $output);
echo $output['str:'];  // 0x02
echo $output['len:'][0]; // 0x04
echo $output['cmd:'][1]; // 0x08
etc...


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
fwrite($fp, "{ \"str\":0x02, \"len\":0x04, \"cmd\":0x03, \"dt1\":1, \"dt2\":1, \"dt3\":1, \"end\":0x03  }" );
ca ne veut pas marcher.

L'arduino recoit bien une info mais ne la décode pas.
Voici le code de l'arduino
Code:
char c;
void setup()
{
    pinMode(8, OUTPUT);
   Serial.begin(9600);
 }
void loop()
{
     if (Serial.available() > 0)
       {  
         uint8_t lengthData = Serial.available();
         //digitalWrite(8,HIGH);
        char data[lengthData];
           int j = 0;
           String affi="";
           while(Serial.available())
           {
            // digitalWrite(8,HIGH);          // pour debug  fonctionne
                  c = Serial.read();
                  affi+=c;
                  j=j+1;
                  
                      switch (j)
                             {
                                case 5:
                                data[0]=c;                
                                break;
                                case 11:
                                data[1]=c;                
                                break;
                                case 17:
                                data[2]=c;                
                                break;
                                case 23:
                                data[3]=c;                
                                break;
                                case 29:
                                data[4]=c;                
                                break;
                                case 35:
                                data[5]=c;                
                                break;
                                case 41:
                                data[6]=c;                
                                break;                            
                              }}

              if(!Serial.available())
              {
               if (data[0]== '2')
                
               { digitalWrite(8,HIGH);           // pour debug  ne fonctionne  pas
               }
                if(data[0]== '2' && data[6]=='3')
    {
                
                  switch (data[2]) {
                                     case '3':
                                     if (data[4]=='1')
                                     {
                                    
                                          switch (data[3]) {
                                                             case '1':                                        
                                                                   //digitalWrite(8,HIGH);
                                                                   break;
                                                              case '2':
                                                                    digitalWrite(8,LOW);
                                                                    break;
                                                          
                                          }
                                          
                                      
                            }
                              
                                   }  
                               }  
         }
       }
}

une petite suggestion ??
« Last Edit: January 12, 2013, 11:17:59 am by archibal11 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 45
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai essayé plusieur chose dont en autre phpserial class mais je n'arrive pas coté arduino a décoder mon msg json et a récupérer les infos utiles..

Pour l'instant je vais donc rester l'ethernet shield branché sur l'arduino...
Merci quand même..
Logged

Pages: 1 [2]   Go Up
Jump to: