javascript - Reading data from NodeJs Serialport - Stack Overflow

I would like to be able to read data received by the ascii mand sent.Below is the code that sends mand

I would like to be able to read data received by the ascii mand sent.

Below is the code that sends mand to my lock controller

var express = require('express');
var router = express.Router();
var SerialPort = require('serialport');


/* GET home page */
router.get('/', function(request, response){


    SerialPort.list(function (err, ports) {
      ports.forEach(function(port) {
        console.log(portName);
        console.log(port.pnpId);
        console.log(port.manufacturer);
      });
    });


    var port = new SerialPort("COM5", {
  baudRate: 38400
});

    port.on('open', function() {
        // NodeJS v4 and earlier
        port.write(new Buffer('status1', 'ascii'), function(err) {
          if (err) {
            return console.log('Error on write: ', err.message);
          }
          console.log('message written');

        });
    });

    // open errors will be emitted as an error event 
    port.on('error', function(err) {
      console.log('Error: ', err.message);
    });

});

// Important
module.exports = router;

In the doc, it mentions the use of parsers to try and read data, but I am not sure how to implement it, and I would want to execute after the mand status1 has been written.

Essentially logs the response of the mand succesfully written to the console

I would like to be able to read data received by the ascii mand sent.

Below is the code that sends mand to my lock controller

var express = require('express');
var router = express.Router();
var SerialPort = require('serialport');


/* GET home page */
router.get('/', function(request, response){


    SerialPort.list(function (err, ports) {
      ports.forEach(function(port) {
        console.log(port.Name);
        console.log(port.pnpId);
        console.log(port.manufacturer);
      });
    });


    var port = new SerialPort("COM5", {
  baudRate: 38400
});

    port.on('open', function() {
        // NodeJS v4 and earlier
        port.write(new Buffer('status1', 'ascii'), function(err) {
          if (err) {
            return console.log('Error on write: ', err.message);
          }
          console.log('message written');

        });
    });

    // open errors will be emitted as an error event 
    port.on('error', function(err) {
      console.log('Error: ', err.message);
    });

});

// Important
module.exports = router;

In the doc, it mentions the use of parsers to try and read data, https://github./EmergingTechnologyAdvisors/node-serialport#serialportparsers--object but I am not sure how to implement it, and I would want to execute after the mand status1 has been written.

Essentially logs the response of the mand succesfully written to the console

Share edited Aug 22, 2016 at 13:34 code_legend asked Aug 22, 2016 at 13:17 code_legendcode_legend 3,29517 gold badges55 silver badges97 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 2

There are some peculiarities.
You can open port on application start and reconnect on port close or open port on each request. It defines how work with data flow. If you send request to port then answer can contain data of previous requests (more than one). You can ignore this problem (if answer is short and request interval is enough large) or send request with assign id and search answer with this id.

SerialPort.list(function (err, ports) {
    ports.forEach(function(port) {
        console.log(port.Name, port.pnpId, port.manufacturer); // or console.log(port)
    });
});

router.get('/', function(req, res){
    function sendData(code, msg) {
        res.statusCode = 500;
        res.write(msg);
        console.log(msg);   
    }

    var port = new SerialPort("COM5", {
        baudRate: 38400
    });

    port.on('open', function() {
        port.write(Buffer.from('status1', 'ascii'), function(err) {
            if (err) 
                return sendData(500, err.message);

            console.log('message written');
        });
    });

    var buffer = '';
    port.on('data', function(chunk) {
        buffer += chunk;
        var answers = buffer.split(/\r?\n/); \\ Split data by new line character or smth-else
        buffer = answers.pop(); \\ Store unfinished data

        if (answer.length > 0) 
            sendData(200, answer[0]);
    });

    port.on('error', function(err) {
        sendData(500, err.message);
    });
});

module.exports = router;

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745074664a4609760.html

相关推荐

  • javascript - Reading data from NodeJs Serialport - Stack Overflow

    I would like to be able to read data received by the ascii mand sent.Below is the code that sends mand

    14小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信