把 ESP 设备刷成可本地控制的固件(Tasmota)

Tasmota 是替换 ESP8266 与 ESP32 设备原厂固件的开源固件,用 C 写成,配置走 webUI,控制走 MQTT、HTTP、Serial 或 KNX,自动化靠设备本地的规则、定时器与 Berry 脚本。这篇文章按仓库里的构建配置、外设支持与版本发布信息拆开它的实现路径,并列出 flash 空间、编译门槛与跨版本迁移这几点代价,帮读者判断自己手上的设备值不值得刷。

ESP8266 和 ESP32 这两颗芯片被大量装进插座、开关、灯具和传感器里。厂商给这些成品配的固件通常只认自家 App 和自家云,云服务停掉或者厂商不再维护之后,设备就只剩一个不能联网的空壳。Tasmota 换掉的就是这一层固件。

Tasmota 是替换 ESP8266 与 ESP32 设备原厂固件的开源固件,用 C 写成,浏览器配置外设与规则,设备随后经 MQTT、HTTP、Serial 或 KNX 接受本地控制,也可以完全脱网单跑。

项目的维护状态可以从仓库数据看出来:2017 年 1 月创建,最近一次提交在 2026 年 10 月,默认分支是 development,许可证 GPL-3.0,Star 24792,Fork 5183,开放 Issue 17 条。主要语言是 C,占 58.6%,C++ 占 33.9%,另有 4.3% 的 Berry 与 2.5% 的 Python。仓库地址是 github.com/arendst/Tasmota,完整文档在 tasmota.github.io/docs。

项目的维护状态可以从仓库数据看出来:2017 年 1 月创建,最近一次提交在 2026 年

它怎么做到的

仓库本身是一个 PlatformIO 工程。根目录的 CMakeLists.txt 与 platformio.ini 这一组文件定义编译目标,platformio_tasmota_env.ini、platformio_tasmota_env32.ini、platformio_tasmota32.ini、platformio_tasmota_cenv_sample.ini 分别对应不同芯片与不同功能组合,platformio_override_sample.ini 是留给使用者改的样板。源码分散在 tasmota/、include/、lib/、boards/、partitions/ 等目录,工具与脚本在 tools/ 和 pio-tools/。编译产出的固件二进制烧进设备,之后设备自己跑一个带 webUI 的服务,同时对外提供 MQTT、HTTP、Serial、KNX 这几条通路。

数据流的方向是:设备上的外设(传感器、继电器、调光通道)产生状态,状态从上述某条通路发出去;外部发来的指令反向进入设备执行。传感器大多接好线就能被识别,README 的说法是 150 多种传感器与外设通过 I²C、SPI、1-Wire 和模拟量接入,多数在接线后自动检测。规则、定时器、Berry 脚本都在设备端执行,不依赖外部服务器,固件升级走 OTA。

整个链路里仓库没有展开说明的部分是各构建目标之间的具体差异与产物大小,这部分要去看根目录的 BUILDS.md,以及文档站上的编译说明。

几个关键设计

用构建环境切分功能组合

Tasmota 的功能列表很长,但预编译的发布二进制装不下全部功能。README 里有一句 Not every feature fits in the precompiled release binaries due to flash size limits,说的是受 flash 大小限制,有些功能进不了预编译的发布二进制,必须自己编译。项目的应对办法是把构建拆成一堆 PlatformIO 环境,每个环境对应一颗芯片和一组合适的功能。根目录的 platformio_tasmota_env.ini 与 platformio_tasmota_env32.ini 是这些环境的定义,platformio_override_sample.ini 供使用者做本地覆盖,BUILDS.md 是配套说明。这件事的直接后果是:选预编译固件等于接受一套默认功能集,要额外功能就得进这套环境里自己勾选。

配置与自动化都留在设备上

配置项通过设备自己的 webUI 写入,存在设备本地。定时器与规则(Rules)负责设备内的自动化,需要更复杂逻辑时用 Berry 脚本语言,README 说 LVGL 界面、HASPmota 和动画引擎都靠 Berry 驱动。这条设计线决定了 Tasmota 不接服务器也能跑:条件满足就在设备上动作,断网期间规则照常执行。想集中管理的话可以接 MQTT broker、Home Assistant、Domoticz、openHAB 或 Node-RED,但这些是可选项。

