2016-05-31 28 views
0

我用一个结束字节发送命令,它是:0xFF三次。在Python中,这个代码工作:用Node.js通过串口发送字节(0xFF)

import time 
import serial 

ser = serial.Serial(
    port='/dev/ttyAMA0', 
    baudrate = 9600, 
    parity=serial.PARITY_NONE, 
    stopbits=serial.STOPBITS_ONE, 
    bytesize=serial.EIGHTBITS, 
    timeout=1 
) 

while 1: 
    EndCom = "\xff\xff\xff" 
    ser.write('page 1'+EndCom) 
    print EndCom 
    time.sleep(1) 

在Node.js的同一代码不工作:

var serialport = require('serialport'); 
var SerialPort = serialport.SerialPort; 

var port = new SerialPort('/dev/ttyAMA0', { 
    baudrate: 9600 
}); 

port.on('open', function() { 
    console.log('Port ouvert sur /dev/ttyAMA0 @ 9600 bds'); 

    var end = "\xff\xff\xff"; 
    port.write("page 1"+end); 
}); 

port.on('data', function(byte) { 
    console.log("Data :", byte.toString('hex').match(/.{1,2}/g).join(" ")); 
}); 

我用这个来控制Nextion屏幕,是的SerialPort工作。在Python中,我收到3个空格的“页面1”,并且我收到了Node.js:“page1ÿÿÿ”。

我不知道为什么,这对我没有任何影响。

感谢您的帮助!

回答

1

答案是:我需要使用一个缓冲与Node.js的

发送字节这是我的函数:

function hex(str) { 
     var arr = []; 
     for (var i = 0, l = str.length; i < l; i ++) { 
       var ascii = str.charCodeAt(i); 
       arr.push(ascii); 
     } 
     arr.push(255); 
     arr.push(255); 
     arr.push(255); 
     return new Buffer(arr); 
} 

我使用的功能类似:

port.write(hex("page 1")); 

函数返回类似于:

<Buffer 70 61 67 65 20 31 ff ff ff> 

希望这段代码能帮助别人!再见