Affichage message Ecran Arduino - Formulaire PHP

Bonjour à tous,

Je souhaite avoir votre aide pour un projet où l’on voudrait avec un Arduino afficher un message dynamiquement.

En fait j’ai une page PHP avec un formulaire qui permet de sélectionner le message à afficher sur l’écran de l’Arduino. Un message fixe s’affiche bien dessus mais pour le message dynamique qui doit s’afficher quand on clique sur un bouton du formulaire, ça affiche une suite de nombre.

Si vous pouviez m’aider, voici le code PHP:

<?php $usb_comPort = "COM3"; switch($_POST) { case isset($_POST['submitOn']): exec("echo 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' > $usb_comPort"); break; case isset($_POST['submitOff']): exec("echo 2 > $usb_comPort "); break; } ?>

Test

">

et mon programme Arduino :
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
Serial.begin( 9600 );
lcd.begin(16, 2);
lcd.print(“salut”);
}

void loop() {
if (Serial.available()> 0) {

lcd.clear();

// read all the available characters

while (Serial.available() > 0) {
// display each character to the LCD

lcd.print(Serial.read());
//Serial.print(Serial.read());
}
}
}

Merci d’avance

hello un test, remplace par ça

while (Serial.available() > 0) 
   {
    char car=Serial.read();
    lcd.print(car);
   }

Mais ce que j'ai fais est bon ?

oui, remplace seulement le dernier while de ton prg par ce que je t'ai posté

saygl: exec("echo 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' > COM3");

Cette ligne est censée faire quoi ? Car j'ai de gros doute sur sa validité...

@bigben99 Cette ligne est censée envoyer le message AAAAA.... sur l'arduino pour qu'elle s'affiche sur l'écran. Sinon comment peut t-on régler ce problème ?

ton php s'exécute sur un serveur Windows ? Linux ? Quoi qu'il en soit, je ne crois pas que l'utilisation de la commande echo permettent de communiquer avec ton arduino.

Mon PHP s’exécute sur un serveur Wamp Windows en local et quand je clique sur un bouton du formulaire PHP on a bien une réaction de l'Arduino qui m'affiche une séquence de chiffres et RX qui clignote.

Comment faire alors ? Merci de votre aide

Bonjour

exec("echo 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' > COM3");

La commande ECHO est une commande de la ligne de commande de Windows qui affiche le texte qui suis. Le ">" est une redirection vers le COM3, donc le port serie

"exec" est une commande PHP qui permet d’exécuter une commande système. Donc que sous Windows car pas de COM3 sous d'autre OS (enfin je pense)

Un autre moyen que je ne connais pas mais je pense que ça doit exister, serait d'utiliser le port série directement en PHP.

a+

Donc ça ne peut pas fonctionner comme ça ?

@dfgh j'ai remplacé dans mon programme par ce que tu as mis mais ça ne marche pas :(

Donc ça ne peut pas fonctionner comme ça ?

Bein si ça fonctionne comme ça avec ton exemple en dur, c'est bon, mais que sous Windows. Si c'est bon pour toi, y a pas de problème.

Pour que ça fonctionne avec une variable, c'est a toi de bien construire la requête a faire exécuter par EXEC() en utilisant soit une variable temporaire, soit de chaîner les variables et textes dans l'argument de EXEC . La commande EXEC attend 1 paramètre et doit être envoyé en une seul fois.

exec("echo 'ma variable : ".$VariableATransferer."' > COM3");

OK j’ai testé mais ça ne fonctionne pas, peut-être un problème dans l’encodage des caractères ?

je viens de tester vite fait avec EasyPHP sous windows 8.1 64bits et sur un UNO seul

code PHP

<?php 
if (isset($_REQUEST["txt"]))
{
	exec("echo '".$_REQUEST["txt"]."'>COM3");
}
?>
<a href="?txt=A">Allumer</a>

<a href="?txt=B">Eteindre</a>

Code “arduino”

void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH); 

}

void loop() {
  // put your main code here, to run repeatedly:
    if (Serial.available())
    {
     char a = Serial.read();
      if (a=='A') digitalWrite(13, HIGH); 
      if (a=='B') digitalWrite(13, LOW); 
    }
}

et cela marche très bien.

NB: Juste changer le COM3 pour que ça colle avec le port serie qui va bien

a+

Un autre truc que je viens de pense, le baudrate.

Nouveau test : J'ai modifié dans le moniteur serie la vitesse a 38400 baud, puis refermé le moniteur. et bien ça ne fonctionne plus. Pour que ça refonctionne, j'ai du reparametrer le port com avec la ligne de commande

mode com3 BAUD=115200 PARITY=N data=8

donc faire un exec au debut du script avec cette ligne ci dessus

a+

Je dois paramétrer avec ce qui est au dessus @caape sur le script Arduino ?

Si dans ton programme arduino, tu utilise le Serial a 115200, il faut indiquer a Windows (pour la commande EXEC en PHP) a qu'elle vitesse du écris sur le Serial donc avec la ligne 'mode ...' avec une autre commande EXEC dans ton script PHP.

Mon programme arduino n'est qu'un exemple pour faire le test. S'il reçoi un 'A', il allume la DEL13. S'il reçoi un 'B', il éteint la DEL13. et il teste ça en boucle. C'est une façon de faire le test que j'ai trouvé sans mettre un LCD sur mon UNO.

Le script PHP ne fait qu'envoyer A ou B sur le COM3 en fonction du lien cliqué.

A toi de modifier ton programme et ton script pour qu'ils fassent se que tu désire en utilisant cette base qui fonctionne bien.

a+

Ok merci beaucoup à tous, je vais tester ça et reviendrai si j'ai des difficultés et des questions.