通过pySerial将字符串发送到端口出错

时间:2019-04-02 18:49:46

标签: python arduino serial-port pyserial

我开始进行Arduino编程,并且在使用pySerial库中的write()命令时遇到了一些麻烦。 我有一个arduino程序,可以使用arduino IDE的Serial终端正常工作。 我可以编写命令,它会使用blackmagic 3g-SDI shell返回一些文本并更改相机的参数。 每次发送内容时,它应该返回一条确认消息或错误消息,这证明我使用pySerial write()函数未发送任何内容。 我也知道有实际的交流,因为当我使用readline()时,可以在程序的开头看到“开始”消息。

我已经尝试过使用腻子,并按照完整的教程逐步在命令行中直接使用腻子,但是同样发生了,我真的不知道该怎么做,我已经访问了很多论坛和主题,并尝试了其他内容。

import serial 
import time

arduino = serial.Serial("COM3",baudrate = 9600, timeout = 2)
#arduino.open()
print(arduino.is_open)
time.sleep(2)

def sendCommand(command):

    arduino.write(bytes(b"command"))
    done = arduino.readline()
    doneDecoded = done.decode('ascii')
    print(doneDecoded)
    print(done)
    print('done')

    pass



while True:
    command =input(" Write your command : ")
    sendCommand(command)

我期望从arduino收到对我输入的任何形式的响应,但是现在响应只是空白,好像他没有收到任何数据。

2 个答案:

答案 0 :(得分:1)

首先,您的sendCommand函数在每次调用它时都会发送字符串“ command”,因此您从未将任何命令发送到它会响应的Arduino。

第二,您的python代码正在您的计算机上运行,​​其时钟频率可能为1.2至2.8 GHz,而Arduino以16 MHz的时钟速度运行(慢了近100倍)

当您向Arduino发送命令时,您需要给Arduino时间来处理命令并响应它。我建议在串行写入和串行读取之间添加大约100毫秒的延迟,如下所示:

def sendCommand(command):

    arduino.write(bytes(command))
    time.sleep(100)
    done = arduino.readline()

那应该为您解决问题。

答案 1 :(得分:1)

很可能Arduino仅在等待EOL(行尾)字符(或序列)开始处理可变长度命令。

EOL通常为\r\n或两者的组合。尝试在arduino.write(bytes(b"command"))

之后发送