nodejs树莓串行端口不正确的数据
我想在Raspberry Pi 1上用nodeJs v0.12.6parsing串行数据。
数据正确与猫,但与nodeJs(serialPort模块)
数据确定与猫
stty -F /dev/ttyAMA0 1200 sane evenp parenb cs7 -crtscts cat /dev/ttyAMA0
给
MOTDETAT 000000 B ADCO XXXXXXXXXXX> OPTARIF HC.. < ISOUSC 30 9 HCHC 042116615 HCHP 034246387 8 PTEC HP.. IINST 001 X IMAX 009 H HHPHC C . MOTDETAT 000000 B ADCO XXXXXXXXXXXX>
结果为CR-ETX-STX-LF ,其中程序段分隔符为CR-ETX-STX-LF
2.数据与nodeJs不正确
我的nodeJs服务器
var serialPort = new serialport.SerialPort('/dev/ttyAMA0', { baudrate: 1200, dataBits: 7, parity: 'even', stopBits: 1, flowControl :true, //CR-ETX-STX-BR parser: serialport.parsers.readline(String.fromCharCode(13,3,2,10)) }); serialPort.on('data', function(data) { console.log("data="+data); });
结果是
ADCO 0PTARIF H 9 2116615 HCHP 031 .. 01 X 9 H . T 000000 ADCO 0218 > OC.. <
结果与分隔符
所有的数据都是乱码,为什么?
好像我收到8个字节,然后8个字节丢失,然后收到8个字节,…
看起来像tty没有很好的configuration。 同
stty -F /dev/ttyAMA0 1200 sane parenb -parodd cs7 -isig -icrnl -crtscts -icanon
serialPort现在正在工作。
错误是我依靠我看到的猫/ dev / ttyAMA0。 但它只显示可打印的字符,而不是真正的数据。
这并没有回答为什么字节丢失的问题,但这是一个检索所有数据的解决scheme。
我使用fs模块。
注意:分隔符是ETX和STX( https://en.wikipedia.org/wiki/C0_and_C1_control_codes#STX )
fs = require('fs'); inp = fs.createReadStream(port); inp.setEncoding('utf8'); var inputtext = ""; var start = false; var end = false; var charSTX = String.fromCharCode(2); var charETX = String.fromCharCode(3); inp.on('data', function (data) { var indexOfCharSTX = data.indexOf(charSTX); if(!start){ if(indexOfCharSTX!=-1){ start = true; end = false; inputtext = ''; //after STX and next LF data = data.substr(indexOfCharSTX+2, data.length); }else{ // waiting next data for start character return; } } var indexOfCharETX = data.indexOf(charETX); if(indexOfCharETX!=-1){ //before ETX and previous CR data = data.substr(0, indexOfCharETX-1); end = true; } inputtext+=data; if(end){ //do something with inputtext here start = false; end = false; inputtext = ''; } });