ESPHome:不写代码做固件,但它的双许可证要看清楚(2026.8.2)
用 YAML 配置代替写固件代码,需求落在官方组件覆盖范围内时能省掉大量时间;但它是双许可证项目,C++ 运行时那部分走 GPL-3.0,商用前必须先分清你动的是哪一块。
- 授权
- GPL-3.0 + MIT 开源 双许可证:C++/运行时代码(.c .cpp .h .hpp .tcc .ino)为 GPL-3.0,Python 代码及其余部分为 MIT。
- 平台
- Windows / macOS / Linux
- 协议
- WiFi、MQTT、UART
- 官网
- https://esphome.io/
- 源码
- https://github.com/esphome/esphome
- · 需求是「标准件的组合」、只想尽快让一台 ESP 设备联网并把数据吐出来的人
- · 手上有一批同构设备、希望配置可复制可版本管理、不想为每台设备维护一份 C 代码的场景
- · 需要接官方组件没有覆盖的传感器,或者要求非标准时序、微秒级时序控制的项目
- · 商业产品且不接受 GPL-3.0 义务、又要修改其 C++ 运行时代码的团队
- 文件名
- ESPHome 2026.8.2
- 版本
- 2026.8.2
- SHA256
- 待补(尚未实际核对,不填占位值)
- 核对于
- 2026-09-02
本站不托管安装包,上方为官方渠道直链。下载后请自行核对 SHA256,与上表不一致说明文件被改动过。
ESPHome 做的事情用一句话就能说完:你写一份 YAML 配置文件,它给你生成一份能烧进 ESP 系列芯片的固件。整个过程里你不打开 C 编译器,也不建工程。仓库在 esphome/esphome,目前 11,626 star,官网是 https://esphome.io/,最新版本 2026.8.2,发布于 2026-08-31。它主要面向智能家居和物联网设备,组件生态的重心也压在这个方向上。
这类工具最容易被两种态度对待:一种是「太好了,以后再也不用写固件了」,另一种是「玩具,正经项目不能用」。两种都不准。真正该问的问题只有一个——你要做的东西,是不是标准件的组合?
「配置代替编程」到底替你省了什么
先说它省掉的那部分,这部分是实打实的。
省掉工具链。 走原生路线做 ESP 固件,第一天通常不是写代码,是装环境:SDK、交叉编译器、构建系统、烧录工具,再加上一堆路径和环境变量。这一步对新人的劝退率高得惊人,而且它跟你要做的功能一点关系都没有。ESPHome 把这层包起来了,你面对的是一个配置文件。
省掉内存管理。 C 写固件绕不开手动管内存,而 MCU 上的内存是真的少。指针悬空、栈溢出、堆碎片,这几类问题的共同特点是现象和原因隔得很远——设备跑三天后随机重启,你很难倒推回某一次越界写入。用配置文件描述行为,这一整类 bug 就不归你管了。
常见外设开箱即用。 官方已经把一批常见器件封装成了组件,你在配置里声明要用哪个、接在哪几个脚上,剩下的驱动细节它自己处理。具体支持哪些组件、字段怎么写,请以官网文档为准,别照抄网上的旧配置——这类项目的配置写法是会随版本演进的。
改完重新生成即可。 改一行配置,重新生成固件,重新烧一遍。没有编译报错的心智负担,迭代节奏很快。
这四条加起来,对「让设备联网、把几个传感器的数值定时报出去」这种需求,确实能把几天的工作压到几个小时。
代价:你只能做它已经支持的事
现在说代价,这一节比上一节重要。
低代码方案的天花板都在同一个地方——你只能做工具已经支持的事。 ESPHome 的能力边界,就是官方组件覆盖的范围。落在范围里,你飞快;落在范围外,你会撞墙,而且撞得很突然。
最典型的两种撞墙方式:
第一种,你要接的器件没有现成组件。 一颗冷门的传感器、一块甲方指定的国产模组、一个厂商自己定义的私有协议——组件库里没有,你就没有声明可写。
第二种,你需要非标准的时序。 有些器件的读写时序对时间容差很窄,或者你的应用要求在固定的微秒窗口里完成某个动作。配置层暴露出来的参数是有限的,它给你的抽象刚好挡住了你要拧的那颗螺丝。
撞墙之后你有两条路:要么自己写一个扩展——但写扩展就是写 C++,你绕了一大圈又回到了原点,而且现在你还得先搞懂它的组件模型;要么放弃这个需求,换器件、改方案,或者整个项目转回原生开发框架。
这不是 ESPHome 的缺陷,是所有低代码方案的结构性代价。它用「限制你能做什么」换来了「你不用懂那么多」。这笔交易本身没问题,问题在于很多人是在项目做到七成的时候才发现自己买错了。
一个问题定去留
所以动手之前,先老老实实回答这句话:我要做的东西,是不是标准件的组合?
是。 常见传感器、常见执行器、联网上报、定时任务、状态同步——这些都是被反复做过的事,交给它,你省下的时间是真金白银。
不是。 只要清单里有一项是「厂商私有协议」「自己画的板子上那颗冷门芯片」「必须卡在多少微秒内完成」,那就早点用原生开发框架。早点转比晚点转便宜得多——晚转意味着你已经在配置层积累了一堆调试经验,而这些经验带不走。
介于两者之间。 常见做法是拆:把标准的那部分留给它,把非标的那部分做成一个独立的小模块挂在旁边,两者之间用一条你能控制的接口连起来。想理解那条接口上跑的到底是什么,可以从 UART 串口原理读起。
双许可证:这一节别跳过
这是本篇最需要你看准的一条,也是最容易被写错的一条。ESPHome 不是单一许可证项目。
它的 LICENSE 文件原文写明,ESPHome 的许可证由两个基础许可证组成:MIT 和 GNU 通用公共许可证。划分方式是按文件扩展名:
- C++/运行时代码,即扩展名为
.c、.cpp、.h、.hpp、.tcc、.ino的文件,按 GPL-3.0 发布; - Python 代码,以及这个代码库的其余所有部分,按 MIT 发布。
为什么这件事对你重要?因为这两个许可证的性质差得很远。
MIT 是宽松许可证,条件很少,商用几乎不构成负担。GPL-3.0 带 copyleft,也就是通常说的「传染性」:如果你修改了受它覆盖的代码,或者以它规定的方式与之链接并对外分发,你的义务和 MIT 完全不是一回事。
而对做产品的人来说,麻烦恰恰在于:最终跑在你设备里的那份固件,主体正是 C++/运行时那一块——也就是走 GPL-3.0 的那一块。你在配置文件里写的东西,是被 Python 侧那套工具链读取并转换的,那部分是 MIT。所以「我只是写了个 YAML,跟许可证没关系」这个直觉是不成立的。
所以,如果你只是自己家里装几个设备、不对外分发,这件事对你没有实际影响。但只要涉及商业产品、要把设备卖给别人,动手之前先把 LICENSE 原文读一遍,搞清楚你到底修改和分发了哪一部分。
需要明确的是:本文不构成法律意见。 许可证条款的具体适用要看你的分发方式、修改范围和所在司法辖区,商用前请自己读 LICENSE 原文,或者交给法务判断。凡是把它简写成「GPL 项目」或者「MIT 项目」的说法,都已经丢掉了关键信息,别拿那种说法去做决策依据。
版本号是日期式的
它的版本号形如 2026.8.2,最新一版发布于 2026-08-31。这是日期式版本号,跟语义化版本不是一回事。
实际意义有两条。第一,你看一眼版本号就知道它有多旧——2026.8 和 2024.3 之间隔了多久,一目了然,不用去翻发布记录。第二,它意味着发布节奏是按时间线滚动的,而不是攒够功能才发一版。好处是修复到得快,代价是你不能从版本号本身推断出这一版有没有破坏性变更,升级前该看的官方发布说明一样得看。
在文档和脚本里引用版本时,把完整的 2026.8.2 写全,别只写年月。
烧进去之后的事
不管固件是配置生成的还是自己写的,进设备的路径是一样的,这几条机制不会因为你用了低代码就消失:
首次烧录得走串口,芯片要进下载模式。 ESP 芯片是否进入下载模式,取决于复位那一刻某个引脚的电平状态,多数开发板用串口芯片的控制线自动完成了这个动作。烧录工具见 esptool(命令行,能进脚本和 CI)和 Flash 下载工具(图形界面,产线批量更顺手)。
固件是整体烧录,不是增量更新。 你只改了配置里的一行,产出的仍然是一份完整固件,整片写进去。所以别指望「小改动小烧录」,每次都是全量。
后续升级靠 OTA。 设备装到墙上、吊顶里、机柜深处之后,再拆下来接串口是不现实的,所以物联网设备普遍用 OTA(空中升级)走网络下发新固件。这是这类设备的通用做法,具体到 ESPHome 怎么配,以官方文档为准。
出问题先看串口日志。 设备不启动、启动后不联网、跑一会儿就重启,第一手信息都在串口那根线上,用串口调试工具接上看。看到日志断在半路或者反复重启,别急着改配置,先怀疑供电——ESP32 在无线发射的瞬间电流尖峰很大,判断思路见 ESP32 供电那篇。
它和几个邻居的分工
MicroPython 和它是同一个方向上的不同刻度。MicroPython 也让你少写 C,但你还是在写代码,逻辑自由度高得多,天花板比 YAML 高;代价是你得自己组织程序结构,也得自己面对资源限制。撞了 ESPHome 的墙又不想直接跳进 C,它是很自然的下一站。
RT-Thread 在另一头。它是实时操作系统,你在它上面写的是原生代码,管的是任务、调度和资源。要的是确定性和可控性,付出的是学习成本和开发周期。
Node-RED 容易和它混,因为两者都是「拖/配代替写」。区别在位置:ESPHome 产出的是跑在设备里的固件,Node-RED 跑在网关或服务器上,做的是数据到齐之后的编排。真实系统里它们常常一起出现,一个在下面采数据,一个在上面串流程,不是二选一。
设备侧数据往上走时常用 MQTT,调试消息通不通、主题订对没有,用 MQTTX 这类客户端比在设备日志里猜快得多。
其余嵌入式与工业通信工具,见软件与工具库。
本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。
- ESPHome 官网 ↗
esphome.io
- ESPHome 官方仓库(LICENSE 原文载明按文件扩展名分 GPL-3.0 与 MIT 双许可证;2026.8.2 发布于 2026-08-31) ↗
github.com/esphome/esphome
延伸阅读
ESPHome 生成的固件仍然要靠串口烧进芯片,烧录工具见 esptool 与 Flash 下载工具; 设备烧完不出日志或者时好时坏,先用串口调试工具看一眼, 再对照 ESP32 供电那篇排电源。 觉得 YAML 的天花板压着你,往上一层是 MicroPython, 再往上是 RT-Thread 这类原生框架。 其余嵌入式与工业通信工具见软件与工具库。
- MicroPython 嵌入式开发·RTOS与运行时
- Node-RED 工业通信·物联网平台
- RT-Thread 嵌入式开发·RTOS与运行时