繁体   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