MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。
MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。
MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。
使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。
总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
pyboard是一个紧凑而强大的电子开发板,运行MicroPython。它通过USB连接到您的PC,为您提供一个USB闪存驱动器来保存Python脚本,以及用于即时编程的串行Python提示符(REPL)。需要微型 USB 电缆。适用于 Windows、Mac 和 Linux。
MicroPython是对Python(版本3.4)编程语言的完全重写,因此它适合并在微控制器上运行。它包括许多优化,因此它可以高效运行并使用很少的 RAM。
MicroPython在pyboard上运行裸机,本质上是一个Python操作系统。内置 pyb 模块包含用于控制板上可用外设的函数和类,例如 UART、I2C、SPI、ADC 和 DAC。观看此视频,了解 pyboard 的概述。
MicroPython 的 pyb.USB 是一个用于创建和操作 USB 对象的函数。USB 对象用于控制和配置 pyboard 的 USB 功能,包括 USB 模式、USB 电源、USB 中断等。
pyb.USB 的主要特点是:
它是一种简单而方便的 USB 对象创建方式,可以用 pyb.USB() 的形式来创建一个 USB 对象,不需要指定任何参数。
它是一种灵活而强大的 USB 对象操作方式,可以用 init 方法来设置 USB 的模式,如 CDC(虚拟串口)、MSC(大容量存储)、HID(人机接口)等,可以用 power 方法来设置 USB 的电源模式,如总是开启、总是关闭、自动切换等,可以用 irq 方法来注册或取消一个回调函数,在 USB 中断时执行。
它是一种兼容而可扩展的 USB 对象接口方式,可以用其他模块或函数来访问或修改 USB 对象的属性和方法,可以用其他硬件或软件来连接或模拟 USB 的功能。
pyb.USB 的应用场景有:
用于实现 pyboard 与电脑或其他设备之间的数据传输和交换,如通过 CDC 模式进行串口通信,通过 MSC 模式进行文件管理,通过 HID 模式进行键盘或鼠标控制等。
用于实现 pyboard 的控制和配置,如通过 init 方法切换不同的 USB 模式,通过 power 方法控制 USB 的电源状态,通过 irq 方法处理 USB 的中断事件等。
用于实现创意和艺术的表达,如通过 USB 控制一些装置或装饰品,实现有趣或美观的动态效果。
pyb.USB 的需注意事项有:
在使用 pyb.USB() 之前,需要确保 pyboard 已经正确地连接到电源和电脑,并且已经安装了 MicroPython 的固件。
在使用 pyb.USB() 时,需要注意 USB 对象的电压范围和电流限制,避免造成硬件损坏或故障。
在使用 pyb.USB() 时,需要注意 USB 对象的功能冲突和共享问题,避免造成功能失效或干扰。例如,如果使用 CDC 模式,则不能同时使用 REPL 功能;如果使用 MSC 模式,则不能同时访问内部闪存。
以下是几个使用 pyb.USB() 的实际运用程序案例:
案例一:使用 pyb.USB() 来创建一个 USB 对象,并以 CDC 模式初始化它,使得 pyboard 可以作为一个虚拟串口设备与电脑进行通信。代码如下:
import pyb # 导入 pyb 模块
usb = pyb.USB() # 创建一个 USB 对象
usb.init('CDC') # 设置 USB 的模式为 CDC
这个程序可以让 pyboard 作为一个虚拟串口设备与电脑进行通信。你可以用其他方法来发送或接收数据。
案例二:使用 pyb.USB() 来创建一个 USB 对象,并以 MSC 模式初始化它,使得 pyboard 可以作为一个大容量存储设备与电脑进行文件管理。代码如下:
import pyb # 导入 pyb 模块
usb = pyb.USB() # 创建一个 USB 对象
usb.init('MSC') # 设置 USB 的模式为 MSC
这个程序可以让 pyboard 作为一个大容量存储设备与电脑进行文件管理。你可以用其他方法来读写文件。
案例三:使用 pyb.USB() 来创建一个 USB 对象,并以 HID 模式初始化它,使得 pyboard 可以作为一个人机接口设备与电脑进行键盘或鼠标控制。代码如下:
import pyb # 导入 pyb 模块
usb = pyb.USB() # 创建一个 USB 对象
usb.init('HID') # 设置 USB 的模式为 HID
hid = pyb.hid_mouse() # 创建一个 HID 鼠标对象
hid.send((0, 10, 10, 0)) # 发送鼠标移动的数据,表示向右下方移动 10 像素
这个程序可以让 pyboard 作为一个人机接口设备与电脑进行键盘或鼠标控制。你可以用其他方法来发送不同的 HID 数据。
案例四:USB串口通信:
import pyb
# 初始化USB串口对象
usb = pyb.USB_VCP()
# 发送数据
usb.send("Hello, world!")
# 接收数据
received_data = usb.recv(10)
print("接收到的数据:", received_data)
在这个例子中,我们使用pyb.USB_VCP()函数初始化USB串口对象。通过调用usb.send()方法,我们可以向USB串口发送数据。通过调用usb.recv()方法,我们可以接收一定数量的数据。在这里,我们尝试接收10个字节的数据,并将其打印出来。
案例五:USB HID设备:
import pyb
# 初始化USB HID对象
usb = pyb.USB_HID()
# 发送键盘按键
usb.send_keyboard("a")
# 发送鼠标移动
usb.send_mouse_movement(10, 10)
# 发送鼠标点击
usb.send_mouse_button(1)
# 保持程序运行
while True:
pass
在这个例子中,我们使用pyb.USB_HID()函数初始化USB HID对象。通过调用usb.send_keyboard()方法,我们可以发送键盘按键。通过调用usb.send_mouse_movement()方法,我们可以发送鼠标移动。通过调用usb.send_mouse_button()方法,我们可以发送鼠标点击。在这里,我们发送了按下键盘上的"a"键,移动鼠标10个像素的水平和垂直方向,以及发送鼠标左键点击。最后,我们使用一个无限循环来保持程序运行,以便保持USB HID设备的功能。
案例六:USB存储设备:
i
mport pyb
# 初始化USB存储设备对象
usb = pyb.USB_MS()
# 挂载USB存储设备
usb.mount()
# 创建文件
with open("/flash/test.txt", "w") as file:
file.write("Hello, world!")
# 卸载USB存储设备
usb.umount()
# 保持程序运行
while True:
pass
在这个例子中,我们使用pyb.USB_MS()函数初始化USB存储设备对象。通过调用usb.mount()方法,我们将USB存储设备挂载到MicroPython的文件系统中。然后,我们使用内置的open()函数创建一个文件,并将字符串"Hello, world!"写入该文件。最后,通过调用usb.umount()方法,我们将USB存储设备从MicroPython的文件系统中卸载。使用一个无限循环来保持程序运行,以便保持USB存储设备的功能。
案例七:USB虚拟串口
import pyb
# 初始化USB虚拟串口
usb = pyb.USB_VCP()
# 发送数据
data = "Hello, USB!"
usb.write(data)
# 接收数据
while True:
if usb.any():
data = usb.read(10) # 读取最多10个字节数据
print("Received:", data)
这个示例程序使用pyb.USB_VCP()初始化USB虚拟串口。通过调用usb.write()方法,可以向USB虚拟串口发送数据。在这个示例中,发送了一个字符串数据"Hello, USB!"。通过调用usb.any()方法检查USB虚拟串口接收缓冲区中是否有数据可读,如果有数据可读,则调用usb.read()方法读取最多10个字节的数据,并打印出来。
案例8:USB存储设备
import pyb
# 初始化USB存储设备
usb = pyb.USB_Storage()
# 挂载USB存储设备
usb.mount()
# 检查USB存储设备是否已挂载
if usb.isconnected():
print("USB storage connected")
else:
print("USB storage not connected")
# 访问USB存储设备
files = usb.listdir()
print("Files in USB storage:", files)
# 卸载USB存储设备
usb.umount()
这个示例程序使用pyb.USB_Storage()初始化USB存储设备。通过调用usb.mount()方法,可以挂载USB存储设备。通过调用usb.isconnected()方法,可以检查USB存储设备是否已经成功连接。通过调用usb.listdir()方法,可以列出USB存储设备中的文件。最后,通过调用usb.umount()方法,可以卸载USB存储设备。
示例9:示例9:USB HID设备模拟
import pyb
# 初始化USB HID设备
usb = pyb.USB_HID()
# 发送按键事件
usb.send_keycode(pyb.USB_HID.KEY_A, pyb.USB_HID.MOD_CTRL)
# 发送鼠标移动事件
usb.send_mouse_movement(10, 0)
# 发送鼠标点击事件
usb.send_mouse_click(pyb.USB_HID.MOUSE_LEFT)
# 发送自定义报告
report = bytes([0x01, 0x02, 0x03, 0x04])
usb.send_report(report)
这个示例程序使用pyb.USB_HID()初始化USB HID设备。通过调用usb.send_keycode()方法,可以发送键盘按键事件。在这个示例中,发送了一个模拟按下Ctrl键并按下A键的按键事件。通过调用usb.send_mouse_movement()方法,可以发送鼠标移动事件。在这个示例中,发送了一个鼠标向右移动10个单位的事件。通过调用usb.send_mouse_click()方法,可以发送鼠标点击事件。在这个示例中,发送了一个模拟左键点击的事件。通过调用usb.send_report()方法,可以发送自定义的报告数据。
这些示例程序展示了使用pyb.USB的一些用法,可以用于实现USB虚拟串口、USB存储设备挂载和USB HID设备模拟等功能。具体的应用场景和使用方式可能会根据实际需求而有所不同。