OpenMV MicroPython 库

警告

本节内容重要摘要

本章描述内置于 MicroPython 中的模块(函数库和类库)。本文档总体上力求描述 MicroPython 项目中实现的所有模块以及函数/类。然而,MicroPython 具有高度可配置性,针对某个特定主板/嵌入式系统的每个移植版本可能只包含可用 MicroPython 库的一个子集。

鉴于此,请注意本文档中描述的某个模块中的部分函数/类(甚至整个模块)可能在特定系统上的特定 MicroPython 构建版本中不可用。要查找某个特定功能是否可用的一般信息,最佳位置是“General Information”一节,其中包含与特定 MicroPython port 相关的信息。

在某些移植版本上,你可以通过在 REPL 中输入以下内容来发现可导入的、可用的内置库:

help('modules')

除了本文档中描述的内置库之外,更多来自 Python 标准库的模块以及对其的更多 MicroPython 扩展,都可以在 micropython-lib 中找到。

Python 标准库与微型库

以下标准 Python 库已被“微型化”,以契合 MicroPython 的理念。它们提供了相应模块的核心功能,旨在作为标准 Python 库的直接替代品。

OpenMV Cam 库

以下各节描述了每个 OpenMV 支持的主板上可用的库,既包括 MicroPython 专属的内置模块,也包括 OpenMV 自有的扩展。

通用模块

内置于每块 OpenMV 摄像头主板的固件中。

在大多数 OpenMV 摄像头主板上随附的固化 Python 辅助模块(驱动、网络和实用工具):

网络辅助模块(需要可用的网络接口):

Web 框架

Web 服务器框架模块。关于哪些主板包含每个模块,请参阅下方的各主板章节。

移植专属模块

与特定 MCU 系列绑定的模块。关于哪些主板包含每个模块,请参阅下方的各主板章节。

硬件驱动

用于一块或多块 OpenMV 支持主板上随附的传感器、显示屏及其他外设的驱动。关于哪些主板包含每个模块,请参阅下方的各主板章节。

各主板可用情况

下面的列表显示了每块主板上随附的移植专属模块和驱动模块。除非另有说明,通用固化 Python 辅助模块网络辅助模块(见上文)中的所有模块在每块摄像头主板上均可用。

OpenMV N6

STM32N657(Cortex-M55 @ 800 MHz),配备 1 GHz 片上 NPU,INT8 算力达 600 GOPS。该 NPU 与 PAG7936 100 万像素全局快门传感器搭配使用。

  • pyb --- 与主板相关的功能

  • stm --- STM32 MCU 专属功能

  • ssd1306 --- OLED 驱动

  • tb6612 --- TB6612 电机驱动

  • jwt --- JSON Web 令牌

  • microdot --- 极简 HTTP 框架

OpenMV AE3

Alif Ensemble E3 双核 SoC:Cortex-M55 @ 400 MHz(HP)加 Cortex-M55 @ 160 MHz(HE),配备两个片上 NPU(400 MHz / 204 GOPS HP NPU + 160 MHz / 46 GOPS HE NPU)。

  • alif --- Alif Ensemble SoC 功能

  • romfs --- ROMFS 辅助工具

  • pca9674a --- PCA9674A I2C 扩展器驱动

  • jwt --- JSON Web 令牌

  • microdot --- 极简 HTTP 框架

OpenMV Cam RT1062

围绕 NXP i.MX RT1062(Cortex-M7 @ 600 MHz)构建的低功耗机器视觉主板。集成了 USB-C 高速网络、Wi-Fi / 蓝牙以及 10/100 以太网。

  • mimxrt --- NXP i.MX RT 专属功能

  • dht --- DHT11 和 DHT22 温湿度传感器

  • onewire --- 1-Wire 总线协议

  • ds18x20 --- DS18x20 温度传感器驱动

  • neopixel --- 控制 WS2812 / NeoPixel LED

  • ssd1306 --- OLED 驱动

  • tb6612 --- TB6612 电机驱动

  • pca9674a --- PCA9674A I2C 扩展器驱动

  • jwt --- JSON Web 令牌

  • microdot --- 极简 HTTP 框架

OpenMV Pure Thermal

