편집 : 다음 스크립트 (여기에 발견 된 : 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