2017-01-14 5 views
2

Ich benutze ein Raspberry PI (Jessi), um eine Zeichenfolge von Hex-Zeichen an ein Gerät über den seriellen Anschluss (USB zu seriellen Anschluss) zu senden. Ich verwende den folgenden Befehl erfolgreich über die Befehlszeile:Write hex zum seriellen Port von PHP

echo -en "\x63\x69\x72\x62\x0d" > /dev/ttyUSB0 

ich die gleiche Sache mit PHP auf demselben Raspberry Pi tun will, aber wenn ich versuche, den gleichen Befehl aus einer PHP-Datei senden ich nicht bekommen das gewünschte Ergebnis. Beispiel PHP-Code:

var_dump(shell_exec('echo -en "\x63\x69\x72\x62\x0d" > /dev/ttyUSB0')); 

Ich habe eine Menge Dinge versucht, diese Funktion zu erhalten:

  • Ich habe hinzugefügt www-data (PHP-Benutzer) zu einer Gruppe dialout (Gruppe für/dev/ttyUSB0)
  • I chmod 777 für/dev/ttyUSB0
  • ich überprüft haben, festgelegt haben, dass PHP auf/dev/ttyUSB0 schreiben kann (is_writable())
  • ich viele verschiedene stty Einstellungen ausprobiert haben (zB: stty -F/de v/ttyUSB0 -isig -icanon)
  • Ich habe verschiedene Wege in PHP versucht, auf den seriellen Port zu schreiben (PhpSerial-Bibliothek, pack() und fwrite(), printf() usw.) Unter anderem.

Ich habe nicht einen Weg, um zu sehen, genau das, was PHP schreibt auf/dev/ttyUSB0 (Bildschirm, minicom), aber ich weiß, dass es etwas tut, da, nachdem ich versucht habe, den PHP-Skript das nächste Mal, wenn ich versuche, von der gefunden Kommandozeile es funktioniert nicht. Das zweite Mal, nach dem Versuch von PHP, ist der Versuch von der Kommandozeile erfolgreich.

Ich habe versucht, die PHP-Datei über die Befehlszeile (CLI, sowohl PHP5 und PHP7) und die Verwendung des Webservers ausgeführt, aber nichts funktioniert.

Ich habe alle Dinge ausprobiert, die mir einfielen und online gefunden, aber ich kann es immer noch nicht zur Arbeit bringen.

Was könnte dieses Problem verursachen? Der Befehl funktioniert, ich möchte es nur mit PHP ausführen, aber es wird nicht ausgeführt. Anderer Befehl, den ich versuche, PHP, arbeitet - zum Beispiel:

var_dump(shell_exec('whoami')); 

Update # 1 ich eine Bash-Skript-Datei mit dem Arbeitsbefehl erstellt und auch ein Echo „ok“ wieder hinzugefügt eine Ausgabe zu erhalten. Die Datei funktioniert, wenn sie über die Befehlszeile ausgeführt wird, aber wenn ich versuche, sie von PHP auszuführen, bekomme ich das "ok" zurück, aber es kann immer noch nicht das verbundene Gerät beeinflussen. Ich versuchte, die Bash-Skript von der Kommandozeile als www-data Benutzer und das funktioniert zu laufen, aber noch nichts, was ich PHP tun mit funktioniert:

sudo -u www-data bash -c '/home/test/cmd' 

Update # 2 die gleiche Sache auf eine andere Versuchte Computer, läuft Kodi, mit dem gleichen negativen Ergebnis. Der Befehl funktioniert, aber nicht, wenn er mit PHP ausgeführt wird.

Antwort

0

Ich stieß auf ein ähnliches Problem. Was ich schließlich herausfand, war, dass der Benutzer httpd (ich habe CentOS - der Apache-Benutzer könnte auf Ihrem Linux-Stil anders sein) keine Schreibrechte auf/dev/ttyS0 hatte.

// Grants Schreibrechte auf/dev/ttyS0 für alle Benutzer

sudo chmod a + w/dev/ttyS0

Es wäre ein bisschen mehr elegant sein, herauszufinden, wie Nur dem httpd-Benutzer statt aller Benutzer auf dem Computer Schreibberechtigung erteilen.

Hoffe das hilft dir aus!

+0

Wie Sie oben sehen können, habe ich sogar versucht, chmod 777 für/dev/ttyUSB0, also schreiben Berechtigungen war nicht mein Problem. – AxAn

Verwandte Themen