多协议入口,按场景挑一条

对外接口不止 MQTT,而 MQTT 本身支持 v3.1.1 和 v5 两个版本,可以接自己的 broker,也可以接云上的 AWS IoT Core、Azure IoT Hub 并走 TLS。此外还有 HTTP、Serial、KNX。ESP32 上还能原生跑 Matter,不用 MQTT、不用中枢、不用配套 App,直接与 Apple Home、Google Home、Amazon Alexa、Home Assistant 配对;一颗 ESP32 也能把已有的 ESP8266 设备桥进 Matter。Zigbee 与蓝牙方向,ESP32 可以当 Zigbee 协调器或 BLE 网关。协议桥接覆盖红外、RF、DALI、Modbus、RS-485、OpenTherm、TWAI/CAN、LoRa/LoRaWan、HDMI-CEC、Telegram 和 SMTP 邮件。

外设靠模板与自动检测扩容

外设支持走自动检测加模板库两条路。温湿度、CO2、空气质量、电能计量、人体存在、光照这些常见类别都在支持列表里,接线后多数能自动识别。不方便自动识别的设备类型靠模板匹配,根目录的 TEMPLATES.md 有 351.5 KB,TEMPLATES-PRE9.md 有 180.5 KB,I2CDEVICES.md 记录 I²C 设备,README 还指向外部的 device database(templates.blakadder.com)。这条设计把支持新设备的成本从改代码降到写模板,代价是模板的正确性依赖社区维护。

这样设计的代价

Flash 空间是整套设计里最硬的约束。ESP8266 本身的存储有限,功能一多就塞不下,所以预编译二进制只覆盖常用集合,其余靠自己编译。想省这份功夫,就得接受功能上的缺口。

上手门槛落在构建上。整个仓库是 PlatformIO 工程,环境定义文件有六七个,加上 sdkconfig.defaults、partitions/ 下的分区表、boards/ 下的板级定义,第一次自己编译要花时间摸清哪套环境对应手上那颗芯片。仓库体积 283209 KB,克隆一次不小。

版本升级有迁移成本。v15.2.0 到 v15.6.0 这几个版本的发布说明里都带一段 Migration Information,可见文字写着 This version removes support for direct migr,句子在 Release 说明里被截断,具体移除的是什么、影响哪些设备,要看完整的 RELEASENOTES.md 才能确认。跨大版本升级前查一遍发布说明,是这套设计绕不开的动作。

官方对升级的态度偏保守。README 里写,只要设备没出问题、也不缺你要的功能,就别动它。设备一旦刷好稳定运行,维护者建议保持现状;只有 release 版本在你的设备与配置上出现异常时,才考虑切到 development 分支。这句话的另一面是,追新在你的场景里可能是负收益。

对你的实际影响

硬件上你需要一台能被刷写的设备和一条 USB 转串口链路。最容易的初次安装方式是用 Tasmota WebInstaller,固件二进制可以从下面两个地址取:

http://ota.tasmota.com/tasmota/release/
http://ota.tasmota.com/tasmota32/release/

资源上,目标设备是 ESP8266 的话功能要精打细算;ESP32 系列(ESP32、ESP32-S2、ESP32-S3、ESP32-C3、ESP32-C5、ESP32-C6、ESP32-P4)宽松一些,部分型号还支持 PSRAM 与 USB/CDC。跑 LVGL 触摸界面、TensorFlow Lite 这类吃资源的特性,按 README 的说法要用 ESP32 方向。

服务端不是必须的。不接任何服务器也能用;要接的话得自己准备 MQTT broker,或者用 AWS IoT Core、Azure IoT Hub 这类云 broker 走 TLS。

后期改动分两层:规则、定时器、Berry 脚本在设备上改,不用重新刷固件;换设备类型用模板解决;要加新的编译期功能,才需要回到 PlatformIO 里重新构建。

Issue 列表里的三类问题,正好对应刷机、运行、带负载三个阶段。刷机阶段,有用户报告新买的 Sonoff Basic 按 program 键接 USB 后电脑端毫无反应,进不了 flash 模式;运行阶段,有人遇到设备断电重启后无法重新连上网络;接上负载之后,Sonoff T1 3CH US 出现过没有指令却自行动作的 ghost switching。这几条在事实表里的状态都是已解决。

