2017-01-14 36 views
2

我正在使用Raspberry PI(Jessi)向使用串行端口(USB到串行端口)的設備發送一串十六進制字符。 我成功地用下面的命令在命令行:將十六進制寫入串行端口從PHP

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

我想用同一樹莓派PHP做同樣的事情,但是當我嘗試從一個PHP文件發送相同的命令,我不明白期望的結果。 例PHP代碼:

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

我已經嘗試了很多東西得到這個工作:

  • 我已經加入WWW的數據(PHP用戶)組撥出(組的/ dev/ttyUSB0 )
  • 我已經設置搭配chmod 777的/ dev/ttyUSB0
  • 我已經驗證了PHP可以寫入到/ dev/ttyUSB0(is_writable())
  • 我已經嘗試了很多不同的stty設置(例如:stty的-F/de v/ttyUSB0 -isig -icanon)
  • 我嘗試過不同的方法在PHP中寫入串口(PhpSerial庫,pack()和fwrite(),printf()等) 等等。

我還沒有找到一種方法,看看到底是什麼PHP被寫入到/ dev/ttyUSB0(屏幕,小型機),但我知道它做一些事情,因爲之後我已經下一次嘗試的PHP腳本,我從嘗試命令行它不起作用。第二次,嘗試從PHP後,從命令行嘗試成功。

我曾嘗試從命令行(CLI,PHP5和PHP7)運行PHP文件並使用Web服務器,但沒有任何工作。

我嘗試了所有我能想到的,並在網上找到的東西,但我仍然無法使其工作。

什麼可能導致此問題? 該命令的工作原理,我只是想使用PHP運行它,但它沒有這樣做。其他命令我嘗試使用PHP,工作 - 例如:

var_dump(shell_exec('whoami')); 

更新#1 我創建工作命令bash腳本文件,還增加了回聲「OK」來獲得一些輸出回來。該文件從命令行運行時工作,但是當我嘗試從PHP運行它時,我得到了「ok」,但它仍然無法影響連接的設備。 我試圖在命令行作爲WWW的數據用戶運行bash腳本和這樣的作品,但仍沒有我不使用PHP的工作原理:

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

更新#2 試圖在另一個同樣的事情電腦,運行Kodi,同樣的負面結果。該命令可以工作,但不是在使用PHP運行時。

回答

0

我遇到了類似的問題。我最終發現的是,用戶httpd(我正在運行CentOS - apache用戶可能與你的Linux風格不同)沒有對/ dev/ttyS0的寫入權限。

//資助寫在/ dev/ttyS0來允許所有用戶

sudo的一個搭配chmod + W的/ dev/ttyS0來

那會是多一點優雅弄清楚如何只允許寫入權限給httpd用戶,而不是機器上的所有用戶。

希望這可以幫助你!

+0

正如你在上面看到的,我甚至爲/ dev/ttyUSB0嘗試了chmod 777,所以寫入權限並不是我的問題。 – AxAn