本文目录一览:
node.js 使用serialport打开串口报错
- 先判断在关闭原先串口 com:
if (com != null)
{
com.Close();
}
- 然后重新new,在打开串口:
com = new System.IO.Ports.SerialPort(strComName); //strComName串口名
com.Open();
// ...设置属性
// ...绑定串口接收函数
node-serialport windows下怎么使用
node-serialport
是一个 Node.js 的包,用来对串口数据进行读写操作。
基本示例代码:
var SerialPort = require("serialport").SerialPort
var serialPort = new SerialPort("/dev/tty-usbserial1", {
baudrate: 57600
}, false); // this is the openImmediately flag [default is true]
serialPort.open(function (error) {
if ( error ) {
console.log('failed to open: '+error);
} else {
console.log('open');
serialPort.on('data', function(data) {
console.log('data received: ' + data);
});
serialPort.write("ls\n", function(err, results) {
console.log('err ' + err);
console.log('results ' + results);
});
}
});
罗列所有串口:
var serialPort = require("serialport");
serialPort.list(function (err, ports) {
ports.forEach(function(port) {
console.log(port.comName);
console.log(port.pnpId);
console.log(port.manufacturer);
});
});
串口配置:
baudRate
dataBits
stopBits
parity
rtscts
xon
xoff
xany
flowControl
bufferSize
parser
encoding
dataCallback
disconnectedCallback
platformOptions
- 设置平台特定选项
nodejs 获取串口数据
由于项目要求,项目为(B/S)架构,需要在页面上读取串口数据,于是就需要 nodejs。
使用 nodejs 的一个插件:serialport
现在先做个测试 demo:
- 先建立测试文件夹
- 在文件夹中安装 serialport,在文件夹下的 cmd 中输入
- 可能会出现一个警告,可以忽略
- 安装后编写读取串口 js 文件
testport.js
- 运行 js,在文件夹下 cmd 中输入 执行成功:
可能的问题:
问题一:File not found
这个是电脑上没有安装串口驱动,或者虚拟串口。
可以使用虚拟串口程序建立测试串口。
问题二:Port is opening
需要加入串口属性 autoOpen: false
web实现串口调试助手
最近受朋友之托试图用 web 前端实现串口调试助手,一开始觉得不太有可行性,以前用过的串口调试助手都是客户端程序。觉得浏览器怎么会有调用电脑上的串口的功能呢。后来朋友找了几个资料给我,说网上有人实现,他看不懂。我看了之后恍然大悟,原来是用 node。如此万能。
node 实现操作串口的模块是一个 serialport
的模块,网上一搜有很多好文,此处记录一下实现过程中遇到的一些问题以及解决方法。
一开始被忽略的问题,我把 node 服务搭在自己的服务器上,后来返回的串口数组全是一堆令我懵逼的数据。后来想起那是 node 读取了我的 Linux 服务器的串口,而不是用户使用的 pc。
由此引出的两个问题:
- node 服务必须搭建在用户使用的 pc 上,因此用户使用的电脑必须有 node 环境。
- 用户 pc 一般是 windows 系统,node 的模块很多在 Linux 上很容易安装成功,在 Windows 上安装比较困难。
解决第二个问题:在 Windows 上安装 serialport 失败
解决方法:
npm install --global --production windows-build-tools
参考链接1:
参考链接2:
安装好之后就可以安装 serialport 模块了。
解决第一个问题:用户电脑的 node 环境
解决方法:Electron 使用 JavaScript, HTML 和 CSS 构建跨平台的桌面应用(官网链接:)(w3c:) 使用 Electron 搭建的桌面应用可以像平常我们使用的 exe 应用程序一样直接运行,不需要搭建环境。
npm install -g electron-prebuilt //提示electron-prebuilt已经更名为electron
npm install -g electron //安装失败
使用淘宝镜像安装问题解决:
cnpm install -g electron
参考链接:
npm install -g electron-rebuild
以后每次重新运行 electron .
的时候再执行一次 ./node_modules/.bin/electron-rebuild
对原生模块进行 rebuild
参考链接:
参考链接:
cnpm install -g electron-packager
electron-packager . 可执行文件的文件名 --win --out 打包成的文件夹名 --arch=x64位还是32位 --version版本号 --overwrite --ignore=node_modules
因为打包的时候执行的命令带有 --ignore=node_modules
,即不将 node_modules
里面的依赖包打包,所以在打包后的新文件中,进入 resource 目录会发现 node_modules
是一个空文件夹,所以自然找不到依赖包。如果去掉打包时的命令参数 --ignore=node_modules
,则需要非常长的打包时间。我的解决方法是将原来 node_modules
文件夹中的相关的依赖包文件复制进打包后的 node_modules
中,虽然是一个比较无脑的方法,每次打包都要拖动相关文件进去,不过我备份了一个 node_modules
文件夹,下一次打包后就把备份的 node_modules
直接复制进去。
node 模块 ccap
: 用于生成验证码图片,可以在 express 后台 res.send(图片)
,前端的 img
的 src
设置为请求这个接口。
ccap 的用法可以参考链接:
如何调试nodejs
1. 基于 Node.js 内建的调试器
Node.js 提供了一个内建调试器来帮助开发者调试应用程序。想要开启调试器我们需要在代码中加入 debugger
标签,当 Node.js 执行到 debugger
标签时会自动暂停(debugger
标签相当于在代码中开启一个断点)。代码如下:
var path = url.parse(req.url).pathname;
debugger;
res.writeHead(200, {'Content-Type': 'text/plain'});
执行命令:
node debug example.js
就可以进入调试模式。
在 debug 模式下,可以使用内建命令如 repl
去评估变量和表达式的值。我们也可以通过 help
命令来获取完整的调试命令列表。
Commands:
run (r)
cont (c)
next (n)
step (s)
out (o)
backtrace (bt)
setBreakpoint (sb)
clearBreakpoint (cb)
watch
unwatch
watchers
repl
restart
kill
list
scripts
breakpoints
version
2. 基于 V8 插件的调试器
Node.js 是基于 Google V8 的引擎上构建的,Google 为 Eclipse 提供了一个对应的调试插件。关于如何在 Eclipse 中安装和调试 Node.js 程序就不再重复描述了,网上已经有很多的文章了(具体可以参考这篇文章)。唯一要注意的是在默认情况下 V8 引擎支持的调试模式是本地模式。如果想要开启远程调试的话,我们需要修改 Node.js 中的 V8 源文件:/deps/v8/src/platform-posix.cc
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); // INADDR_ANY
addr.sin_port = htons(port);
然后重新编译 Node.js。 提示: 用插件来调试 nodejs 程序,你有时候会遇到什么 connect refuse, get version failed 等等错误。那么请注意你使用的 ip 的地址,一般下 127.0.0.1 的回环地址是都工作的。如果你使用真实的 ip 地址,请检查防火墙设置。
3. 基于 Chrome 浏览器的调试器
既然我们可以通过 V8 的调试插件来调试,那是否也可以借用 Chrome 浏览器的 JavaScript 调试器来调试呢?node-inspector
模块提供了这样一种可能。我们需要先通过 npm 来安装 node-inspector
npm install -g node-inspector // -g 导入安装路径到环境变量
node-inspector
是通过 websocket 方式来转向 debug 输入输出的。因此,我们在调试前要先启动 node-inspector
来监听 Node.js 的 debug 调试端口。
默认情况下 node-inspector
的端口是 8080,可以通过参数 --web-port=[port]
来设置端口。在启动 node-inspector
之后,我们可以通过 --debug
或 --debug-brk
来启动 nodejs 程序。通过在浏览器输入 http://[ip address]:8080/debug?port=5858
,我们会得到如下的调试窗口:
这三种方法各自有优缺点,我个人比较欣赏 node-inspector
的方式。
具体可以参考这个帖子: