跳转到内容

其他框架与语言 ​

除了主流选择,ESP32 上还有一批小众或特定场景的运行环境。本文只给定位和取舍,没有逐个在实机上运行,各项目的当前状态请到它们的官方仓库确认。涉及版本与芯片支持的细节,本文大多没有逐项核对。

概览 ​

项目语言定位备注
ZephyrC跨厂商的 RTOS乐鑫提供 hal_espressif 模块
NuttXC类 POSIX 的 RTOSApache 项目,ESP32 系列有官方支持
ToitToit 语言容器化的 IoT 脚本运行时公司情况有变动,使用前请查最新状态
TinyGoGo用 LLVM 编译的 Go 子集ESP32 支持受限,主要在 C3 等 RISC-V 芯片
NodeMCULua面向 ESP8266 / ESP32 的 Lua 固件曾经很流行,现在已较少用于新项目
EspruinoJavaScript面向微控制器的 JS 解释器对 ESP32 也有固件
Moddable SDKJavaScript(XS 引擎)偏 UI 与显示的 JS 运行时对 ESP32 有较深支持
.NET nanoFrameworkC#在微控制器上运行 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 扩展部署程序。

选择建议 ​

需求建议
多厂商统一 RTOSZephyr
想要 POSIX 接口NuttX
会 Go、用 C3TinyGo
带屏幕的 JS 开发Moddable
C# 团队nanoFramework
其余绝大多数场景回到 Arduino-ESP32、ESP-IDF 或 MicroPython

看生态而不是语言

选框架时看三件事:是否支持你的芯片、Wi-Fi/BLE 是否完整、最近半年是否还有提交。小众项目最大的风险是维护者离开。

适合谁 / 不适合谁 ​

适合有特定技术栈约束的团队或爱好者。不适合第一次接触 ESP32、需要大量现成教程和社区答疑的读者。

参考资料 ​

ESP32 非官方中文调查手册,与乐鑫科技(Espressif Systems)无隶属关系。