PySerial非阻塞写入?

2 投票
3 回答
7072 浏览
提问于 2025-04-18 18:02

我在做一个项目时使用了PySerial库,一切运行得不错。不过,现在我的需求变了,我需要实现一个非阻塞的串口写入选项。我查阅了PySerial的官方文档和一些例子,但没有找到合适的方法。我的问题是:在PySerial中,非阻塞写入是可能的吗?如果可以的话,怎么做呢?

提前谢谢你。

3 个回答

0

试着把发送功能放到一个线程里运行。

    import _thread as thread
    def send_message(message, serial_interface)
        serial_interface.write(message)
        print("Done sending message!")

    serial_interface = serial.Serial('COM1')
    message = "hi"
    thread.start_new_thread(send_message, (message, serial_interface))
4

来自 pySerial 文档

-timeout = None: 一直等下去,不会超时

-timeout = 0: 非阻塞模式(读取时立即返回,不会等)

-timeout = x: 设置超时时间为 x 秒(可以是小数)

默认情况下,写入操作是阻塞的,也就是说它会等到写入完成才继续,除非你设置了 writeTimeout。关于可能的值,可以参考上面的超时列表。

所以我想,当你打开串口时,你可以设置:

ser = serial.Serial(port='/dev/ttyXXX', writeTimeout = 0)
0

原来如此。要清空串行输出,我们可以使用serial.drainOutput()这个函数。这个函数是有效的,但如果你想要实时操作,它可能帮不上忙,因为Python并不是一个特别适合实时性能的语言。

希望这对你有帮助。

撰写回答