node 串口通信

记录下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

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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);   }); });串口配置:baudRatedataBitsstopBitsparityrtsctsxonxoffxanyflowControlbufferSizeparserencodingdataCallbackdisconnectedCallbackplatformOptions - sets platform specific options, see below.目前已有很多项目在使用这个包进行串口处理:Johnny-Five - Firmata based Arduino Framework.Cylon.js - JavaScript Robotics, By Your Command.node-l8smartlight (source) A node library to control the L8 Smartlight via Bluetooth or USB portfirmata Talk natively to Arduino using the firmata protocol.tmpad source - a DIY midi pad using infrared, arduino, and nodejs. Videoduino - A higher level framework for working with Arduinos in node.js.Arduino Drinking Game Extravaganza - AKA "The Russian" a hexidecimal drinking game for geeks by Uxebu presented at JSConf EU 2011.Arduino controlling popcorn.js - Controlling a popcorn.js video with an Arduino kit.Robotic JavaScript - The first live presentation of the node-serialport code set as presented at JSConf EU 2010.devicestack - This module helps you to represent a device and its protocol.reflecta A communication protocol that combines Arduino Libraries and NodeJS into an integrated system.rc4pt-node - Control Popcorntime with an

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值