A ok je n'avais pas compris ça Oui effectivement c'est pas bête du tout, je vais voir si je trouve des infos là-dessus parce que je ne connais pas les fonctions PHP concernant le Serial.
Pour être sûr : le fameux script en php qui tournera sur la RPi, on l'écrit dans n'importe quel éditeur de texte sur la RPi ou alors il faut quelque chose en particulier ? Ça peut paraitre débile comme question mais sur PC j'utilise Sublim Text et je sais pas si la RPi à un équivalent ^^'
Donc, j'ai suivi t'es conseils et j'ai cherché sur internet comment faire.
J'ai d'abord fais des test sur la console de ma RPi pour essayer d'afficher un mot venant d'un script php, et ça à fonctionné, reste plus qu'à le faire avec l'arduino.
<?php
include "php_serial.class.php";
// Let's start the class
$serial = new phpSerial;
// First we must specify the device. This works on both linux and windows (if
// your linux serial device is /dev/ttyS0 for COM1, etc)
$serial->deviceSet("/dev/ttyACM0");
// Then we need to open it
$serial->deviceOpen();
// To write into
$serial->sendMessage("Hello !");
// Or to read from
$read = $serial->readPort();
print($read);
// If you want to change the configuration, the device must be closed
$serial->deviceClose();
// We can change the baud rate
$serial->confBaudRate(2400);
// etc...
?>
Script qui est sensé lire et/ou écrire via une connexion série. J'ai donc rapidement écris un programme sur arduino :
Merci du conseil, ça à effectivement changé un petit peu : maintenant, la console lance le script mais n'affiche rien du tout comme si elle était dans une boucle infinie. Je me suis demandé si cela pouvait pas venir d'un problème que j'ai vu sur d'autres post, à savoir que l'arduino se reset entièrement à l'ouverture du port serie ?
Ok je ne savais pas que while(1) est une boucle infinie
Du coup j'ai cherché sur internet des infos pour pouvoir désactiver ce fameux reset automatique et je pense avoir trouvé cette commande :
stty --file=/dev/ttyUSB0 crtscts -hupcl
Mais le truc c'est que je sais pas comment revenir à la normale et réactiver le reset (car mon projet n'est pas fini et il va falloir modifier le code de la carte arduino encore et encore ). Ainsi, je n'ai pas osé essayer cette commande par peur d'être bloqué Et j'ai beau chercher, je ne trouve pas grand chose d'utile, Donc situ sais comment faire, je suis preneur
Du coup j'ai fait un truc auquel nous n'avions pas pensé mais qui est tout bête : installer l'IDE d'arduino directement sur la Raspberry Ce qui fait que on a juste besoin de mettre le programme dans l'arduino via la raspberry et le tour est joué. Donc ce problème = résolu
Maintenant, je suis sur l'insertion de cette donnée envoyé par l'arduino dans ma base de données. Pour ça j'ai codé le bon truc en PHP mais j'ai à nouveau un petit problème : les délais...
Je m'explique : ma carte arduino envoi en permanence un nombre "42" et le programme qu'on a vu précédemment s'occupe de lire ce chiffre et de l'envoyer à la base de données :
<?php
include "php_serial.class.php";
// Let's start the class
$serial = new phpSerial;
// First we must specify the device. This works on both linux and windows (if
// your linux serial device is /dev/ttyS0 for COM1, etc)
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
// Then we need to open it
$serial->deviceOpen();
// To write into
//$serial->sendMessage("Hello !");
while (1) {
// Or to read from
$read = $serial->readPort();
print("$read");
mysql_connect("ip_serveur", "name", "mdp") or die (mysql_error ());
mysql_select_db("name") or die(mysql_error());
$strSQL = "INSERT INTO test(id,heure,temp_int,temp_ext,lum,pluie,humValor) VALUES('','','$read','','','','')";
mysql_query($strSQL) or die (mysql_error());
mysql_close();
}
// If you want to change the configuration, the device must be closed
$serial->deviceClose();
// We can change the baud rate
//$serial->confBaudRate(2400);
?>
(Notez que j'ai laissé plein de ' ' dans ma requête pour ma BdD car il y a plusieurs colonnes que je n'utilise pas pour mon test)
Et le truc c'est que ça va trop vite et que le script php à le temps de créer 300 lignes dans ma BdD entre chaque insertion du chiffre "42"... Donc c'est pas vraiment bon tout ça... Ducoup j'ai essayé de mettre un "break;" à la fin de la boucle mais là pour le coup, le script de l'arduino est trop lent est aucune données ne peut être rentrées dans la BdD.
Donc si tu as une idée..
Merci d'avance !
Edit : je suis peut-être plus dans le bon forum pour ce genre de question ?
Oui j'ai déjà essayé cette méthode mais je pense que le problème vient plus de mon script php qui boucle à l'infini et surtout qui effectue beaucoup de chose très vite. Ducoup, dans ma BdD, je me retrouve avec plein de lignes de "0" et de temps en temps une ligne avec "42" Donc peut être que la solution serait de "contrôler" le while(0) du script php ?
Je ne connais pas la classe php_serial.class.php mais si celle-ci ne bloque pas le script temps qu'il n'y a pas de données de disponible, alors tu vas effectivement avoir un problème car tu vas insérer du vide dans ta base de données.
Et comme ta colonne doit être un type int, ce vide se transforme en 0.
while(!empty($read)){
$read = $serial->readPort();
print("$read");
mysql_connect("ip", "name", "mdp") or die (mysql_error ());
mysql_select_db("name") or die(mysql_error());
$strSQL = "INSERT INTO test(id,heure,temp_int,temp_ext,lum,pluie,humValor) VALUES('','','$read','','','','')";
mysql_query($strSQL) or die (mysql_error());
mysql_close();
break;
}
Mais ça n'a pas fonctionné, enfin du moins, il n'y a aucun bug mais je n'ai aucun "42" dans ma BdD donc je pense que ce n'est pas la bonne méthode...
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.