作者共发了10篇帖子。
字体大小:较小 - 100% (默认)  内容转换:不转换
 
点击 回复
1706 9
[案例]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
**********************
回复帖子
内容:
用户名: 您目前是匿名发表。
验证码:
看不清?换一张
(快捷键:Ctrl+Enter)
本帖信息
点击数:1706 回复数:9
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2015-6-30 09:40
本吧热门帖子
公告板