我正在尝试将节点js中的一些代码转换为可以读取数据的传感器中的数据。如果重要的话,传感器是hi219m。
到目前为止,这部分在节点js
中var SerialPort = require('serialport');
var portName = 'com4';
var serialPort = new SerialPort("com4", {
autoOpen: false,
baudRate: 115200,
dataBits: 8,
parity: 'none',
stopBits: 1
}, function(error){
console.log(error);
});
我可以使用:
进入pythonimport serial
sensorSerial = serial.Serial('com4',115200,bytesize = serial.EIGHTBITS,parity = serial.PARITY_NONE,stopbits =serial.STOPBITS_ONE)
这个节点js函数用于打开
serialPort.open(function(error){
if(error){
console.log("Error");
}else{
console.log("Port Opened");
serialPort.on('data',onData);
}
});
在python中我认为它只需要是一个while循环,读取数据以模仿serialPort.on('data',onData);
并定义函数onData。
def onData():
所以主要问题是理解节点js
的这一部分var Struct = require('struct');
var msg = Struct()
.chars('frameStart',2)
.word16Sle('len')
.word16Sle('crc')
.word16Sle('id')
.chars('acc',1)
.word16Sle('ax')
.word16Sle('ay')
.word16Sle('az')
.chars('b0',1)
.word16Sle('bx')
.word16Sle('by')
.word16Sle('bz')
.chars('c0',1)
.word16Sle('cx')
.word16Sle('cy')
.word16Sle('cz')
.chars('d0',1)
.word16Sle('Roll')
.word16Sle('Pitch')
.word16Sle('Yaw');
function onData(data){
if(data.length == 41){
msg._setBuff(data);
var proxy = msg.fields;
console.log("Roll:",proxy.Roll,"Pitch:",proxy.Pitch,"Yaw:",proxy.Yaw);
}
}
在python中,我可以用serial.read(41)
读取41个字节,但我不知道如何获取特定的消息并检查该消息是否为41,除非它使用serial.readline()
并检查是否是41?
最后转换它的主要问题是python中的struct如何工作,特别是模仿这部分:
msg._setBuff(data);
var proxy = msg.fields;
我使用pack()
还是有其他方式?
感谢任何指导。