为什么要使用USB_VCP?
Micropython有很多串口,例如PYboard,有5个串口可以使用,但是,平时我们在做一些项目的时候,需要使用的引脚较多,可能会产生复用的情况。例如与树莓派进行串口通信时,树莓派只有一个引脚串口,在一些项目中为了不占用这个引脚,将该引脚腾出让给其他无法使用USB串口的设备至关重要。甚至关乎项目成败。40个gpio里只有一个串口,如果我们使用TTL转串口,将Micropython串口转接到树莓派的USB口,那会非常麻烦并且引入了许多未知的,可能导致通信失败的变量。杜邦线的好坏,松紧程度也许会导致通信失败等问题。因此,USB的串口必须要使用起来。我们调试Micropython需要用到的Putty使用的就是该串口。那么也许有小伙伴就会疑惑了,我们使用了这个串口,还可以使用Putty等调试工具进行调试吗。答案是:当然可以!!!
下面附上Micropython引脚图。
废话不多说,直接看USB_VCP。
Micropython引脚图
1、Micropython USB_VCP简介:
USB_VCP是一个内置函数,是标准pyb库下的一个对象。class pyb.USB_VCP
import pyb
usb_vcp = pyb.USB_VCP() # 将该对象赋给usb_vcp
2、USB_VCP()中的一些方法:
usb_vcp.setinterrupt(chr)
设置中断python运行键,默认是3(Ctrl+C)。
-1是禁止中断功能,在需要发送原始字节时需要。
usb_vcp.any()
如果缓冲区有数据等待接收,返回True
usb_vcp.read([nbytes])
最多读取nbytes字节。如果不指定nbytes参数,那么这个函数和readall()功能相同。
usb_vcp.readall()
读取缓冲区全部数据
usb_vcp.readinto(buf[, maxlen])
读取串口数据并存放到buf。如果指定maxlen参数,那么最多读取maxlen个字节
usb_vcp.readline()
读取整行数据
usb_vcp.readlines()
读取所有数据并分行存储,返回字节对象列表
usb_vcp.write(buf)
写入缓冲区数据,返回写入数据的个数
usb_vcp.recv(data, *, timeout=5000)
data,可以是读取数据个数,或者是缓冲区
timeout,等待接收超时时间
usb_vcp.send(data, *, timeout=5000)
data,缓冲区或者整数
timeout,发送超时时间
3、一些简单的使用案例:
接收端demo
import pyb
usb_vcp = pyb.USB_VCP() # 将该对象赋给usb_vcp
if usb_vcp.any(): # 判断是否有数据流入
reads = usb_vcp.read(25) # 读取25个字符 (或者使用send方法)
pyb.delay(10)
print(reads) # 输出读取到的数据
发送端demo
import pyb
usb_vcp = pyb.USB_VCP() # 将该对象赋给usb_vcp
name = "我亦无争、天亦美"
usb_vcp.write(name) # 将字符串"我亦无争、天亦美"写出 (或者使用recv方法)
pyb.delay(10)
print(name) # 写出的数据
相信看到这里,你已经对USB_VCP这个对象有比较深的概念了,可以去动手尝试一下,如果这些还不足以让你完成你的项目。可以登录Micropython官网查阅相关资料。
MicroPython 1.18 documentation官方文档
MicroPython - Python for microcontrollers官网首页
我的博客还有如何刷写Micropython固件的。如果购买了Micropython不会刷写固件可以看看,固件太旧运行速度会很慢哦~
micropython pyboard stm32f405 固件刷写_我亦无争、天亦美的博客-CSDN博客
欢迎交流学习~