gpt4 book ai didi

php - 使用 perl 或 PHP 在 Linux 上通过 USB 读取和写入串口设备

转载 作者:搜寻专家 更新时间:2023-10-31 21:45:06 24 4
gpt4 key购买 nike

我在 Linux 上从串行设备读取时遇到问题。这个问题很奇怪,我无法确定原因。

我正在用 PHP 打开 /dev/ttyUSB0 文件,并开始根据设备的协议(protocol)与设备通信。很多时候遇到PHP脚本等待设备响应的情况。当我并行运行一个应该执行相同操作的 Perl 脚本时,它向同一设备发送了一个请求,并在没有得到响应的情况下退出。然后我看到 PHP 脚本得到了响应(只有在 Perl 脚本发送请求之后)。

我在尝试用 PHP 读取 Arduino 时遇到了类似的问题。 PHP 没有从端口得到响应,但是 Arduino IDE 的串行监视器打印了它。

我想我在这里遗漏了一个关于 Linux 文件和 USB 端口的重要信息。可能是什么问题?我如何知道哪些程序使用了端口/文件?

    $usb = 'ttyUSB0';        
`stty -F /dev/$usb 9600`;
`stty -F /dev/$usb -parity`;
`stty -F /dev/$usb cs8`;
`stty -F /dev/$usb -cstopb`;
$f = fopen("/dev/$usb", "r+");
if(!$f) {
echo "error opening file\n";
exit;
}

statusRequest($f);
sleep(1);
$c = readPort($f);
echo "$c\n";

function statusRequest($port) {
$data = "request";
fwrite($port, $data);
fflush($port);
}

function readPort($port) {
$read = 1;
$c = '';
while($read > 0) {
$bytesr = unpack("h*", fread($port, 1));
$c .= $bytesr[1];
//echo $bytesr[1];
if($bytesr[1] == 'ff') {
$read = 0;
}
}
return $c;
}

最佳答案

在我的 wiki 上查看这两篇文章。第一篇文章介绍了如何在设备节点上设置有用的权限。第二篇文章是打印出远程发送给PC的所有数据的例子。尽管是为 Arduino 编写的,但它很容易移植用于其他用途。

使用 lsof 您可以找出当前正在使用该端口的程序:


lsof | grep/dev/ttyUSB0
cat_ttyUS 19182 jhendrix 3u CHR 188,0 0t0 14519955/dev/ttyUSB0

使用 stty 命令,您不会锁定端口以供独占使用。

关于php - 使用 perl 或 PHP 在 Linux 上通过 USB 读取和写入串口设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5014451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com