还有一条和安全相关:支持的设备类型里有调光器、开关和电表接口,这类涉及市电的改动,动手前要清楚自己有没有相应的电工资质。

同类替代方案的横向位置

项目适合谁部署方式主要限制什么情况下选它更合适项目地址
Tasmota手上有 ESP8266/ESP32 成品设备、愿意自己刷机、想把控制权留在本地的智能家居玩家与自建服务器用户预编译固件从 ota.tasmota.com 下载,用 Tasmota WebInstaller 刷入;自己改功能要按 PlatformIO 工程编译功能受 flash 大小限制,部分特性必须自行编译;跨版本升级要先看 RELEASENOTES.md 的迁移说明;主要面向 ESP 系列芯片设备是 ESP8266/ESP32,且需要 MQTT、HTTP、Serial、KNX 任一条本地控制通路时Tasmota
openshwprojects/OpenBK7231T_App手上有 BK7231T、BK7231N、BL2028N 芯片设备、刷不了 ESP 系固件的人仓库没有说明面向 BK7231 系列芯片,未逐一核实其余能力设备芯片不在 ESP 系列之列,需要一份能跑在这些芯片上的替代固件时openshwprojects/OpenBK7231T_App
21cncstudio/project_aura想直接拿一套成型的空气质量监测终端方案、不介意绑定这一用途的人仓库没有说明面向空气质量监测这一固定用途,不是通用固件,未逐一核实它的外设覆盖范围目标就是空气质量监测这一件事,不想自己选传感器、配模板、拼界面时21cncstudio/project_aura

如果设备芯片不在 ESP 系列,Tasmota 直接出局,该去看 OpenBK7231T_App 这类覆盖 BK7231 芯片的固件。如果目标是空气质量监测这一类具体产品,Tasmota 要你自己选传感器、配模板、写规则,起步成本明显更高;21cncstudio/project_aura 给的是一套已经成型的用途方案,起步成本更低,代价是用途被固定住,换个场景就派不上用场。

适合谁:手上有 ESP8266 或 ESP32 成品设备、愿意花时间刷机与配置、想把设备控制权留在本地的人;需要在设备端做自动化而不想依赖云服务的人;想把红外、Modbus、Zigbee 这些异构设备统一到一条控制通路上的自建服务器用户。

不适合谁:只能接受开箱即用、不想碰编译环境和串口的人;设备不在 ESP 系列之列的人;以及不愿跟进版本迁移说明、只想一次刷完就不再动的人。

焚评:这个项目的量化评分

本项目的选题来自 焚.com(一个按公开公式给 GitHub 项目打分的站)。焚评当前总分 9.9 分(满分 10)。下表是各维度的得分:

评分维度得分
热度动量(权重 25%)10.0 / 10
开发活跃(权重 25%)10.0 / 10
社区响应(权重 15%)10.0 / 10
文档质量(权重 15%)9.6 / 10
发布节奏(权重 10%)9.2 / 10
风险控制(权重 10%)10.0 / 10

评分口径、权重与计算方式见焚.com 的评分方法页;数据随 GitHub 指标刷新,具体数值以焚.com 当前页面为准。本文正文为诀.com 独立撰写,评分数据由焚.com 授权引用。

内容核验说明

这篇把 Tasmota 的仓库结构、构建环境切分和 flash 空间约束讲清楚了,适合手上有 ESP8266 或 ESP32 成品设备、想把控制权留在本地的人先做判断,不适合只想开箱即用的人。文中的仓库指标、Star 数与版本信息来自原作者公开披露,诀.com 未独立验证;Release 说明里被截断的迁移内容需自行查 RELEASENOTES.md。

仓库指标(Star 24792、Fork 5183、开放 Issue 17、创建与最近提交时间、语言占比、仓库体积)来自原作者公开仓库页面,诀.com 未独立验证;外设数量、协议清单与升级态度引自 README 与文档站;v15.2.0 至 v15.6.0 的迁移说明在 Release 文字中被截断,移除内容与影响范围未核实;文中不含本站实测。

项目来源与说明

开源项目:arendst(arendst)

本文由诀.com 编辑基于该项目的公开信息独立撰写,属原创解读,不是对项目文档的翻译或转载;文中提到的功能与参数以官方仓库为准,代码与文档版权归原作者所有。

查看项目仓库