如何在电路python中进行非阻塞usb串行输入



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

基本上,我想在不需要输入的情况下调用input函数https://github.com/adafruit/circuitpython/pull/1186但对于usb(

我尝试过使用tasko、uselect(导入库失败,找不到下载(和wait函数。我不确定是否有办法做到这一点,但任何帮助都将不胜感激。

基于相对新添加的usb_cdc构建(>=7.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

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

Adafruit论坛讨论了这一点:通过USB接收来自计算机的命令。

最新更新