나는 PHP로이 C 스크립트를 다시 작성하는 것을 시도하고있다. (샘플)는하면 fopen을 사용는/dev/ttyUSB0를 쓰거나 php_serial.class.php 할 수 없습니다
// send packet to network
tty_fd=open(buf50, O_RDWR | O_NOCTTY | O_SYNC);
write(tty_fd,&packet2send,34);
close(tty_fd);
이 C 스크립트는/dev에 데이터를 읽고/ttyUSB0을 16 진수로 표시하지만 쓰기에 문제가 있습니다 (PHP에서).
성공적으로 읽을 수 있었지만 글쓰기가 효과적이지 않거나 글의 내용을 볼 수 없었습니다.
나는 fopen을 사용했습니다 :
define('PACKET_SIZE_LIMIT',70);
$serial = new phpSerial;
$serial->deviceSet('/dev/ttyUSB0');
$serial->confBaudRate(19200);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("rts/cts");
$serial->deviceOpen();
$starttime = microtime(true);
$sof='~';
$packet = '';
$output = '';
while (true) {
$read = $serial->readPort();
if ($read) {
while (strlen($output) < PACKET_SIZE_LIMIT){
for($i = 0; $i <strlen($read);$i++){
$each_char = substr($read,$i,$i+1);
if (strlen(dechex(ord($each_char))) != 2){
$output.= sprintf('%02d',dechex(ord($each_char)));
}else{
$output.= dechex(ord($each_char));
}
}
$read = $serial->readPort();
}
echo $output;
}
}
$serial->deviceClose();
목적은 PHP를 사용하여 온도에 메시지를 보낼보다는하는 것입니다
$request_packet_ok = dechex(ord("~")). " 02 ff ff 07 ff ab 2c 4d 65 73 73 61 67 65 20 43 43 20 23 31 2f 34 20 20 20 20 ff ff d2 d7 00 00 b5 7a\r"; //Means "Message CC#1/4" on the thermostat
$device = "/dev/ttyUSB0";
if (is_writable($device)) {
echo "\n".'The file is writable'."\n";
$fp =fopen($device, "w+");
if(!$fp) {
echo "Error";die();
}
while(true){
echo "\n".'writing: '.$request_packet_ok;
fwrite($fp, $request_packet_ok);
$packet='';
$var = fread($fp, 35);
for ($i=0; $i < strlen($var);$i++){
$packet .= dechex(ord(substr($var,$i,1)));
}
var_dump($packet);
}
fclose($fp);
내가 또한 php_serial.class.php를 사용하여 시도했다 C 코드를 사용합니다.
PHP로 안테나를 통해 전송되는 패킷을 읽을 수 있기 때문에/dev/ttyUSB0에 액세스 할 수 있다고 가정하고 있지만 어떤 이유로 든 내가 보내거나 보낸 내용을 볼 수는 없습니다. 안테나 (서모 스탯 디스플레이에 텍스트 메시지를 전송 함 - 발생하지 않음). 나는 또한 오류가 발생하지 않습니다 .. 전혀!
나는/dev/ttyUSB0에 글을 쓰고 그 글에서 내가 쓴 글을 읽으려고한다.
나는 아무 권한이 거부하지 얻고, 안테나가 부착 된 이미지처럼 보이는
난 다음을 사용하여 시도 (우분투에서 실행하는 데 필요한 당신을 보여주기 위해 창에 연결) (나는 그 기계를 사용 루트 권한에 PHP 코드를 실행할 때) 아무 소용의 콘텐츠를 볼 수 명령 :
screen /dev/ttyUSB0 19200
od -x < /dev/ttyUSB0
는 어떻게는/dev/ttyUSB0를 통해 PHP를 사용하여 메시지를 보내고 바로 그 메시지가 나타날 수 있습니까? 또는 보내진 내용이 실제로 읽을 수 있는지 확인하기위한 간단한 테스트를 적어도 갖추어야합니다.
장치가 "없음"대신 흐름 제어에 rts/cts를 사용하고 있습니까? –
예, 소프트웨어 엔지니어가 말한 내용입니다. 확인하는 방법이 있습니까? – Drace