我使用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') );
我已经尝试了很多工作来实现这个目标:
我还没有找到一种方法来确切地看到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运行时无效。
答案 0 :(得分:0)
我遇到了类似的问题。我最终想到的是用户httpd(我正在运行CentOS - apache用户可能与你的Linux风格不同)没有对/ dev / ttyS0的写权限。
//将/ dev / ttyS0的写权限授予所有用户
sudo chmod a + w / dev / ttyS0
了解如何仅向httpd用户而不是机器上的所有用户授予写入权限会更加优雅。
希望这会帮助你!