2015-09-05 2 views
3

J'ai un morceau de code simple qui fonctionne sur un environnement Windows - WAMP, par exemple.Appel PHP port série USB de Windows à Linux

<?php 

`mode com3: BAUD=38400 PARITY=N data=8 stop=1 xon=off`; 

file_put_contents(com3, chr(1).chr(255).chr(1).chr(4).chr(64).chr(5)); 

?> 

Il se connecte via un câble USB (à l'aide des pilotes USB-série) à un circuit embarqué à la lumière des LED, et il fonctionne très bien - donc de la même logiciel windows comme 232Analyser, peut se connecter à COM3 et envoyer le code dans DEC comme 1,255,255,255,255,5, et allumer les LED. Le nombre 255, est un nombre DEC de: 1,2,4,8,16,32,64,128,255 qui allume une certaine LED en fonction du numéro qui est appelé. Quoi qu'il en soit, le code ci-dessus fonctionne correctement sous Windows et allume les voyants en appelant ce fichier PHP. Donc, peut appeler une URL comme: http://localhost/lightled.php qui fonctionne bien.

Maintenant, j'ai besoin de travailler via Linux, sur un Raspberry Pi, donc je viens d'installer Raspberry Linux standard, et Apache avec PHP.

ensuite attaché le câble USB, et il semble que/dev/ttyUSB0 Je puis chmod 777/dev/ttyUSB0

et ils ont changé le code PHP pour:

<?php 

`mode /dev/ttyUSB0: BAUD=38400 PARITY=N data=8 stop=1 xon=off`; 

file_put_contents('/dev/ttyUSB0', chr(1).chr(255).chr(1).chr(4).chr(64).chr(5)); 

?> 

Cependant appeler ce fichier sur Linux dans un navigateur n'allume pas les LED, comme sur Windows.

Maintenant, quand j'appelle ce fichier il passe sans erreurs, sans chmod 777, il a donné une permission refusée erreur. Donc, il semble que ça se passe bien, mais quelque chose d'autre est faux.

Donc, personne ne sait comment le faire fonctionner sous Linux, c'est peut-être parce que j'appelle la mauvaise connexion USB, ou Raspberry Linux a besoin de pilotes, ou "mode" doit être défini différemment ... ou peut-être le code décimal/binaire envoyé n'est pas juste comme "chr (2)" etc. doit être différent et ne sera pas envoyé de la même manière sur une installation LAMP.

Des idées sur ce que je peux essayer?

Merci.

+0

Il est possible que l'erreur ne soit pas dans PHP. Vous pouvez essayer de vérifier si votre commande ('mode ...') s'exécute à partir de la ligne de commande. Si vous obtenez un message ** command not found ** ou une erreur de ce type, vous devez rechercher la commande équivalente sous Linux. –

+1

oui votre droite, "mode" ne fonctionne pas sous Linux, je ne me suis pas rendu compte de ce qu'il faisait :-) ... comme ci-dessous en utilisant "stty" à la place cela a fonctionné. –

Répondre

1
`mode /dev/ttyUSB0: BAUD=38400 PARITY=N data=8 stop=1 xon=off`; 

Il n'existe aucune commande mode dans Linux.

L'équivalent le plus proche est stty, mais ne prend pas les mêmes arguments de ligne de commande. Vous devrez effectuer une traduction. lisez la page de manuel pour stty pour plus de détails.

+0

merci, cela a fonctionné, en partie, à partir de la coque j'ai tapé: stty -F/dev/ttyUSB0 38400 et cela a ensuite permis aux voyants de s'allumer via le code linux php. Je n'ai pas encore trouvé comment exécuter la commande depuis PHP, donc j'essaierai ça. –