将节点js转换为python serial

时间:2018-01-25 15:54:46

标签: javascript python node.js pyserial

我正在尝试将节点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);
                          }); 

我可以使用:

进入python
import 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()还是有其他方式?

感谢任何指导。

0 个答案:

没有答案