领导说:"咱们产品下一版加个脚本功能,用 Python 写现场逻辑,方便调参。"
你一拍胸脯:"没问题!"
然后打开 MicroPython 文档,看到一行要求:256KB Flash,16KB RAM 起步。
再看看手里的主控……STM32F103C8T6,64KB Flash,20KB RAM。
沉默三秒。
其实这个问题有解,只是很多人没留意过。有一个国产开源项目专门为这种场景而生,最低 4KB RAM、32KB Flash 就能跑 Python——它叫 PikaPython。
PikaPython 是什么
PikaPython(前身叫 PikaScript,也叫 PikaPy)是一个超轻量级的嵌入式 Python 解释器,由国内团队皮卡派科技开源,MIT 许可证,目前在 GitHub 上有约 1.7k Star(据 GitHub 仓库数据)。
一句话定义:它是一个专门为资源受限 MCU 设计的 Python 3 子集解释器,零依赖,无需 OS 和文件系统,开箱即用。
官方提供了一组完整 Demo(GPIO、串口、ADC、PWM、LCD 显示、贪吃蛇游戏)在 STM32F103C8T6 上的实测数据:RAM 最大占用 3.56KB(含 1KB 栈共 4.56KB),Flash 占用 30.4KB。对应到这块 MCU 的 20KB RAM 和 64KB Flash,占用比分别不到 25% 和 50%(数据来源:PikaPython 官方 README)。
作为对比,MicroPython 官网标明的最低要求是 256KB 代码空间 + 16KB RAM(据 MicroPython 官方网站)。两者相比,Flash 差了 8 倍,RAM 差了 4 倍。
核心原理:凭什么能做到这么小
光说数字不够,得解释一下这个差距从哪里来。
MicroPython 是一个完整的 Python 编译器 + 运行时,词法分析、语法树、字节码生成、垃圾回收等模块全部驻留在 MCU 上,这是内存占用大的主要原因。
PikaPython 的思路是把一部分编译工作移到 PC 端完成,引入了一个核心工具——Pika 预编译器(Pre-compiler)。
工作原理如下:
C 模块绑定由预编译器在 PC 端自动生成:开发者只需写 .pyi 类型标注文件声明 Python 接口,预编译器自动生成 C 绑定的胶水代码,不用手动处理 PyObject 类型转换。
MCU 上只保留字节码 VM:不需要完整的 Python 编译器驻留在芯片上,运行时只做字节码解释,体积因此大幅缩减。
这个设计有点类似把"链接时的工作提前到编译时做"——把胖乎乎的运行时瘦身掉,再把胖的那部分挪到不受内存限制的 PC 端。
核心功能拆解
亮点1:C 扩展模块,写起来真的不烦
传统给 Python 写 C 扩展,要处理一堆 PyObject 类型转换、参数解包。MicroPython 里写 C 模块也逃不开这套,新手劝退。
PikaPython 用预编译器把这个流程简化了。开发者只需写一个 .pyi 文件声明接口:
# GPIO.pyiclass GPIO:def setMode(self, pin: str, mode: str): ...def high(self, pin: str): ...def low(self, pin: str): ...
预编译器自动生成 C 绑定的方法表,开发者只需要去填 GPIO.c 里的实际实现。整个流程:.pyi 声明 → 预编译器生成胶水代码 → 填 C 实现 → 完成。
C 模块开发者不需要了解解释器内部机制,只关注硬件操作逻辑。
亮点2:包管理器和预置模块生态
PikaPython 有一个包管理器,在项目根目录创建 requestment.txt,声明需要的模块,工具自动下载配置。
目前可用的包覆盖了常见嵌入式场景:
- 硬件外设:GPIO、UART、I2C、SPI、ADC、PWM、Timer(STM32 全系列、ESP8266)
- 通信协议:Modbus RTU/ASCII/TCP/UDP(v1.13.x 新增的 modbus_rt 包,支持主从模式,据 GitHub Releases)、MQTT、socket
- 存储:FlashDB、FatFS 文件系统
- 图形:pika_lvgl(LVGL 的 Python 绑定)
- 标准库子集:struct、time、os、math
亮点3:支持平台和工具链覆盖面
芯片支持:STM32 全系列、ESP8266、ESP32-C3、 CH582(RISC-V)、W806(C-Sky)、RP2040IDE:Keil(社区版免费,需 v5.36+)、IAR、 RT-Thread Studio、SEGGER Embedded Studio构建工具:CMake、Makefile、Scons运行环境:裸机、RT-Thread(有官方软件包)、Linux
此外官方提供了 PikaPython Studio,集成串口终端、Python 脚本下载和包管理功能,Windows 下开箱可用。
快速上手
最快路径:在线生成工程 + 直接编译
访问 pikapython.com,选择目标 BSP(芯片平台)和需要的包,生成压缩包下载,解压后用 Keil 或 IAR 直接打开编译——不需要手动配置任何东西。
手头有 STM32F103 开发板的话,这样跑第一个 Demo:
# 串口连接到 MCU,用 PikaPython Studio 或任意串口工具# 发送以下脚本,MCU 直接执行import GPIOGPIO.setMode('PA0', 'OUT')GPIO.high('PA0') # PA0 拉高GPIO.low('PA0') # PA0 拉低
脚本可以通过串口实时发送执行,也可以下载到 Flash 上电自动运行,两种模式都支持。
想先在 PC 上体验不想买板子:官方提供了 Windows 模拟工程,VS2022 或 MinGW 均可编译,本机跑起来解释器先熟悉语法。
官方还有一块现成开发板 Pika-Pi-Zero,基于 STM32G030C8T6(64KB Flash + 8KB RAM),淘宝有售(据官网),外设齐全:GPIO、定时器、I2C、RGB LED、LCD 都有,适合快速验证。
选型建议:PikaPython、MicroPython、Lua 怎么选
按场景推荐:
- RAM 不足 16KB,但想加 Python 脚本 → PikaPython 几乎是唯一选项
- 需要完整 Wi-Fi 驱动、成熟第三方库 → MicroPython 更合适(配合 ESP32)
- 项目已在用 RT-Thread → PikaPython 有官方软件包,集成最顺手
- 团队有历史 Lua 积累 → eLua 迁移成本低
局限性:也别把它神化了
几个客观问题得说清楚:
语法覆盖是子集,不是全集。 复杂装饰器、生成器表达式、异步语法等进阶特性目前不支持,具体支持列表要查文档。用习惯了完整 CPython 的开发者可能会踩坑。
生态成熟度和 MicroPython 差距明显。 PikaPython 约 1.7k GitHub Star,MicroPython 是 27k+(据各自 GitHub 主页)。遇到问题能找到的中文资料不多,大概率得自己看源码,或者到 QQ 技术群(577623681)问。
非 STM32 平台支持参差不齐。 ESP32、RP2040 等平台有移植,但功能覆盖不如 STM32 完整,用之前建议先确认目标平台的具体支持状态。
性能不是优势。 Python 在 MCU 上是解释执行,速度远不及 C。这个定位是写配置逻辑、测试脚本、交互控制层,不是用来写中断服务程序或时序敏感控制的。
获取
GitHub:https://github.com/pikasTech/PikaPython
官网(含在线工程生成器 + 文档):https://pikapython.com/
国内访问 GitHub 有时不稳定,源码包已备好,公众号回复 PikaPython 或 0070 获取下载链接。
你手里有 RAM 不足、一直没敢加脚本引擎的老项目吗?或者你用过 MicroPython 但觉得资源占用太重?评论区聊聊你的实际场景,或者有更适合的方案也欢迎分享——「单片机那点事」,聊的都是这些实在的工程问题。