|
[案例]Linux下PHP讀寫串口 |
一派掌门 二十级 |
<?php $fp = fopen("/dev/ttyUSB0", "r+"); fwrite($fp, "\x80"); $data = fread($fp, 81); $data = preg_replace("/^./", "", $data); // $data{0} is useless $data = str_replace("\n", "<br>", $data); $data = str_replace(" ", " ", $data); echo $data; fclose($fp); ?>
|
一派掌门 二十级 |
輸出: **************** It works. -- PCE -- By Octopus **********************
|
|
一派掌门 二十级 |
註:/dev/ttyUSB0的權限是666
|
|
一派掌门 二十级 |
4楼
发表于: 2015-6-29 23:32
向串口發送0x80這個十六進位數:
fwrite($fp, "\x80");
|
|
一派掌门 二十级 |
5楼
发表于: 2015-6-29 23:34
$data = fread($fp, 81);
從串口中讀取81位元組字符串。讀出來的字符串的第一個字符沒有用,要刪除。如果串口發送的數據不到81位元組,程序就會停在這裡,直到81個字節都接收完畢。所以這裡無需sleep函數
|
|
一派掌门 二十级 |
6楼
发表于: 2015-6-29 23:35
看了一下資料,讀取出來的第一個字節應該是用於判斷有無後續數據。
|
|
一派掌门 二十级 |
7楼
发表于: 2015-6-29 23:38
這個用於刪除接收到的字符串的首字符:
$data = preg_replace("/^./", "", $data); // $data{0} is useless
|
|
一派掌门 二十级 |
8楼
发表于: 2015-6-29 23:40
回復:5樓
所以,第一次執行這個語句後,程序只從串口中讀取了80位元組數據。
|
|
一派掌门 二十级 |
<?php $filename = "/dev/ttyUSB0"; if (file_exists($filename)) { echo "File \"$filename\" exists.<br>\n"; } $perms = substr(sprintf("%o", fileperms($filename)), -4); echo "Permissions: $perms"; ?> 輸出: File "/dev/ttyUSB0" exists.
Permissions: 0666
|
|
一派掌门 二十级 |
<?php $filename = "/dev/ttyUSB0"; $fp = fopen($filename, "a+"); fwrite($fp, "\x80"); $flag = fread($fp, 1); $data = fread($fp, 80);
$data = str_replace("\n", "<br>", $data); $data = str_replace(" ", " ", $data);
printf("Flag: 0x%x<br>\nData:<br>\n %s", ord($flag), $data); fclose($fp); ?> 輸出: Flag: 0x80
Data:
**************** It works. -- PCE -- By Octopus **********************
|
|