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 = ''; } });