外观
其他框架与语言
除了主流选择,ESP32 上还有一批小众或特定场景的运行环境。本文只给定位和取舍,没有逐个在实机上运行,各项目的当前状态请到它们的官方仓库确认。涉及版本与芯片支持的细节,本文大多没有逐项核对。
概览
| 项目 | 语言 | 定位 | 备注 |
|---|---|---|---|
| Zephyr | C | 跨厂商的 RTOS | 乐鑫提供 hal_espressif 模块 |
| NuttX | C | 类 POSIX 的 RTOS | Apache 项目,ESP32 系列有官方支持 |
| Toit | Toit 语言 | 容器化的 IoT 脚本运行时 | 公司情况有变动,使用前请查最新状态 |
| TinyGo | Go | 用 LLVM 编译的 Go 子集 | ESP32 支持受限,主要在 C3 等 RISC-V 芯片 |
| NodeMCU | Lua | 面向 ESP8266 / ESP32 的 Lua 固件 | 曾经很流行,现在已较少用于新项目 |
| Espruino | JavaScript | 面向微控制器的 JS 解释器 | 对 ESP32 也有固件 |
| Moddable SDK | JavaScript(XS 引擎) | 偏 UI 与显示的 JS 运行时 | 对 ESP32 有较深支持 |
| .NET nanoFramework | C# | 在微控制器上运行 C# | 有 ESP32 目标 |
关键信息
Zephyr
Zephyr 是 Linux 基金会旗下的开源实时操作系统,设备树与 Kconfig 的配置方式较完整,覆盖大量厂商芯片。乐鑫通过 hal_espressif 模块为 Zephyr 提供 HAL,Zephyr 官方文档的开发板列表里有 ESP32 系列。选它的主要理由是「想在 Nordic、ST、NXP 与乐鑫之间复用同一套代码」。代价是:乐鑫特有功能(Wi-Fi/BLE 的完整特性、省电模式等)通常落后于原生 ESP-IDF,开发体验也更偏工程化。
NuttX
NuttX 是 Apache 软件基金会项目,强调与 POSIX 和 Linux 的 API 接近。ESP32 系列在其官方文档中有对应板级支持。适合从 Linux 背景转向 MCU、希望用 ioctl、文件系统、shell 的开发者,社区体量比 Zephyr 和 IDF 小。
Toit
Toit 提供自己的语言与运行时,设备可以在运行时热更新「容器」。它最初由 Toit 公司商业化推广,我没有核对该项目当前的维护状态,使用前请检查仓库活跃度。
TinyGo
TinyGo 让你用 Go 语法写 MCU 程序,ESP32 的支持主要集中在 RISC-V 芯片(如 C3),Xtensa 的 ESP32 与 S3 需要额外的 LLVM 分支或限制较多。不是所有 Go 标准库可用,网络能力也有限。适合熟悉 Go 又想玩单片机的人,不适合需要 Wi-Fi/BLE 完整功能的项目。
NodeMCU Lua、Espruino
NodeMCU 起初是 ESP8266 的 Lua 固件,ESP32 版本也存在,但活跃度已不如 MicroPython。Espruino 提供 JavaScript 解释器和网页 IDE,较适合单文件、事件驱动的小应用。这两者在新项目里一般排在 MicroPython 之后。
Moddable SDK
Moddable 基于 XS JavaScript 引擎,主要面向带屏幕的产品和 UI,强调低内存下运行 ECMAScript。它在 ESP32 上有较完整的示例。适合 JS 背景、想做触摸 UI 产品的人。
.NET nanoFramework
用 C# 和 Visual Studio 开发,适合 .NET 背景团队。一般需要把固件刷到板子上,再用 Visual Studio 扩展部署程序。
选择建议
| 需求 | 建议 |
|---|---|
| 多厂商统一 RTOS | Zephyr |
| 想要 POSIX 接口 | NuttX |
| 会 Go、用 C3 | TinyGo |
| 带屏幕的 JS 开发 | Moddable |
| C# 团队 | nanoFramework |
| 其余绝大多数场景 | 回到 Arduino-ESP32、ESP-IDF 或 MicroPython |
看生态而不是语言
选框架时看三件事:是否支持你的芯片、Wi-Fi/BLE 是否完整、最近半年是否还有提交。小众项目最大的风险是维护者离开。
适合谁 / 不适合谁
适合有特定技术栈约束的团队或爱好者。不适合第一次接触 ESP32、需要大量现成教程和社区答疑的读者。
参考资料
- Zephyr 项目文档:https://docs.zephyrproject.org/
- NuttX 文档:https://nuttx.apache.org/docs/latest/
- TinyGo:https://tinygo.org/
- Moddable SDK:https://www.moddable.com/
- .NET nanoFramework:https://www.nanoframework.net/
- Espruino:https://www.espruino.com/
- NodeMCU 文档:https://nodemcu.readthedocs.io/
- Toit:https://toit.io/