其实本质上Micropython的USB口就是一个UART,就是板子上没有的UART0,所以这里我们只需要使用一个pyb内置类pyb.USB_VCP,就可以通过函数去控制VCP,和PC进行数据通信。
pyb.USB_VCP
一直以来,用USB串口时,直接用print函数就可以实现单片机在USB串口的数据发送功能,但是无法实现上位机发下来的数据的接收功能,所以用VCP就可以很好地实现数据的读取和发送功能。
PYB端
在使用pyb.USB_VCP
时,只需要先声明,然后就基本和UART的API使用方法相同了。
import pyb
# 声明类
usb_vcp = pyb.USB_VCP()
# 检查是否连接
print(usb_vcp.isconnected())
while True:
# 每秒发送一次,测试上位机是否能收到
b = ("b"+"\n").encode("utf-8")
usb_vcp.send(b)
pyb.delay(1)
上位机代码
上位机直接测试能否接收到下位机穿上来的代码就行。
import serial
if __name__ == '__main__':
ser = serial.Serial('COM1', 9600)
while 1:
a = "a".encode("utf-8")
ser.write(a)
b = ser.readline()#read a string from port
b = b.decode("utf-8")
print(b)
测试接收:完全ok!
不过有个缺点就是调试起来可能会和串口冲突,如果产品开发的差不多了,就可以直接用USB作为串口即可,挺好用的。
参考文章: