php_dio读取串口数据
一、运行环境
- php_dio.dll需要找到与PHP版本相匹配的版本,下载后打开扩展完成安装。 下载地址
- phpStudy2018 切换到PHP 7.0.12-NTS。(更高的7.2版下了php_dio.dll也无法开启,不知道怎么回事…)(这是和该环境适配的一个php_dio.dll.)
- Virtual Serial Port Driver 6.9 串口虚拟工具。
二、代码
index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.staticfile.org/jquery/2.2.4/jquery.min.js"></script>
</head>
<body>
<div id="fdsa" class="">
</div>
</body>
<script>
//假设每隔秒发送一次请求
window.onload = function () {
getApi();
}
function getApi() {
//设置时间秒 1000-毫秒 这里设置你自己想要的时间
setTimeout(getApi,1*1000);
$.ajax({
url: 'http://localhost/comdemo/com.php',
type: 'get',
dataType: 'text',
success: function (data) {
//方法中传入的参数data为后台获取的数据
console.log(data);
$("#fdsa").append("<br/>"+data);
}
})
}
</script>
</html>
com.php
<?php
/**
* 打开串口
* $com:串口号,$baud:波特率,$date数据位,$stop:停止位
*/
function open_com($com,$baud,$data,$stop)
{
exec('mode : baud='.$baud.' data='.$data.'. stop='.$stop.' parity=n xon=on');
// 打开串口
$ck = dio_open($com . ':', O_RDWR);
// 如果打开串口失败,停止脚本,并输出“打开串口COM1失败”;
if (!$ck) {
die("打开串口" . $com . "失败");
return false;
} else {
return $ck;
}
} // end open_com
/**
* 读取串口数据
*/
function get_com($rs)
{
//读取串口并将读取到的数据赋值给变量‘$shuju’;
$shuju = dio_read($rs);
$shuju .= dio_read($rs);//这里赋值两遍是应为第一次赋值只能获取到第一个字符,再赋值一次就能获得完整字符(我也不知为什么,也就只能用这种笨一点的方法le)
return $shuju;
} // end get_com
/**
* 关闭串口
*/
function close_com($rs)
{
dio_close($rs);
} // end close_com
$isOpen = open_com($com='COM2', $baud = '9600', $data='8', $stop = '1');
echo get_com($isOpen);
?>