在Linux下使用Python控制MDrive 23

时间:2013-04-30 05:31:46

标签: arduino pyserial

MDrive 23电机接收来自终端的命令,我让它使用屏幕程序:

screen /dev/ttyUSB0

这被称为串行终端吗?我不熟悉连接的细节,但感觉我应该可以使用PySerial发送命令。

我试过了:

import serial
ser = serial.Serial('/dev/ttyUSB0', 19200)
ser.isOpen() # Returns True
ser.write('ma 100000\r\n') # Does nothing...
ser.inWaiting() # Returns 0
ser.close()

我不知道如何设置其他init变量,例如:

parity = serial.PARITY_ODD,
stopbits = serial.STOPBITS_TWO
bytesize = serial.SEVENBITS    

接下来我会尝试猜测一些值...文档很蹩脚,但它提到了MODBUS TCP和Mcode。

如何设置这些内容并在我的代码段中出现语法错误?

我知道如何向Serial对象发送参数,但我不知道什么值是典型值。

1 个答案:

答案 0 :(得分:1)

Serial构造函数的其他参数的设置方式与port和baudrate类似:

ser = serial.Serial(port = '/dev/ttyUSB0', baudrate=19200, bytesize=serial.SEVENBITS, parity=serial.PARITY_ODD, stopbits=serial.STOPBITS_TWO)

ser.write('whatever')
ser.flush() # wait for data to be written
ser.close()

编辑:seems默认设置为9600波特,8位,无奇偶校验和1个停止位。此外,不使用流量控制。这相当于:

ser = serial.Serial(port = '/dev/ttyUSB0', baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, xonxoff=False, rtscts=False, dsrdtr=False)

由于除端口之外的所有值都设置为默认值,因此您可以使用:

ser = serial.Serial(port = '/dev/ttyUSB0')

最后要担心的是设置哪个(读取)超时。这是以秒为单位测量/设置的(允许浮点数),并设置read()命令在返回已读取的内容之前将阻塞多长时间。