IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

php et webserver Arduino


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 7
    Points
    7
    Par défaut php et webserver Arduino
    Bonsoir,

    J'ai un arduino avec un web-server et qui est relié à un clavier pour faire un digicode.
    J'ai un problème dans ma page php, c'est pourquoi je vous demande de l'aide.

    J'ai fait dans ma page php un Data Log qui me permet de vérifier pas à pas.


    Ce qui fonctionne...


    Si à partir d'une page web, j'envoie ce code vers la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://192.168.1.3/domotique/traitement-digicode.php?Code=1234
    J'envoie la variable à la page web, elle fait une requête Sql et si le code est bon, envoie à l'arduino la lettre "M".
    L'arduino reçoit bien l'instruction et active la sortie.


    Ce qui fonctionne pas encore...


    1/ Dans l'arduino, lorsque le code est saisi par le clavier et validé par #, il envoie le code à la page PHP --> Ok (fonctionne vérification par le data log)


    2/ La page PHP fait bien une requète Sql et vérifie si le code est bon --> Ok (fonctionne vérification par le data log)

    3/ La page PHO envoie une commande à l'Arduino et là ça passe pas --> NON (fonctionne PAS vérification par le data log)


    J'ai essayé avec les commandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('Location: http://192.168.1.52?M');
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://192.168.1.52/?M">' ;
    Je ne comprends pas pourquoi ça ne fonctionne pas ????

    Je vous fais parvenir le code en entier.

    Je vous remercie d'avance de votre aide !

    Merci d'avance.

    Pierre

    Voilà la page php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
     
     
    <?php
    error_reporting(E_ALL);
    if (isset($_GET['Code']) ) // lecture code
    {
     $Code=$_GET['Code'];
     addLogEvent("Reception d'une variable"); //enregistrement log
    }
    else // Il manque des paramètres, on avertit le visiteur
    {
     echo 'Erreur code';
     $Code='0';
     addLogEvent("erreur variable"); //enregistrement log
    }
     
    $servername = '127.0.0.1'; //  
    $username = 'xxxxx';    // 
    $password = 'xxxxxx';
    $dbname = 'xxxxxx';
     
     
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
     addLogEvent("erreur connection sql");//enregistrement log
    } 
     
    $sql = "SELECT * FROM digicode WHERE Code='$Code'";
    $result = $conn->query($sql);
     
    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
           // echo "Code: " . $row["Code"]. "Type: " . $row["Type"]."<br>";
     $Type = $row["Type"];
     
     if ($Type == "M") 
     {
     //header('Location: http://192.168.1.52?M');
     echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://192.168.1.52/?M">' ;
     
     addLogEvent("code M"); //enregistrement log
     
     exit();
     }
     
     
     
     if ($Type == "V") 
     {
     
     //header('Location: http://192.168.1.52/?V');
     echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://192.168.1.52/?V">' ;
     addLogEvent("code V"); //enregistrement log
     exit();
     }
     
        }
    } else {
        echo "0 results";
    }
    $conn->close();
     
    function addLogEvent($event) // fonction enregistrement fichier log
    {
        $time = date("D, d M Y H:i:s");
        $time = "[".$time."] ";
     
        $event = $time.$event."\n";
     
        file_put_contents("fichier.log", $event, FILE_APPEND);
    }
     
    ?>

    Et pour info, le code arduino :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
     
     
     
    #include <SPI.h> //bibliothèqe pour SPI
    #include <Ethernet.h> //bibliothèque pour Ethernet
    #include <Keypad.h> // inclusion de la librairie pour clavier matriciel
    byte mac[] = {0x90, 0xA2, 0xDA, 0x0F, 0xDF, 0xAB}; //adresse mac de votre carte
    IPAddress IPserver(192,168,1,3);
    IPAddress IParduino(192,168,1,52);
    EthernetServer serveur(80); // déclare l'objet serveur au port d'écoute 80
     
            // Clavier
            //********
     
            const int BrocheClavier1 = 2; 
            const int BrocheClavier2 = 3;
            const int BrocheClavier3 = 4;
            const int BrocheClavier4 = 5;
            const int BrocheClavier5 = 6;
            const int BrocheClavier6 = 7;
            const int BrocheClavier7 = 8;
     
            char Clavier[5];
            int compteur = 0;
     
            const byte ROWS = 4; // Définition du nombre de lignes
            const byte COLS = 3; // Définition du nombre de colonnes
            char keys[ROWS][COLS] = {
              {'1','2','3'},
              {'4','5','6'},
              {'7','8','9'},
              {'*','0','#'}
            };
     
     
            byte rowPins[ROWS] = { BrocheClavier7, BrocheClavier6, BrocheClavier5, BrocheClavier4}; // Définition des ports où sont raccordées les lignes
            byte colPins[COLS] = {BrocheClavier3, BrocheClavier2, BrocheClavier1}; // Définition des ports où sont raccordées les colonnes
     
            Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Création du clavier
     
            int Code ; // Code pour digicode
     
    void setup()
    {
    pinMode(13, OUTPUT);
    pinMode(10, OUTPUT);
    digitalWrite(13, LOW);
    digitalWrite(10, LOW);
     
      Serial.begin (9600); //initialisation de communication série
      Ethernet.begin (mac, IParduino); //initialisation de la communication Ethernet
     
      Serial.print("*\n-> Le serveur est sur l'adresse : ");
      Serial.println(Ethernet.localIP()); //on affiche l'adresse IP de la connexion
      EthernetClient client;
      serveur.begin(); // démarre l'écoute
    }
     
    void loop() {
     
    // Lecture clavier
    //---------------------
     
     
      char key = keypad.getKey(); // Lecture de la touche actionnée
     
      if (key != NO_KEY)    // Si une touche est actionnée
      {
     
          Clavier[compteur++]= key;
          Clavier[compteur]= '\0';    // termine la chaîne de caractères
     
              if (key == '#')  // clavier digiode
                  {
     
                   Code= atoi(Clavier);     // conversion en int
                   compteur = 0;
                   Serial.println(Code);
                   //gestionClient();
                  Envoyer();
          // return;
                  }
     
       }
     
      gestionClient(); // fonction qui gère toute la communication avec le client
     
    }
     
    //----------------------Fonctions----------------------
    //fonction qui gère la communication avec le client
     
    void gestionClient() {
     
     EthernetClient client = serveur.available(); //on écoute le port
      if (client) { //si client existe
        Serial.print("Code dans la fonction gestion client");
    Serial.println(Code);
        Serial.println("Client en ligne"); //on le dit...
       while (client.connected()) { // si le client est connecté
          GET(client); //appel de la fonction de décodage
         Serial.println("Fin de communication avec le client\n");
         client.stop(); //on déconnecte le client
     
        }
      }
    }
     
     
     
    //fonctin décodage GET
     
    void GET(EthernetClient cl) {
      boolean lu = 0; //variable pour indiquer l'état de lecture
      while (cl.available()) { // tant qu'il a des infos à transmettre
        char c = cl.read(); // on lit le caractère
        delay(1); //delai de lecture
        if (c == '?' && lu == 0) { //si "?" repéré
          c = cl.read(); //on lit le caractère suivant qui contient la donnée
          int lecture = int(c); //on la transforme en nombre
     
            if (lecture == 77)
            {
              Serial.println("Code Master\n");
              digitalWrite(13, HIGH);
              }
     
            else if (lecture == 86) 
            {
              Serial.println("Code Visiteur\n");
              digitalWrite(10, HIGH);
              }
     
            else
            {
            Serial.println("erreur code\n");
            }
     
         delay(1000);
          lu = 1; // on dit qu'on a lu l'info
         digitalWrite(13, LOW);
         digitalWrite(10, LOW);
        }
     
      }
    }
     
     
     void Envoyer() {
      EthernetClient client;
    if (client.connect(IPserver, 80))
        {
        Serial.println("-> Connected");
        // Make a HTTP request:
        client.print( "GET /domotique/traitement-digicode.php/?Code=");
        Serial.println("GET /domotique/traitement-digicode.php?");
     
       // client.print("Code=");
       // Serial.println("Code=");
     
        client.print(Code);
        Serial.println(Code);
     
        //client.print("&&");
        client.println( " HTTP/1.1");
        client.println( "Host: 192.168.1.3" );
       // client.println(IPserver);
         //client.println( "Content-Type: application/x-www-form-urlencoded" );
        client.println( "Connection: close" );
        client.println();
        client.println();
        client.stop();
        }
    else {
        // kf you didn't get a connection to the server:
        Serial.println("connection failed");
      }
     
    }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    3/ La page PHO envoie une commande à l'Arduino et là ça passe pas --> NON (fonctionne PAS vérification par le data log)
    Comment peux-tu dire si ça fonctionne ou pas ? Qu'attends-tu comme résultat ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Bonsoir Sabotage,

    Merci de t'intéresser à mon problème

    J'ai fait une fonction data log que je lance à chaque étape. Après, j'ouvre le fichier pour vérifier ce qui a fonctionné ou pas.


    J'attends l'équivalent du résultat de ce que je saisi manuellement dans un navigateur avec l'adresse suivante : http://192.168.1.52?M

    C'est la variable M que je passe dans la barre d'adresse et http://192.168.1.52 est l'adresse IP de l'arduino.

    Donc dans la barre d'adresse d'un navigateur ça fonctionne mais pas depuis la page en php.

    J'ai essayé avec les commandes :

    header('Location: http://192.168.1.52?M');

    ou encore :

    echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://192.168.1.52/?M">' ;

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que ton navigateur est bien redirigé sur la page http://192.168.1.52?M ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Que veux-tu dire avec rediriger ?

    Avec un navigateur ça fonctionne mais ça doit se faire automatiquement dans la page php pour l'instant dans un serveur lamp.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ta redirection qu'elle soit en HTTP ou en Javascript ne peut pas fonctionner puisqu'il n'y a pas de client web pour la traiter.

    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    readfile('http://192.168.1.52?M');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 24
    Points : 7
    Points
    7
    Par défaut
    Si si c'est le webserver qui fait cette fonction, regarde ici :

    http://eskimon.fr/2597-arduino-803-a...veur#interface

    Le code que tu me proposes, c'est un code dans une page html et ça fonctionne comme dans un navigateur

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le code que tu me proposes, c'est un code dans une page html
    gné ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [EDI] Quel est l'éditeur que vous recommandez pour PHP ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 400
    Dernier message: 10/04/2018, 20h08
  2. Intensité led (Arduino-RPI) Python/PHP
    Par Yandrosa dans le forum Raspberry Pi
    Réponses: 10
    Dernier message: 17/11/2016, 22h25
  3. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  4. [MySQL] PHP 5.4 built-in webserver + PDO
    Par Fryck dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/03/2012, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo