1.为什么使用 MicroPython 去构建我们的项目

1.1 降低开发难度

MicroPython 已经构建好了经过验证的硬件系统和底层驱动库,使得我们可以将编程的重点放到应用层的开发上而不需要从最底层开始构建项目,这大大减少了底层硬件设计和软件调试的时间,同时显著降低了嵌入式开发的技术门槛。

1.2 可移植性高

使用传统的 C/C++ 编程时,往往需要使用厂商提供的 SDK 包或者驱动函数,如 ST 公司的 CubeIDE、NXP 公司的 PE 等,虽然这些工具可以大大简化我们的开发难度,但是各个厂家的工具并不相同,库函数也不兼容,使用这些工具开发的程序很难直接移植。

然而,MicroPython 的出现让我们可以不必重新实现底层函数就能完成应用层的移植,MicroPython 本身就是脚本语言,和硬件的相关性小,再加上 Python 语言本身的简洁语法,使得程序移植和升级极其容易。

1.3 开放性

MicroPython 和 Pyboard 使用了较为宽松的 MIT 授权方式,MIT 是和 BSD 一样宽松的许可协议,作者只想保留版权,而无任何其他了限制。任何人都可以使用、修改、发行它,同时可以免费将其用到商业产品中。

你只需要在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。

MicroPython 的开发性让它在短短几年内就获得了很大的发展,全世界有很多工程师和爱好者在学习并使用。
OQLbbImIuo1730xyKc7cfLaYnUg.png
图 1.3 MicroPython 项目架构说明

2.MicroPython 项目架构简介

DbxwbaXDuosxpKxE0E5cTlt7ndf.png

我们可以把 MicroPython 的项目架构比作 ​ “一套可定制的嵌入式 Python 开发积木套件”:核心积木是所有设备都能用的通用 Python 功能,而不同设备的专属积木是适配硬件的平台代码,这样既保证了 MicroPython 的通用性,又能灵活适配各种微控制器和系统。在了解架构前,先搞懂几个核心概念:

  • 交叉编译器​:简单说就是 “在 A 电脑上编译出能在 B 设备上运行的代码”(比如在 Windows 电脑上,编译出能在树莓派 Pico 上运行的 MicroPython 字节码),避免了直接在资源有限的微控制器上编译的麻烦。
  • 端口(Port):也叫 “移植”,是 MicroPython 为不同硬件平台(比如 ESP32、RP2040、STM32)写的专属适配代码 —— 就像同一套游戏要做手机版、电脑版的适配,端口就是 MicroPython 的 “硬件平台专属版”。
  • 字节码​:Python 代码执行前会被转换成的中间代码(非直接机器码),MicroPython 的虚拟机可直接运行,既轻便又跨平台。
  • RTOS(实时操作系统):嵌入式设备的小型操作系统,能管理硬件资源、处理多任务(如 Zephyr RTOS)。

MicroPython 的项目代码就是按照 “通用核心 + 平台适配 + 辅助工具” 的逻辑划分成不同目录的,每个目录都有明确的功能分工,下面是具体的架构组成:

  • py/ – 核心 Python 实现,包括编译器、运行时和核心库
  • mpy-cross/ – MicroPython 交叉编译器,用于将脚本转换为预编译的字节码
  • ports/ – MicroPython 运行的各种端口和架构的特定于平台的代码
  • lib/ – 外部依赖项的子模块
  • test/ – 测试框架和测试脚本
  • docs/ – Sphinx reStructuredText 格式的用户文档。这用于生成在线文档
  • extmod/ – 用 C 实现的附加(非核心)模块
  • tools/ – 各种工具,包括 pyboard.py 模块
  • example/ – 一些示例 Python 脚本
  • drivers/ – 通过软实现的硬件驱动,基于 py 的架构使用标准 C 实现的 Python 模块(C + Python),和芯片自己提供的 SDK 略微不同,有较大的兼容性。
    image.png
    TIwgb7HKaoCL0PxAXvSceQ95nUg.png
    minimal 端口提供了一个非常基本的 MicroPython 端口的示例,可以编译为独立的 Linux 二进制文件以及 ARM Cortex M4。如果您想将 MicroPython 移植到另一个微控制器,请从这里开始。此外,“bare-arm”端口是绝对最小配置的示例,用于跟踪核心运行时和虚拟机的代码大小。
    VX5EbzDT4o8UBUxWYWpclvBOnKb.png
    图 2.4 MicroPython 项目端口代码结构图

此外,该存储库中还提供了以下端口:

  • cc3200—— 德州仪器 CC3200(包括 PyCom WiPy);
  • esp32—— 乐鑫 ESP32 SoC(包括 ESP32S2、ESP32S3、ESP32C3);
  • esp8266—— 乐鑫 ESP8266 SoC;
  • mimxrt——NXP m.iMX RT(包括 Teensy 4.x);
  • nrf——Nordic Semiconductor nRF51 和 nRF52;
  • pic16bit——Microchip PIC 16 位;
  • powerpc——IBM PowerPC(包括 Microwatt);
  • qemu-arm – 基于 QEMU 的模拟目标,用于测试);
  • Renesas-ra—— 瑞萨 RA 系列;
  • rp2——Raspberry Pi RP2040(包括 Pico 和 Pico W);
  • samd——Microchip(以前称为 Atmel)SAMD21 和 SAMD51;
  • stm32—— 意法半导体 STM32 系列(包括 F0、F4、F7、G0、G4、H7、L0、L4、WB);
  • webassemble——Emscripten 端口针对浏览器和 NodeJS;
  • zephyr——Zephyr RTOS。
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