设置 | 登录 | 注册

目前共有10篇帖子。

[案例]Linux下PHP讀寫串口

1楼 巨大八爪鱼 2015-6-29 23:21
<?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(" ", "&nbsp;", $data);
echo $data;
fclose($fp);
?>
2楼 巨大八爪鱼 2015-6-29 23:21
輸出:
****************
It works. -- PCE
         -- By Octopus
**********************
3楼 巨大八爪鱼 2015-6-29 23:21
註:/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位元組數據。
9楼 巨大八爪鱼 2015-6-30 09:40
<?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
10楼 巨大八爪鱼 2015-6-30 09:40
<?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(" ", "&nbsp;", $data);

printf("Flag: 0x%x<br>\nData:<br>\n %s", ord($flag), $data);
fclose($fp);
?>
輸出:
Flag: 0x80
Data:
****************
It works. -- PCE
         -- By Octopus
**********************

内容转换:

回复帖子
内容:
用户名: 您目前是匿名发表。
验证码:
看不清?换一张
©2010-2025 Purasbar Ver3.0 [手机版] [桌面版]
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。