我有一些用于串行通信的nodejs示例.一个例子是使用serialport模块(如下).我有一个配对的蓝牙设备,设置为rfcomm0.我可以通过命令行与echo数据进行通信> / dev / rfcomm0并收到响应,所以它似乎工作.问题是它不能通过nodejs工作.当我执行nodejs SerialToJson.js / dev / rfcomm0时,下面的示例抛出“无法加载绑定文件”错误.另一种方法是使用蓝牙串口模块,但也不能通过npm安装,因为找不到我正在使用的节点版本的兼容版本.我知道如何解决每个问题,但我不知道该追求哪个,串口模块可以与rfcomm(串口仿真)一起使用,还是蓝牙串口模块更适合?
/* SerialToJson.js a node.js app to read serial strings,convert them to JSON objects,and send them to webSocket clients requires: * node.js (http://nodejs.org/) * express.js (http://expressjs.com/) * socket.io (http://socket.io/#how-to-use) * serialport.js (https://github.com/voodootikigod/node-serialport) To call it type: node SerialToJSON.js portname where portname is the path to the serial port you want to open. created 1 Nov 2012 modified 7 Nov 2012 by Tom Igoe */ var serialport = require("serialport"),// include the serialport library SerialPort = serialport.SerialPort,// make a local instance of serial app = require('express')(),// start Express framework server = require('http').createServer(app),// start an HTTP server io = require('socket.io').listen(server); // filter the server using socket.io var portName = process.argv[2]; // third word of the command line should be serial port name console.log("opening serial port: " + portName); // print out the port you're listening on server.listen(8080); // listen for incoming requests on the server console.log("Listening for new clients on port 8080"); var connected = false; // open the serial port. Change the name to the name of your port,just like in Processing and Arduino: var myPort = new SerialPort(portName,{ // look for return and newline at the end of each data packet: parser: serialport.parsers.readline("\r\n") }); // respond to web GET requests with the index.html page: app.get('/',function (request,response) { response.sendfile(__dirname + '/index.html'); }); // listen for new socket.io connections: io.sockets.on('connection',function (socket) { // if the client connects: if (!connected) { // clear out any old data from the serial bufffer: myPort.flush(); // send a byte to the serial port to ask for data: myPort.write('c'); console.log('user connected'); connected = true; } // if the client disconnects: socket.on('disconnect',function () { myPort.write('x'); console.log('user disconnected'); connected = false; }); // listen for new serial data: myPort.on('data',function (data) { // Convert the string into a JSON object: var serialData = JSON.parse(data); // for debugging,you should see this in the terminal window: console.log(data); // send a serial event to the web client with the data: socket.emit('serialEvent',serialData); }); });
解决方法
很高兴知道它的工作. Serialport模块也适用于我.
使用模块串口,您需要另一个模块与蓝牙设备连接,或者您需要手动连接终端中的rfcomm.
功能上的巨大差异是bluetooth-serial-port不需要您与rfcomm连接.该模块可以扫描蓝牙设备并与之连接.连接后,它具有与serialport相同的功能.
因此,如果您的应用程序/模块只需要连接蓝牙设备并且您想要扫描功能,那么至少尝试蓝牙串口是值得的.
npm模块/自述文件中有一些示例,因此测试它不会花费太多时间.
编辑:
有一个新版本发布,非常稳定! :d
https://npmjs.org/package/bluetooth-serial-port