记录下serialport 踩的坑 在网页即可实现 串口操作
一.先决条件
1. node
2.serialport
3.ws 或者 ajax基础
二. 操作
1.安装node 官网下载 不会的有必要先入门node https://www.runoob.com/nodejs/nodejs-tutorial.html 这个就够了
2. 安装serialport
npm install serialport .
// 遇到墙的话 就翻墙 或者 cnpm install serialport.
// cnpm 是换了淘宝的镜像.
// 操作:npm install -g cnpm -registry=https://registry.npm.taobao.org.
// cnpm -v 看到版本 即为成功.
三 api介绍
1.此方法为查看端口名字 id 等方法
//获取端口列表 (静态 不需要new)
SerialPort.list(function (error, ports) {
ports.forEach(function(port) {
console.log(port.comName);
console.log(port.pnpId);
console.log(port.manufacturer);
});
})
2.打开一个连接到串口
serialPort.open([callback])
3.写入数据到串口
serialPort.write(data,[encoding],[callback])
⇒ boolean
4.指令监听
serialPort.on('data',function (data) {
console.log('data received: '+data)
})
5.错误监听
serialPort.on('error',function (error) {
console.log('error: '+error)
})
四.测试
新建 server.js
var SerialPort = require('serialport')
//Opening a Port
var serialPort = new SerialPort('COM4', {
//波特率,可在设备管理器中对应端口的属性中查看
baudRate : 9600,
autoOpen:false
})
//连接串口后进行写入指令操作
serialPort.open(function (err) {
console.log('IsOpen:',serialPort.isOpen)
console.log('err:',err)
if(!err){// 此方法写入到串口
serialPort.write("test");
}
})
//指令监听
serialPort.on('data',function (data) {
console.log('data received: '+data)
})
//错误监听
serialPort.on('error',function (error) {
console.log('error: '+error)
})//获取端口列表
SerialPort.list(function (error, ports) {
ports.forEach(function(port) {
console.log(port.comName);
console.log(port.pnpId);
console.log(port.manufacturer);
});
})
运行 node server.js
会看到串口的名字等 当然测试的前提是 你要有单片机在手
想要直接用网页的形式操作数据 ,那么就要用到ajax 或者ws 来传递数据了,如果对着方面不了解的 要先去入门.
ws:
新建serverWs.js
const WebSocket = require('ws');
var SerialPort = require('serialport');
const wss = new WebSocket.Server({ port: 3000 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
eachWrite(message);
ws.send(message, (err) => { // send 方法的第二个参数是一个错误回调函数
if (err) {
console.log(`[SERVER] error: ${err}`);
}
})
});
});
//Opening a Port
var serialPort = new SerialPort('COM6', {
baudRate: 9600,
autoOpen: false
})
//连接串口后进行写入指令操作
serialPort.open(function(err) {
console.log('IsOpen:', serialPort.isOpen)
console.log('err:', err)
if (!err) {
// const bufs = [buf11,buf21,buf31]
//eachWrite("H")
}
})
// 写进arduin
function eachWrite(H) {
//console.log(H)
serialPort.write(H, function(error, result) {})
}
//指令监听
serialPort.on('data', function(data) {
var comdata = ""
console.log('data received: ' + data)
comdata += data;
console.log(comdata);
})
//错误监听
serialPort.on('error', function(error) {
console.log('error: ' + error)
})
//获取端口列表
SerialPort.list(function(error, ports) {
ports.forEach(function(port) {
console.log(port.comName);
console.log(port.pnpId);
console.log(port.manufacturer);
});
})
然后新建 index.html
<!DOCTYPE html>
<html>
<head>
<title>websocket</title>
</head>
<body>
<script type="text/javascript">
// 浏览器提供 WebSocket 对象
var ws = new WebSocket('ws://localhost:3000')
// 发送
ws.onopen = function() {
ws.send('hello')
}
// 接收
ws.onmessage = function(mes) {
alert(mes.data)
if (mes.data === 'hello') {
ws.close()
}
}
</script>
</body>
</html>
运行 node serverWs.js
打开index.html 就可以发数据了
ajax是同理 由于时间问题就不写了 本文是只是记录自己的开发历程 不是百分百原创
溜了溜了~~
参考: https://blog.csdn.net/u012612399/article/details/80421730
参考:https://blog.csdn.net/zhangzq86/article/details/78021589#new_module_serialport--SerialPort_new