从 Windows 到 Linux 的 PHP USB 串口调用
Posted
技术标签:
【中文标题】从 Windows 到 Linux 的 PHP USB 串口调用【英文标题】:PHP USB serial port call from Windows to Linux 【发布时间】:2015-09-05 01:26:42 【问题描述】:我有一段在 Windows - WAMP 环境下工作的简单代码,例如
<?php
`mode com3: BAUD=38400 PARITY=N data=8 stop=1 xon=off`;
file_put_contents(com3, chr(1).chr(255).chr(1).chr(4).chr(64).chr(5));
?>
它通过 USB 电缆(使用 USB 串行驱动程序)连接到电路板以点亮一些 LED,并且工作正常 - 因此类似于 232Analyser 等 Windows 软件,可以连接到 COM3 并以 DEC 发送代码,如 1,255,255,255,255, 5、点亮LED。数字 255 是一个 DEC 数字:1,2,4,8,16,32,64,128,255,它会根据调用的数字点亮某个 LED。
无论如何,上面的代码在 Windows 上运行良好,并通过调用这个 PHP 文件点亮 LED。所以可以调用如下 URL:http://localhost/lightled.php 可以正常工作。
现在我需要它在 Raspberry Pi 上通过 Linux 工作,所以我刚刚安装了标准 Raspberry Linux 和带有 PHP 的 Apache。
然后连接 USB 线,它显示为 /dev/ttyUSB0 我有 CHMOD 777 /dev/ttyUSB0
并将PHP代码更改为:
<?php
`mode /dev/ttyUSB0: BAUD=38400 PARITY=N data=8 stop=1 xon=off`;
file_put_contents('/dev/ttyUSB0', chr(1).chr(255).chr(1).chr(4).chr(64).chr(5));
?>
但是,在 Linux 上通过浏览器调用此文件并不像在 Windows 上那样点亮 LED。
现在,当我调用此文件时,它没有任何错误,没有 chmod 777,它给出了一个权限被拒绝错误。所以看起来一切正常,但还有其他问题。
所以问题是任何人都知道如何使它在 Linux 上工作,可能是我把 USB 称为错误,或者 Raspberry Linux 需要某种驱动程序,或者“`mode”需要以不同的方式定义......或者也许发送的十进制/二进制代码不正确,例如“chr(2)”等。需要不同,并且不会在 LAMP 设置中以相同的方式发送。
关于我可以尝试什么的任何想法?
谢谢。
【问题讨论】:
错误可能不在 PHP 中。您可以尝试检查您的命令 (mode ...
) 是否从命令行运行。如果您收到 command not found 消息或类似这样的错误,则需要在 Linux 中查找等效命令。
是的,你的权利,“模式”在 Linux 中不起作用,我没有意识到这是它所做的 :-) ...如下使用“stty”代替它。跨度>
【参考方案1】:
`mode /dev/ttyUSB0: BAUD=38400 PARITY=N data=8 stop=1 xon=off`;
Linux 中没有mode
命令。
最接近的等价物是stty
,但它不采用相同的命令行参数。您需要进行一些翻译;请阅读stty
的手册页了解详细信息。
【讨论】:
谢谢,这在我输入的 shell 中部分起作用: stty -F /dev/ttyUSB0 38400 然后允许 LED 通过 linux php 代码点亮。还没有弄清楚如何从 PHP 中执行命令,所以将尝试这个。以上是关于从 Windows 到 Linux 的 PHP USB 串口调用的主要内容,如果未能解决你的问题,请参考以下文章