Communication entre Windows PHP et Arduino

Carte Arduino J’ai reçu une carte Arduino de chez RS qui m’ont gentiment demandé de l’évaluer. En projet, j’ai décidé de créer une station météo hébergée sur mon Synology (ou mon Raspberry Pi, je n’ai pas encore décidé), je dois lire des valeurs depuis l’Arduino. Pour l’instant, je développe et débugge sous Windows et je suis tombé sur un comportement étrange de la carte Arduino. Lorsque la communication est établie (en PHP, entre le PC et la carte via une liaison série / USB), un RESET est envoyé à la carte Arduino.

C’est embêtant, surtout si un programme est en cours d’exécution sur la carte et qu’il ne doit pas être interrompu. Et puis dans un article précédent, je vous expliquais comment créer un protocole de communication entre votre PC et votre Arduino. Dans cet article nous verrons comment résoudre ces problèmes :

  • Empêcher le RESET de la carte Arduino.
  • Comment communiquer de manière élaborée entre PHP et Arduino.

Code PHP de communication bidirectionnelle

Décortiquons un exemple de script PHP :

<?php
 exec("mode com3: BAUD=9600 PARITY=N data=8 stop=1 xon=off dtr=off");
 $fp = fopen("COM3", "w+");
 fwrite($fp, "<WriteDigital|13|1>");
 echo "LED on<br />\n";
 sleep(2);
 fwrite($fp, "<WriteDigital|13|0>");
 echo "LED off<br />\n";
 fwrite($fp, "<Echo|This is a test>");
 sleep(1);
 $content = fgets($fp, 2096);
 echo "Return = $content\n";
 fclose($fp);
 ?>

Dans cet exemple :

  1. On commence par fixer le mode de communication qui sera utilisé par Windows pour communiquer en série avec la carte Arduino. L’option DTR évite un reset de la carte à chaque ouverture du port série.
  2. Ouverture du port en lecture / écriture.
  3. Envoi d’un message WriteDigital (qui respecte le protocole de communication de mon crû). Allume la LED connectée à la broche 13.
  4. Envoi d’un message WriteDigital. Éteint la LED connectée à la broche 13.
  5. Envoi d’une commende Echo. Cette commande retourne la chaîne de caractère passée en paramètre.
  6. Mettre une pause pour permettre à la carte d’exécuter la commande et de transmettre le résultat.
  7. Affiche le message et ferme la connexion au port série. Si vous le laissez ouvert, aucun autre processus ne pourra l’utiliser et il faudrait arrêter / relancer Apache pour pouvoir le réutiliser.

 

2 réflexions au sujet de « Communication entre Windows PHP et Arduino »

  1. sam

    Bonjour j’ai essayé votre code php et votre code pour la partie protocole de communication, mais j’ai remarqué que la partie reception ne se déroule pas ? pourriez vous m’eclairez la dessus

    Répondre
  2. FERRANT

    le com4 (pour ma carte arduino) ne peut être ouvert par ce programme PHP lancé avec easy PHP sous windows7 et j’obtiens le message d’erreur:
    Warning: fopen(COM4): failed to open stream: No such file or directory in D:\EasyPHP-12.1\www\Arduino.php on line 3

    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\EasyPHP-12.1\www\Arduino.php on line 4
    LED on

    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\EasyPHP-12.1\www\Arduino.php on line 7
    LED off

    Warning: fwrite() expects parameter 1 to be resource, boolean given in D:\EasyPHP-12.1\www\Arduino.php on line 9

    Warning: fgets() expects parameter 1 to be resource, boolean given in D:\EasyPHP-12.1\www\Arduino.php on line 11
    Return =
    Warning: fclose() expects parameter 1 to be resource, boolean given in D:\EasyPHP-12.1\www\Arduino.php on line 13
    Merci pour votre aide. Gérard FERRANT

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *