簡體   English   中英

從PHP將十六進制寫入串行端口

[英]Write hex to serial port from PHP

我正在使用Raspberry PI(Jessi)通過串行端口(USB到串行端口)將十六進制字符字符串發送到設備。 我從命令行成功使用了以下命令:

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

我想在同一Raspberry Pi上使用PHP做同樣的事情,但是當我嘗試從一個PHP文件發送相同的命令時,卻沒有得到想要的結果。 示例PHP代碼:

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

我已經嘗試了很多方法來使其工作:

  • 我已將www-data(PHP用戶)添加到組撥出(/ dev / ttyUSB0的組)
  • 我已經將chmod 777設置為/ dev / ttyUSB0
  • 我已經驗證PHP可以寫入/ dev / ttyUSB0(is_writable())
  • 我嘗試了很多不同的stty設置(例如:stty -F / dev / ttyUSB0 -isig -icanon)
  • 我嘗試過用PHP中的其他方式寫入串行端口(PhpSerial庫,pack()和fwrite(),printf()等)。

我還沒有找到一種方法來確切了解PHP正在寫入/ dev / ttyUSB0(屏幕,minicom),但是我知道它可以執行某些操作,因為在我下次嘗試從命令行嘗試PHP腳本后,它不起作用。 第二次,從PHP嘗試之后,從命令行嘗試成功。

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

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

是什么導致此問題? 該命令有效,我只想使用PHP運行它,但是沒有成功。 我嘗試使用PHP的其他命令有效-例如:

var_dump( shell_exec('whoami') );

更新#1我使用工作命令創建了一個bash腳本文件,並且還添加了回顯“ ok”以獲取一些輸出。 從命令行運行該文件時,該文件有效,但是當我嘗試從PHP運行該文件時,我又獲得了“ ok”,但仍然無法影響連接的設備。 我試圖以www-data用戶的身份從命令行運行bash腳本,並且該腳本可以運行,但是仍然無法使用PHP進行操作:

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

更新#2在另一台運行Kodi的計算機上嘗試相同的操作,但結果相同。 該命令有效,但在使用PHP運行時無效。

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

//向所有用戶授予對/ dev / ttyS0的寫權限

須藤chmod a + w / dev / ttyS0

弄清楚如何只向httpd用戶而不是計算機上的所有用戶授予寫許可權,這會稍微優雅一點。

希望這可以幫助你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM