2013-10-11 9 views
5

EDIT:私は次のスクリプト(ここにある:PHP serial port data return from Arduino)でいくつかのテストを行っています。/dev/ttyUSB0にfwriteを使用しても、新しいコマンドとデバイスから送信された最後のコマンドが出力されるようです。これは、シリアルポートが正しく設定されていない可能性があります(例えば、バッファをクリアするために設定を変更するためにsttyを使う必要があるかもしれない)、/ dev /にあるバッファをクリアするために必要なことがあります新たなコマンドを送信する前にttyUSB0。どんな助けでも感謝します、ありがとう。PHPを使ってシリアルポートに書き込む方法は?バッファリングに問題がある

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

オリジナル質問:

私はシリアルポートを介してデバイスと通信するためのphp-シリアルを使用しています。このデバイスは、画面上のシリアルポートへの入出力をすべて表示する機能を持っています。私は、次のスクリプトを実行すると、私は、デバイス上のすべてのコマンド出力を取って、デバイスにそれを繰り返すということをデバイス上で見ることができます。私はこれが問題を引き起こしていると信じています。ただ、デバイスに「OK」と答えて、出力を繰り返さずに「OK」と答えたいと思っています。同じコマンドを最初に繰り返すと、それを混乱させるように見えるので、「OK」コマンドは適用されません。私はループで0.1秒ごとに 'OK'を出力することでこれを回避することができますが、デバイスからの出力を読み込み、それに応じて適切に応答します。私はスクリプトの中に何度もコマンドを繰り返し実行するよう指示するものはないと信じています。これは誰でも経験したPHPシリアルクラスの問題ですか?私は$ autoflush = falseを設定しようとしました。違いはありません。

マイスクリプト:デバイスの画面上

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

出力例は、私のスクリプトが実行されている間::私のスクリプトが実行される前に、デバイスの画面上

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

答えて

0

minicomをインストールしてからポートを開く前に試してください:

$sms="ttyUSB0"; 
exec("minicom -b 9600 -o -D /dev/" . $sms); 
関連する問題