2016-05-31 3 views
0

Ich sende Befehl mit einem Endbyte, es ist: 0xFF dreimal. In Python, funktioniert dieser Code:Sende Byte (0xFF) mit Node.js über SerialPort

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) 

Der gleiche Code in Node.js arbeitet nicht:

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(" ")); 
}); 

ich diese verwenden, um einen Nextion Bildschirm zu steuern, die Arbeit mit Serialport ist. Bei Python erhalte ich "Seite 1" mit 3 Leerzeichen, bei Node.js bekomme ich diese: "Seite 1".

Ich weiß nicht warum, es gibt keinen Unterschied für mich.

Danke für die Hilfe!

Antwort

1

Die Antwort ist: Ich brauche einen Puffer zu verwenden Byte senden mit Node.js

Diese meine Funktion ist:

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

Ich verwende die Funktion wie folgt aus:

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

Die Funktion gibt so etwas zurück:

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

Hoffe, dieser Code wird jemandem helfen! Tschüss