|
[案例]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 **********************
|