La lecture et l'écriture à/à partir de série de l'appareil via le port USB sur Linux avec perl ou PHP
Je vais avoir un problème de lecture à partir d'un périphérique série sur Linux. Le problème est assez bizarre, et je n'étais pas en mesure de préciser les causes.
Je suis de l'ouverture de la /dev/ttyUSB0 file
avec PHP et de commencer à communiquer avec le dispositif selon l'appareil du protocole. Combien de fois j'ai rencontré une situation où le script PHP attend pour le périphérique de répondre. Quand j'ai couru un script Perl en parallèle, qui devait faire de même, il a envoyé une demande pour le même appareil, et de quitter soi-disant sans obtenir de réponse. Puis j'ai vu que le script PHP obtenu la réponse (après le script Perl a envoyé une demande).
J'ai rencontré une question analogue lorsque vous essayez de lire un Arduino avec PHP. Le PHP n'a obtenu aucune réponse de la part du port, mais Arduino IDE de Série du Moniteur imprimer.
Je pense que je vais manquer une chose essentielle à propos de Linux, les fichiers et les ports USB ici. Quel pourrait être le problème? Comment puis-je savoir quels programmes utilisent le port/fichier?
$usb = 'ttyUSB0';
`stty -F /dev/$usb 9600`;
`stty -F /dev/$usb -parity`;
`stty -F /dev/$usb cs8`;
`stty -F /dev/$usb -cstopb`;
$f = fopen("/dev/$usb", "r+");
if(!$f) {
echo "error opening file\n";
exit;
}
statusRequest($f);
sleep(1);
$c = readPort($f);
echo "$c\n";
function statusRequest($port) {
$data = "request";
fwrite($port, $data);
fflush($port);
}
function readPort($port) {
$read = 1;
$c = '';
while($read > 0) {
$bytesr = unpack("h*", fread($port, 1));
$c .= $bytesr[1];
//echo $bytesr[1];
if($bytesr[1] == 'ff') {
$read = 0;
}
}
return $c;
}
OriginalL'auteur MeLight | 2011-02-16
Vous devez vous connecter pour publier un commentaire.
Consulter ces deux articles sur mon wiki. Le premier article décrit comment définir utile autorisations sur le noeud de périphérique. Le deuxième article est un exemple qui imprime toutes les données que la télécommande envoie à l'ordinateur. Bien qu'écrit pour Arduino, il est facilement porté pour d'autres utilisations.
À l'aide de
lsof
vous pouvez trouver le programme qui est actuellement en utilisant le port:lsof | grep /dev/ttyUSB0
cat_ttyUS 19182 jhendrix 3u CHR 188,0 0t0 14519955 /dev/ttyUSB0
Avec le stty commandes vous ne pas verrouiller le port pour un usage exclusif.
OriginalL'auteur jippie