1

我正在尝试使用串行读写在我的计算机上将 micropython 板与 python 连接,但是我找不到在 micropython 中读取非阻塞 USB 串行数据的方法。

基本上我想调用输入函数而不需要输入继续。(类似于https://github.com/adafruit/circuitpython/pull/1186但用于 USB)

我尝试过使用tasko、 uselect (它无法导入库,我找不到下载)和 await 功能。我不确定是否有办法做到这一点,但任何帮助将不胜感激。

4

2 回答 2

0

基于相对新添加的usb_cdc构建(> = 7.0.0),您可以执行以下操作:

def read_serial(serial):
    available = serial.in_waiting
    while available:
        raw = serial.read(available)
        text = raw.decode("utf-8")
        available = serial.in_waiting
    return text

# main
buffer = ""
serial = usb_cdc.console
while True:
    buffer += read_serial(serial)
    if buffer.endswith("\n"):
        # strip line end
        input_line = buffer[:-1]
        # clear buffer
        buffer = ""
        # handle input
        handle_your_input(input_line)

    do_your_other_stuff()

这是一个非常简单的例子。如果您想支持通用线路结束并且一次发送多个命令,线路结束处理可能会变得非常复杂......

我创建了一个基于此的库:CircuitPython_nonblocking_serialinput

于 2022-01-06T12:01:30.633 回答
0

对于 CircuitPython,有supervisor.runtime.serial_bytes_available可以为您想要做的事情提供构建块。

这在Adafruit 论坛上进行了讨论:通过 USB 从计算机接收命令

于 2021-01-15T12:45:17.537 回答