从PHP写入十六进制到串行端口

时间:2017-01-14 21:20:30

标签: php linux serial-port hex

我使用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组)
  • 我为/ dev / ttyUSB0
  • 设置了chmod 777
  • 我已经验证PHP可以写入/ dev / ttyUSB0(is_writable())
  • 我尝试了很多不同的stty设置(例如:stty -F / dev / ttyUSB0 -isig -icanon)
  • 我在PHP中尝试了不同的方法来写入串口(PhpSerial库,pack()和fwrite(),printf()等) 除其他外。

我还没有找到一种方法来确切地看到PHP正在写入/ dev / ttyUSB0(屏幕,minicom),但是我知道它在我下次尝试从命令行尝试PHP脚本之后做了一些事情不起作用。第二次,从PHP尝试后,命令行的尝试成功。

我尝试从命令行运行PHP文件(CLI,PHP5和PHP7)并使用Web服务器,但没有任何作用。

我已经尝试过所有我能想到的东西,并在网上找到了,但我仍然无法让它发挥作用。

什么可能导致这个问题? 该命令有效,我只想用PHP运行它,但它没有这样做。我尝试使用PHP的其他命令也适用 - 例如:

var_dump( shell_exec('whoami') );

更新#1 我使用working命令创建了一个bash脚本文件,并添加了一个echo" ok"得到一些输出。从命令行运行它时该文件有效,但是当我尝试从PHP运行它时,我得到了" ok"返回但它仍然无法影响连接的设备。 我试图从命令行运行bash脚本作为www-data用户并且可以工作,但我仍然无法使用PHP工作:

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

更新#2 在另一台运行Kodi的计算机上尝试了同样的事情,结果相同。该命令有效,但在使用PHP运行时无效。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。我最终想到的是用户httpd(我正在运行CentOS - apache用户可能与你的Linux风格不同)没有对/ dev / ttyS0的写权限。

//将/ dev / ttyS0的写权限授予所有用户

  

sudo chmod a + w / dev / ttyS0

了解如何仅向httpd用户而不是机器上的所有用户授予写入权限会更加优雅。

希望这会帮助你!