![](/img/trans.png)
[英]PHP windows read write to/from serial port usind DOTNET System.IO.Ports
[英]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') );
我已经尝试了很多方法来使其工作:
我还没有找到一种方法来确切了解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.