围绕 STM32H743(Cortex-M7 @ 480 MHz)构建的全系统热成像主板,配备 64 MB 外部 SDRAM、32 MB QSPI 闪存、硬件 JPEG 编解码器以及 DVI/HDMI 输出。

  • pyb --- 与主板相关的功能

  • stm --- STM32 MCU 专属功能

  • tfp410 --- DVI/HDMI 串行器

  • ft5x06 --- 电容式触摸屏驱动

  • dht --- DHT11 和 DHT22 温湿度传感器

  • onewire --- 1-Wire 总线协议

  • ds18x20 --- DS18x20 温度传感器驱动

  • neopixel --- 控制 WS2812 / NeoPixel LED

  • ssd1306 --- OLED 驱动

  • tb6612 --- TB6612 电机驱动

OpenMV Cam H7 Plus

STM32H743(Cortex-M7 @ 480 MHz),配备 32 MB 外部 SDRAM、32 MB QSPI 闪存、硬件 JPEG 编解码器以及 OV5640 500 万像素摄像头模块。

  • pyb --- 与主板相关的功能

  • stm --- STM32 MCU 专属功能

  • dht --- DHT11 和 DHT22 温湿度传感器

  • onewire --- 1-Wire 总线协议

  • ds18x20 --- DS18x20 温度传感器驱动

  • neopixel --- 控制 WS2812 / NeoPixel LED

  • ssd1306 --- OLED 驱动

  • tb6612 --- TB6612 电机驱动

OpenMV Cam H7

STM32H743(Cortex-M7 @ 480 MHz),配备 1 MB 内部 SRAM、2 MB 内部闪存以及硬件 JPEG 编解码器。

  • pyb --- 与主板相关的功能

  • stm --- STM32 MCU 专属功能

  • dht --- DHT11 和 DHT22 温湿度传感器

  • onewire --- 1-Wire 总线协议

  • ds18x20 --- DS18x20 温度传感器驱动

  • neopixel --- 控制 WS2812 / NeoPixel LED

  • ssd1306 --- OLED 驱动

  • tb6612 --- TB6612 电机驱动

OpenMV Cam M7

STM32F765(Cortex-M7 @ 216 MHz),配备 512 KB 内部 SRAM 和 2 MB 内部闪存。随附 OV7725 传感器。

  • pyb --- 与主板相关的功能

  • stm --- STM32 MCU 专属功能

  • dht --- DHT11 和 DHT22 温湿度传感器

  • onewire --- 1-Wire 总线协议

  • ds18x20 --- DS18x20 温度传感器驱动

  • neopixel --- 控制 WS2812 / NeoPixel LED

  • ssd1306 --- OLED 驱动

  • tb6612 --- TB6612 电机驱动

OpenMV Cam M4

STM32F427(Cortex-M4 @ 180 MHz),配备 256 KB 内部 SRAM 和 1 MB 内部闪存。随附 OV7725 传感器。

  • pyb --- 与主板相关的功能

  • stm --- STM32 MCU 专属功能

  • dht --- DHT11 和 DHT22 温湿度传感器

  • onewire --- 1-Wire 总线协议

  • ds18x20 --- DS18x20 温度传感器驱动

  • neopixel --- 控制 WS2812 / NeoPixel LED

  • ssd1306 --- OLED 驱动

  • tb6612 --- TB6612 电机驱动

Arduino Nicla Vision

围绕 STM32H747AII6 双核 SoC 构建的 22.86 × 22.86 mm 机器视觉主板:Cortex-M7 @ 400 MHz 加 Cortex-M4 @ 200 MHz。

  • pyb --- 与主板相关的功能

  • stm --- STM32 MCU 专属功能

  • lsm6dsox --- LSM6DSOX 6 轴 IMU

  • dht --- DHT11 和 DHT22 温湿度传感器

  • ds18x20 --- DS18x20 温度传感器驱动

  • onewire --- 1-Wire 总线协议

  • neopixel --- 控制 WS2812 / NeoPixel LED

Arduino Portenta H7

围绕 STM32H747XI 双核 SoC 构建的 66 × 25 mm 工业开发板:Cortex-M7 @ 400 MHz 加 Cortex-M4 @ 200 MHz。

  • pyb --- 与主板相关的功能

  • stm --- STM32 MCU 专属功能

  • dht --- DHT11 和 DHT22 温湿度传感器

  • ds18x20 --- DS18x20 温度传感器驱动

  • onewire --- 1-Wire 总线协议

  • neopixel --- 控制 WS2812 / NeoPixel LED

  • lora --- LoRa 调制解调器驱动

  • ssd1306 --- OLED 驱动

  • tb6612 --- TB6612 电机驱动

Arduino Giga R1 WiFi

围绕 STM32H747XI 双核 SoC 构建的 101 × 53 mm Mega 外形主板:Cortex-M7 @ 480 MHz 加 Cortex-M4 @ 240 MHz,并配有板载 800x480 触摸屏。

  • pyb --- 与主板相关的功能

  • stm --- STM32 MCU 专属功能

  • dht --- DHT11 和 DHT22 温湿度传感器

  • onewire --- 1-Wire 总线协议

  • neopixel --- 控制 WS2812 / NeoPixel LED

  • gt911 --- GT911 5 点电容式触摸控制器

  • ft5x06 --- 电容式触摸屏驱动

Arduino Nano RP2040 Connect

基于 RP2040 的 Nano 外形主板,搭载 U-blox NINA-W102 Wi-Fi/蓝牙模块。已不再积极支持;保留此主板的最后一个 OpenMV 固件版本仅供存档使用。

  • rp2 --- RP2040 专属 PIO / DMA / 闪存辅助模块

  • espflash --- ESP32 ROM 引导加载程序固件烧录器

  • lsm6dsox --- LSM6DSOX 6 轴 IMU

  • dht --- DHT11 和 DHT22 温湿度传感器

  • onewire --- 1-Wire 总线协议

  • ds18x20 --- DS18x20 温度传感器驱动

  • neopixel --- 控制 WS2812 / NeoPixel LED

Arduino Nano 33 BLE Sense

Nordic nRF52840 Nano 外形主板,搭载板载 Arduino 传感器套件。已不再积极支持;保留此主板的最后一个 OpenMV 固件版本仅供存档使用。

  • ubluepy --- 基于 Nordic SoftDevice 的蓝牙 LE 外设与中心设备 API

  • bmi270 --- BMI270 6 轴 IMU

  • bmm150 --- BMM150 3 轴磁力计

  • lsm9ds1 --- LSM9DS1 9 轴 IMU

  • hts221 --- HTS221 湿度/温度传感器

  • lps22h --- LPS22HB/HH 压力传感器

  • hs3003 --- HS3003 湿度/温度传感器

  • apds9960 --- 接近、手势和颜色传感器驱动

  • dht --- DHT11 和 DHT22 温湿度传感器

  • onewire --- 1-Wire 总线协议

  • ds18x20 --- DS18x20 温度传感器驱动

  • neopixel --- 控制 WS2812 / NeoPixel LED

从 Python 扩展内置库

一部分内置模块可以通过在文件系统中提供同名模块的 Python 代码进行扩展。这种可扩展性适用于以下内置于固件的 Python 标准库模块:arraybinasciicollectionserrnogziphashlibheapqiojsonosplatformrandomreselectsocketsslstructtimezlib,以及 MicroPython 专属的 machine 模块。所有其他内置模块都无法从文件系统进行扩展。

这使得用户能够提供内置库的扩展实现(也许是为了提供额外的 CPython 兼容性或缺失的功能)。这在 micropython-lib 中被广泛使用,更多信息请参阅 包管理。文件系统模块通常会对内置模块执行通配符导入,以便从内置模块继承所有全局对象(类、函数和变量)。

在 MicroPython v1.21.0 及更高版本中,为了防止文件系统模块导入自身,它可以通过在导入期间临时清空 sys.path 来强制导入内置模块。例如,要从 Python 扩展 time 模块,文件系统上名为 time.py 的文件可以这样写:

_path = sys.path
sys.path = ()
try:
  from time import *
finally:
  sys.path = _path
  del _path

def extra_method():
  pass

结果是 time.py 包含了内置 time 模块的所有全局对象,但增加了 extra_method

在较早版本的 MicroPython 中,你可以通过在内置模块名称开头添加 u 来强制导入它。例如,使用 import utime 而不是 import time。例如,文件系统上的 time.py 可以这样写:

from utime import *

def extra_method():
  pass

这种方式仍然受支持,但上面描述的 sys.path 方法现在更受推荐,因为在未来的 MicroPython 版本中,内置模块名称中的 u 前缀将被移除。

除非确实需要强制使用内置模块,否则代码应始终使用 import module 而不是 import umodule