MicroPython 的 Zephyr 移植版指南:在资源受限设备上运行 MicroPython RTOS 端口的构建、硬件控制与存储
嵌入式语言运行时编程语言解释器编译器物联网系统编程【免费下载链接】micropythonMicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems项目地址https://gitcode.com/gh_mirrors/mi/micropython点击查看免费下载MicroPython 的 Zephyr 移植版Zephyr port是一个将 MicroPython 解释器运行于 Zephyr RTOS 之上的官方移植实现。本指南以 docs/zephyr/general.rst 为主线结合 ports/zephyr/README.md 与 ports/zephyr/ 目录下的源码、板级配置系统讲解该移植版的背景定位、环境搭建、构建运行流程、REPL 交互、GPIO 等硬件外设编程、文件系统与存储以及最小化构建与源码级实现细节。读完本文你将能够基于任意受 Zephyr 支持的开发板独立完成 MicroPython 固件的编译、烧录与硬件控制程序的编写。一、Zephyr 移植版概述面向多架构 RTOS 的 MicroPythonZephyr 项目 是由 Linux 基金会主办的协作项目是一个开源、可扩展、面向资源受限设备的实时操作系统RTOS支持多种架构。MicroPython 的 Zephyr 移植版正是将 MicroPython 运行时作为 Zephyr 应用程序运行从而让开发者用 Python 直接驱动 Zephyr 的设备树devicetree、GPIO、I2C/SPI 总线、传感器、网络与文件系统。从 ports/zephyr/README.md 可知该移植版目前支持 Zephyr 上游支持的所有版本即当前 v3.7LTS、v4.4 及开发分支CI 使用最新版本v4.4进行验证。其当前已支持的功能包括通过 Zephyr UART 控制台提供 REPL 交互提示符time模块用于时间测量与延时machine.Pin类用于 GPIO 控制支持中断IRQmachine.I2C、machine.SPI、machine.PWM、machine.ADC等外设控制类socket模块用于网络通信IPv4/IPv6zsensor模块用于读取传感器数据冻结模块Frozen modules支持可将 Python 模块包括完整应用随固件打包并支持开机自启基于 DiskAccess 或 FlashAreaflash map的虚拟文件系统支持 FAT 与 littlefs 两种格式。板级支持情况Zephyr OS 支持来自不同来源的大量模块与开发板。所有具备标准功能支持如 UART 控制台的 Zephyr 板卡理论上都应能运行 MicroPython但并非全部经过测试。官方文档以FRDM-K64F作为参考板因此 ports/zephyr/boards/ 目录下以frdm_k64f.conf等板级配置与各manifest.py冻结清单代表了经过实际测试并启用了额外选项如文件系统支持的板卡集合。若使用其他板卡建议准备好该板的数据手册datasheet、原理图等参考资料以便查询引脚编号、外设实例等细节。同时docs/zephyr/tutorial/pins.rst 也明确指出引脚编号需参照板卡数据手册或 Zephyr 文档进行换算。二、构建环境准备安装 Zephyr SDK 与源码构建 Zephyr 移植版首先需要安装 Zephyr 开发环境。官方步骤详见 ports/zephyr/README.md包括安装 Zephyr SDK、获取 Zephyr 源码并配置开发环境。建议先编译 Zephyr 自带的示例应用验证环境正确无误。若已有 Zephyr 环境但构建 MicroPython 移植版出现问题可以按指定版本重新初始化$ west init zephyrproject -m https://github.com/zephyrproject-rtos/zephyr --mr v4.4.0如果不想重做整个安装仅在 master 与标签版本之间切换可以进入 Zephyr 源码目录执行$ cd zephyrproject/zephyr $ git checkout v4.4.0 $ west updateZephyr 安装完成后可能需要先配置环境例如 source 环境脚本$ source zephyrproject/zephyr/zephyr-env.sh源码级视角从 Zephyr 工程到 MicroPython 应用Zephyr 移植版在构建层面是一个标准的 Zephyr 应用程序。从 ports/zephyr/CMakeLists.txt、ports/zephyr/Kconfig、ports/zephyr/prj.conf 等文件可以看出MicroPython 核心py/目录以库的形式链接进 Zephyr 应用并通过 Kconfig 选项如CONFIG_MICROPY_HEAP_SIZE、CONFIG_MICROPY_CONFIG_ROM_LEVEL_FULL_FEATURES等配置堆大小与功能裁剪。主入口位于 ports/zephyr/main.c负责在 Zephyr 线程上下文中启动 MicroPython 运行时。三、构建与烧录固件构建 MicroPython Zephyr 移植版与构建其他 Zephyr 应用完全相同且不要求在ports/zephyr目录内进行——你可以在文件系统的任意位置执行west build。假设已将 MicroPython 仓库克隆到主目录下为frdm_k64f板构建$ west build -b frdm_k64f ~/micropython/ports/zephyr为 QEMUx86 模拟器构建$ west build -b qemu_x86 ~/micropython/ports/zephyr若需要启用_thread线程模块可追加thread.conf覆盖配置$ west build -b frdm_k64f ~/micropython/ports/zephyr -DOVERLAY_CONFIGthread.confports/zephyr/thread.conf 即为该移植版提供的线程模块配置样例。烧录与运行固件构建完成后烧录到开发板$ west flash如需在烧录后启动 gdb 调试会话$ west debug对于 QEMU 类板卡如qemu_x86、qemu_cortex_m3直接运行$ west build -t run网络注意事项默认配置启用了网络功能。在 QEMU 中运行时需要按照 Zephyr 文档的指引配置宿主机端的 TAP/SLIP 网络。若出现如下报错could not connect serial device to character backend unix:/tmp/slip.sock即表示宿主机网络后端未正确配置。如果不希望做额外网络设置而快速运行可以使用下面介绍的最小化构建minimal build。四、最小化构建Minimal Build控制在 128KB 以内MicroPython 承诺将 Zephir 移植版的二进制体积维持在128KB 以下前提是 Zephyr 自身内核体积保持稳定。在此体积下除了 UART 上的 REPL 之外不支持任何 Zephyr 高级特性仅包含极简的内置 Python 模块集合。因此该构建适合代码体积控制、小型系统上的快速演示以及按需逐个启用功能以达到所需功能与体积平衡的场景——这与默认构建会随时间逐步增加功能形成对比。执行最小化构建$ west build -b qemu_x86 ~/micropython/ports/zephyr -- -DCONF_FILEprj_minimal.conf其中 ports/zephyr/prj_minimal.conf 是极简配置文件与 ports/zephyr/mpconfigport_minimal.h 相配合裁剪掉大量模块与功能。构建完成后无需 TAP 网络设置即可在 QEMU 中运行$ west build -t run五、REPL进入交互式 Python 环境REPLRead-Eval-Print Loop是 MicroPython 的交互式提示符。在 Zephyr 移植版中REPL 通过由zephyr,console设备树节点指定的 UART 串口外设提供波特率为115200详见 docs/zephyr/tutorial/repl.rst。若板卡带有 USB 转串口芯片可直接在 PC 上访问。Linux/macOS 下使用screen连接screen /dev/ttyACM0 115200也可尝试picocom或minicom。若提示设备不存在可改用/dev/ttyACM1或更高编号必要时可能需要加入uucp或dialout用户组或使用 sudo。Windows 用户可使用 puTTY 等终端软件通过相应 COM 口建立串行会话。首次启动输出打开串口后按回车或复位板卡将看到类似如下提示*** Booting Zephyr OS build v4.4.0 *** MicroPython v1.29.0-preview.69.g8a56be6660 on 2026-04-27; zephyr-frdm_k64f with mk64f12 Type help() for more information. 此时即可在提示符后输入 MicroPython 代码。先用print验证环境 print(hello world!) hello world!再尝试基本运算与字符串操作 1 2 3 1 / 2 0.5 3 * Zephyr ZephyrZephyrZephyrREPL 下方的 UART 字节流由 ports/zephyr/zephyr_getchar.c 与 ports/zephyr/zephyr_getchar.h 提供底层支撑将 Zephyr 控制台输入输出与 MicroPython 运行时对接起来。六、GPIO 引脚编程端口号与引脚号的 Tuple 约定在 Zephyr 移植版中machine.Pin的初始化使用(端口, 引脚号)元组作为id值详见 docs/zephyr/tutorial/pins.rst。例如初始化 FRDM-K64F 板上的红色 LEDPTB22LED Pin((GPIO_1, 22), Pin.OUT)不同板卡的端口命名与编号不同常见格式对照如下板卡引脚元组格式frdm_k64f红色 LED PTB22(GPIO_1, 22)96b_carbonLED1 PD2(GPIOD, 2)mimxrt685_evk_cm33绿色 LED PIO0_14(GPIO0, 14)在源码层面ports/zephyr/machine_pin.c 的mp_pin_make_new第 117 行附近会解析该元组若格式不符会抛出Pin id must be tuple of (GPIO_x, pin#)的ValueError。Zephyr 的GPIO_*常量被直接映射为 MicroPython 的Pin模式常量例如Pin.IN对应GPIO_INPUT、Pin.OUT对应GPIO_OUTPUT | GPIO_INPUT、Pin.OPEN_DRAIN对应GPIO_OPEN_DRAIN上拉/下拉Pin.PULL_UP/Pin.PULL_DOWN与中断触发IRQ_RISING/IRQ_FALLING同样一一对应。引脚初始化与读写完整示例来自 docs/zephyr/quickref.rstfrom machine import Pin pin Pin((gpiob, 21), Pin.IN) # 在 GPIO B 端口创建输入引脚 print(pin) # 打印引脚端口与编号 pin.init(Pin.OUT, Pin.PULL_UP, value1) # 重新初始化引脚 pin.value(1) # 置高 pin.value(0) # 置低 pin.on() # 置高 pin.off() # 置低 pin Pin((gpiob, 21), Pin.IN) pin Pin((gpiob, 21), Pin.OUT, value1) # 创建时即置高 pin Pin((gpiob, 21), Pin.IN, Pin.PULL_UP) # 使能内部上拉 switch Pin((gpioc, 6), Pin.IN) # 为开关创建输入引脚 switch.irq(lambda t: print(SW2 changed)) # 状态变化时触发中断注意源码中machine_pin_obj_init_helper第 77 行附近会尝试按GPIO_OUTPUT | GPIO_INPUT配置引脚对于不支持该组合的目标如 frdm_k64f会回退为仅GPIO_OUTPUT第 105-107 行这一兼容性处理保证了两类板卡都能正常工作。LED 闪烁示例FRDM-K64Fimport time from machine import Pin LED Pin((gpiob, 21), Pin.OUT) while True: LED.value(1) time.sleep(0.5) LED.value(0) time.sleep(0.5)上面代码使用 FRDM-K64F 的端口 B、引脚 21。Zephyr 约定中端口通过设备树节点标签标识其他板卡需依据其参考资料调整。在 REPL 中执行时可先按CtrlE进入粘贴模式粘贴代码后按CtrlD结束粘贴并开始执行。引脚中断IRQZephyr 移植版通过machine.Pin.irq()支持引脚中断。以 FRDM-K64F 的 SW2/SW3 按键为例from machine import Pin SW2 Pin((gpioc, 6), Pin.IN) SW3 Pin((gpioa, 4), Pin.IN) SW2.irq(lambda t: print(SW2 changed)) SW3.irq(lambda t: print(SW3 changed)) while True: passpins.rst 中给出的写法为(GPIO_2, 6)/(GPIO_0, 4)两种命名均符合 Zephyr 端口设备树节点标签的约定。底层由 machine_pin.c 的machine_pin_irq第 191 行附近调用 Zephyrgpio_pin_interrupt_configure()实现中断使能/禁用默认触发方式为GPIO_INT_EDGE_BOTH即双边沿。七、时间、PWM、I2C、SPI 与 ADC 外设时间与延时使用time模块docs/zephyr/quickref.rstimport time time.sleep(1) # 睡眠 1 秒 time.sleep_ms(500) # 睡眠 500 毫秒 time.sleep_us(10) # 睡眠 10 微秒 start time.ticks_ms() # 获取毫秒计数器 delta time.ticks_diff(time.ticks_ms(), start) # 计算时间差该模块在 ports/zephyr/modtime.c 中实现底层基于 Zephyr 内核时钟。PWMPWM 通过machine.PWM类访问from machine import PWM pwm PWM((pwm0, 0), freq3921568, duty_ns200, invertTrue) # 在 PWM0 上创建 PWM print(pwm) # 打印 PWM 对象 print(pwm.duty_ns()) # 打印以纳秒为单位的占空比 pwm.duty_ns(255) # 设置新的占空比纳秒 pwm.deinit()对应实现位于 ports/zephyr/machine_pwm.c。注意duty_ns的语义读取时返回当前占空比纳秒值写入时设置新占空比。硬件 I2Cfrom machine import I2C i2c I2C(i2c0) # 构造 I2C 总线设备树节点标签 print(i2c) # 打印设备名 i2c.scan() # 扫描总线上可用的 I2C 从设备 i2c.readfrom(0x1D, 4) # 从地址 0x1D 读 4 字节 i2c.readfrom_mem(0x1D, 0x0D, 1) # 从 0x1D 的寄存器 0x0D 读 1 字节 i2c.writeto(0x1D, babcd) # 向 0x1D 写数据 i2c.writeto_mem(0x1D, 0x0D, bab) # 向 0x1D 的寄存器 0x0D 写数据 buf bytearray(8) # 创建 8 字节缓冲区 i2c.writeto(0x1D, babcd) # 向 0x1D 写数据实现见 ports/zephyr/machine_i2c.c。例如在 FRDM-K64F 上扫描 I2C 从设备from machine import I2C i2c I2C(i2c0) i2c.scan()硬件 SPIfrom machine import SPI spi SPI(spi0) # 默认配置构造 SPI 总线 spi.init(baudrate100000, polarity0, phase0, bits8, firstbitSPI.MSB) # 设置配置 # 等价写法构造时同时设置配置 spi SPI(spi0, baudrate100000, polarity0, phase0, bits8, firstbitSPI.MSB) print(spi) # 打印设备名与总线配置 spi.read(4) # 在 MISO 上读 4 字节 spi.read(4, write0xF) # 读 4 字节同时在 MOSI 上写 0xF buf bytearray(8) spi.readinto(buf) # 读入缓冲区读取字节数等于缓冲区大小 spi.readinto(buf, 0xF) # 读入缓冲区同时在 MOSI 上写 0xF spi.write(babcd) # 在 MOSI 上写 4 字节 buf bytearray(4) spi.write_readinto(babcd, buf) # MOSI 写、MISO 读入缓冲区 spi.write_readinto(buf, buf) # 写 buf 并读回 buf实现见 ports/zephyr/machine_spi.c。例如向 MOSI 写缓冲区from machine import SPI spi SPI(spi0) spi.init(baudrate500000, polarity1, phase1, bits8, firstbitSPI.MSB) spi.write(babcd)ADC使用machine.ADC读取引脚模拟值前提是zephyr,user设备树节点包含包含所有 ADC 通道的io-channels属性from machine import ADC adc ADC((adc, 0)) adc.read_uv()read_uv()返回以微伏µV为单位的电压值实现见 ports/zephyr/machine_adc.c。八、传感器zsensor与显示Displayzsensor 传感器模块zsensor.Sensor类用于读取传感器数据docs/zephyr/quickref.rstimport zsensor from zsensor import Sensor accel Sensor(fxos8700) # 为加速度计创建传感器对象设备树节点名 accel.measure() # 获取一次测量读数 accel.get_float(zsensor.ACCEL_X) # 以浮点数获取 X 轴测量值 accel.get_millis(zsensor.ACCEL_Y) # 以百万分之一为单位获取 Y 轴测量值 accel.get_micro(zsensor.ACCEL_Z) # 以千分之一为单位获取 Z 轴测量值 accel.get_int(zsensor.ACCEL_X) # 仅获取 X 轴整数测量值get_int/get_float/get_millis/get_micros的参数是zsensor模块中的通道 ID 常量如ACCEL_X、ACCEL_Y、ACCEL_Z。通过attr_set可设置传感器属性如量程与采样率以 XIAO BLE NRF52840 SENSE 板上的lsm6ds3tr_c为例from zsensor import * accel Sensor(lsm6ds3tr_c) # 设备树中的名称 # 设置满量程为 2g19.613300 m/s^2单位微米/秒^2以浮点数给出 accel.attr_set(ACCEL_XYZ, ATTR_FULL_SCALE, 19.613300) # 设置采样频率为 104 Hz以整数对给出 accel.attr_set(ACCEL_XYZ, ATTR_SAMPLING_FREQUENCY, 104, 0) accel.measure() accel.get_float(ACCEL_X) # -0.508 (m/s^2) accel.get_float(ACCEL_Y) # -3.62 (m/s^2) accel.get_float(ACCEL_Z) # 9.504889 (m/s^2)attr_set/attr_get_*使用的属性 ID 是zsensor模块中命名为ATTR_*的常量例如ATTR_FULL_SCALE、ATTR_SAMPLING_FREQUENCY。另有attr_get_float、attr_get_int、attr_get_millis、attr_get_micros等读取方法但许多传感器不支持读取属性full_scale accel.attr_get_float(ATTR_FULL_SCALE)实现见 ports/zephyr/modzsensor.c其内部通过 Zephyr 的 Sensor 子系统 API 与设备树传感器节点交互。Display 显示模块zephyr.Display类控制 Zephyr 提供的显示设备可与framebuf模块配合绘制内容import zephyr, framebuf # 通过节点标识符创建 Display 实例 display zephyr.Display(ssd13063c) # 创建与显示器格式匹配的 FrameBuffer128x64单色 fb framebuf.FrameBuffer(bytearray(int(64*128/8)), 128, 64, framebuf.MVLSB) # 关闭消隐 display.blanking(False) # 向 framebuf 写文本 fb.text(Hello World, 0, 0, 1) # 将 framebuf 缓冲区写入显示器 display.write(fb)也可以让Display对象直接生成与当前配置匹配的 FrameBufferimport zephyr, framebuf # 为配置的第一个显示器创建 Display 实例 display zephyr.Display(0) display.blanking(False) # 获取与当前配置匹配的 FrameBuffer fb display.as_framebuf() fb.text(Hello World, 0, 0, 1) fb.show()底层实现见 ports/zephyr/zephyr_display.c它包装了 Zephyr 的 Display API。九、文件系统与存储DiskAccess 与 FlashAreaZephyr 移植版的存储子系统支持基于 FAT 与 littlefs 的虚拟文件系统VFS底层由 Zephyr 的DiskAccess磁盘访问 API或FlashAreaflash map 闪存分区 API支撑具体取决于板卡支持哪种详见 docs/zephyr/tutorial/storage.rst。核心实现位于 ports/zephyr/zephyr_storage.c、ports/zephyr/zephyr_filesystem.c 与 ports/zephyr/zephyr_device.c。启动时自动挂载MicroPython 在 Zephyr 上启动时会自动尝试挂载可用存储闪存存储若可用自动以 littlefs2 文件系统挂载到/flash。若文件系统不存在则自动创建。磁盘存储如 SD 卡自动检测并挂载到/磁盘名如/sd。工作目录若有挂载的磁盘则设为磁盘目录否则若闪存可用则设为/flash。模块搜索路径sys.path会自动加入每个已挂载磁盘的/磁盘/lib以及闪存的/flash/lib。该自动挂载由启动时的_boot.py模块执行见 ports/zephyr/modules/_boot.py。对大多数使用场景而言无需手动挂载文件系统。使用 DiskAccess 访问 SD 卡zephyr.DiskAccess类基于 Zephyr Disk Access API 实现vfs.AbstractBlockDev协议用于访问 SD 卡等存储设备。SD 卡在启动时即须存在且不能拔除启动时会被自动检测并由文件系统初始化。可用磁盘名通过DiskAccess.disks属性获取例如(SDHC,)或(SD,)。以 mimxrt1050_evk 板上 FatFS SD 卡为例import vfs from zephyr import DiskAccess # 列出可用磁盘 print(DiskAccess.disks) # 例如 (SDHC,) bdev DiskAccess(SDHC) # 用 DiskAccess 创建块设备对象 vfs.VfsFat.mkfs(bdev) # 用磁盘块创建 FAT 文件系统 vfs.mount(bdev, /sd) # 挂载到 /sd 目录 with open(/sd/hello.txt,w) as f: # 新建文件 f.write(Hello world) # 写入内容 print(open(/sd/hello.txt).read()) # 读取并打印文件内容使用 FlashArea 访问闪存分区zephyr.FlashArea类基于 Zephyr Flash map API 实现vfs.AbstractBlockDev协议适合实现底层存储系统或定制文件系统配置。可用分区名通过FlashArea.areas字典获取将分区标签映射到分区 ID例如{storage: 1, scratch: 4}。以 reel_board 或 rv32m1_vega_ri5cy 板的内置闪存为例import vfs from zephyr import FlashArea # 列出可用闪存分区 print(FlashArea.areas) # 例如 {storage: 1, scratch: 4} bdev FlashArea(FlashArea.areas[storage], 4096) # 用 FlashArea 创建块设备对象 vfs.VfsLfs2.mkfs(bdev) # 创建 littlefs 文件系统 vfs.mount(bdev, /flash) # 挂载到 /flash with open(/flash/hello.txt,w) as f: # 新建文件 f.write(Hello world) # 写入内容 print(open(/flash/hello.txt).read()) # 读取并打印文件内容注意事项FlashArea.areas字典中的分区信息来自 Zephyr 设备树擦除块大小取自闪存控制器的erase-block-size属性未指定该属性的设备如 QSPI NOR 闪存默认取 4096 字节见 ports/zephyr/README.md。大多数情况下闪存分区已在启动时自动挂载到/flash并自动创建文件系统无需手动挂载。对于 MicroPython 应用占用了默认 flash storage 分区的板卡如 frdm_k64f应将storage替换为scratch分区使用。使用 Zephyr 原生文件系统除 MicroPython 自带的 VFS 外移植版还提供第二种方案直接使用 Zephyr 的文件系统管理从而在 Zephyr 与 MicroPython 代码之间共享文件访问。需要启用以下 Kconfig 选项CONFIG_FLASH_MAPy # 文件系统子系统的前置要求 CONFIG_FILE_SYSTEMy # 启用文件系统子系统 CONFIG_FILE_SYSTEM_LITTLEFSy # 在 Zephyr 中启用 littlefs 支持 CONFIG_FILE_SYSTEM_MKFSy # 允许创建新文件系统随后在设备树 overlay 中增加 fstab 节点例如fstab { compatible zephyr,fstab; lfs2: lfs2 { compatible zephyr,fstab,littlefs; mount-point /flash; partition storage_partition; read-size16; prog-size4096; cache-size4096; lookahead-size32; block-cycles4; }; };之后即可像普通 MicroPython 文件系统一样使用import vfs, zephyr zfs zephyr.FileSystem(zephyr.FileSystem.fstab()[0]) vfs.mount(zfs, /zephyr)若想节省空间可禁用 MicroPython 自带的文件系统代码CONFIG_MICROPY_VFS_FATn CONFIG_MICROPY_VFS_LFS1n CONFIG_MICROPY_VFS_LFS2n十、源码结构速览与自定义配置Zephyr 移植版的源码组织如下便于进一步深入ports/zephyr/main.c启动入口在 Zephyr 线程中初始化并运行 MicroPython。ports/zephyr/modmachine.c、ports/zephyr/modmachine.hmachine模块注册。ports/zephyr/machine_*.cPin、machine_adc.c、machine_i2c.c、machine_spi.c、machine_pwm.c、machine_timer.c、machine_uart.c、machine_wdt.c各类硬件外设绑定。ports/zephyr/modzephyr.c、ports/zephyr/modzephyr.hzephyr模块含FlashArea、DiskAccess、Display、FileSystem等。ports/zephyr/modzsensor.czsensor传感器模块。ports/zephyr/modsocket.csocket网络模块。ports/zephyr/mpthreadport.c_thread线程支持。ports/zephyr/boards/各测试板卡的.conf覆盖配置与冻结清单manifest.py。ports/zephyr/prj.conf 与 ports/zephyr/prj_minimal.conf默认与最小化配置。板级.conf文件展示了 MicroPython 移植版的可裁剪性。例如 ports/zephyr/boards/frdm_k64f.conf 启用了网络CONFIG_NET_L2_ETHERNETy、I2C/PWM/SPI、FXOS8700 传感器驱动、闪存支持CONFIG_FLASHy、CONFIG_FLASH_MAPy、CONFIG_MPU_ALLOW_FLASH_WRITEy并设置堆大小CONFIG_MICROPY_HEAP_SIZE114688而 ports/zephyr/boards/ai_m61_32s_kit.conf 等 bflb 系列板卡则通过CONFIG_MICROPY_FROZEN_MANIFESTboards/bflb/manifest.py冻结模块并按需裁剪 VFS 组件CONFIG_MICROPY_VFS_FATy、CONFIG_MICROPY_VFS_LFS1n、CONFIG_MICROPY_VFS_LFS2n。CONFIG_MICROPY_HEAP_SIZE直接控制 MicroPython GC 堆大小是平衡内存占用与可用功能的关键旋钮。十一、快速示例汇总将以下片段复制到剪贴板在 REPL 中按CtrlE进入粘贴模式执行CtrlD结束并运行闪烁 LEDimport time from machine import Pin LED Pin((gpiob, 21), Pin.OUT) while True: LED.value(1) time.sleep(0.5) LED.value(0) time.sleep(0.5)按键中断from machine import Pin SW2 Pin((gpioc, 6), Pin.IN) SW3 Pin((gpioa, 4), Pin.IN) SW2.irq(lambda t: print(SW2 changed)) SW3.irq(lambda t: print(SW3 changed)) while True: passI2C 扫描from machine import I2C i2c I2C(i2c0) i2c.scan()SPI 写缓冲区from machine import SPI spi SPI(spi0) spi.init(baudrate500000, polarity1, phase1, bits8, firstbitSPI.MSB) spi.write(babcd)ADC 读取微伏值from machine import ADC adc ADC((adc, 0)) adc.read_uv()十二、相关文档导航围绕 Zephir 移植版仓库还提供了以下配套资料可进一步阅读docs/zephyr/quickref.rst快速参考引脚、PWM、I2C/SPI、ADC、存储、传感器、显示。docs/zephyr/tutorial/index.rst入门教程索引。docs/zephyr/tutorial/intro.rst环境要求与固件获取、部署概述。docs/zephyr/tutorial/repl.rstREPL 使用详解。docs/zephyr/tutorial/pins.rstGPIO 引脚与中断。docs/zephyr/tutorial/storage.rst文件系统与存储。ports/zephyr/README.md构建、烧录、运行与最小化构建指南。总体而言Zephyr 移植版把 Zephyr 的板级抽象设备树、驱动子系统与 MicroPython 的易用性结合在一起对开发者而言选择一块 Zephyr 官方支持的开发板遵循本文构建流程即可获得一个可通过 UART REPL 交互、可编程 GPIO/总线外设、可挂载文件系统的 Python 环境对产品原型与教学演示而言最小化构建与冻结模块机制则为体积敏感场景提供了精准裁剪的途径。赞分享嵌入式语言运行时编程语言解释器编译器物联网系统编程【免费下载链接】micropythonMicroPython - a lean and efficient Python implementation for microcontrollers and constrained systems项目地址https://gitcode.com/gh_mirrors/mi/micropython点击查看免费下载相关推荐oh-my-pi pi-nativesN-API 绑定层与 24 个原生模块逐一解读oh my pi pi nativesN API 绑定层与 24 个原生模块逐一解读 oh my pi 是一个「把 IDE 能力直接接进去」的编码代理Cod嵌入式语言运行时编程语言解释器编译器物联网系统编程MicroPython on Zephyr 端口入门环境准备、固件构建与快速上手实践MicroPython on Zephyr 端口入门环境准备、固件构建与快速上手实践 本文以 MicroPython 仓库中 Zephyr 端口入门教程 ht嵌入式语言运行时编程语言解释器编译器物联网系统编程Zephyr 移植指南在 NXP i.MX91 QSB 开发板上构建与启动 Zephyr RTOSZephyr 移植指南在 NXP i.MX91 QSB 开发板上构建与启动 Zephyr RTOS 本文以 Zephyr 仓库中 boards/nxp/imx操作系统嵌入式RTOS物联网上一篇ngx_brotli性能监控如何实时追踪压缩比率和效果下一篇不装证书也能抓HTTPSeCapture函数钩子拦截SSL流量原理深度解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考