繁体   English   中英

如何使用PHP写入串口? 有缓冲问题

[英]How to write to serial port using PHP? Having an issue with buffering

编辑:我已经使用以下脚本进行了一些测试(在这里找到: 从 Arduino 返回的 PHP 串口数据)。 似乎即使使用 fwrite 到 /dev/ttyUSB0 输出我的新命令以及从设备发送的最后一个命令。 这让我觉得可能串行端口设置不正确(例如可能需要使用 stty 更改设置以清除缓冲区)或者我需要做其他事情(使用 php)来清除 /dev/ 处的缓冲区ttyUSB0 在发送新命令之前。 任何帮助将不胜感激,谢谢。

$fp =fopen("/dev/ttyUSB0", "w+");
if( !$fp) {
        echo "Error";die();
}
fwrite($fp, $_SERVER['argv'][1] . 0x00);
echo fread($fp, 10) . "\n";
fclose($fp);

原问题:

我正在使用 php-serial 通过串口与设备进行通信。 该设备具有在屏幕上显示串行端口的所有输入和输出的功能。 当我运行以下脚本时,我可以在设备上看到该脚本正在获取设备输出的每个命令并将其重复回设备。 我相信这会导致一个问题,因为我只想对设备回答“OK”,而不是重复输出然后说“OK”。 首先重复相同的命令似乎会混淆它,然后它就不会遵守“OK”命令。 我可以通过在循环中每 0.1 秒输出“OK”来解决这个问题,但我宁愿读取设备的输出,然后相应地响应它。 我不相信我的脚本中有任何内容告诉它重复执行命令。 这是任何人都经历过的 php-serial 类的问题吗? 我尝试设置 $autoflush = false; 没有区别。

我的脚本:

require_once('php_serial.class.php');

$serial = new phpSerial;
$serial->deviceSet('/dev/ttyUSB0');
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");

$serial->deviceOpen();

while (true) {
    $read = $serial->readPort();
    if ($read) {
        echo date("r") . '     ' . $read;
//      $serial->sendMessage("\r\nOK\r\n");
    }
}

$serial->deviceClose();

运行我的脚本之前设备屏幕上的示例输出:

Tx: AT
Tx: AT&F
Tx: ATE0
Tx: AT+IPR=9600
Tx: AT
Tx: AT
Tx: AT
Tx: ATH0
Tx: AT+CMGF=1

我的脚本运行时设备屏幕上的示例输出:

Tx: AT
Rx: AT
Tx: AT&F
Rx: AT&F
Tx: ATE0
Rx: ATE0
Tx: AT+IPR=9600
Rx: AT+IPR=9600
Tx: AT
Rx: AT
Tx: AT
Rx: AT
Tx: AT
Rx: AT
Tx: ATH0
Rx: ATH0
Tx: AT+CMGF=1
Rx: ^[AT+CMGF=1

安装 minicom 并在打开端口之前尝试:

$sms="ttyUSB0";
exec("minicom -b 9600 -o -D /dev/" . $sms);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM