Sonoff Basic刷机实战:焊接TTL接口与Tasmota固件写入指南
如果你手里刚拿到一块 sonoff basic插上电用 eWeLink APP 配对倒是容易但等你想把它接进 Home Assistant、做本地自动化或者彻底摆脱云服务器延迟原厂固件那点功能马上就不够用了——断网即失灵、没有本地 API、想改个继电器逻辑都得看厂商脸色。刷机几乎是每个喜欢折腾的智能家居玩家绕不开的一步。这篇文章写的就是我实际折腾 sonoff basic 的完整过程重点放在两件事上一是怎么焊接出稳定的烧录接口二是怎么用 TTL 串口把第三方固件我推荐 Tasmota写进去。适合手里有一块 sonoff basic、想动手刷机但对焊接和串口不太熟的朋友照着做就能少踩一半的坑。1. 为什么非要折腾 sonoff basic原厂固件与开源固件的差距很多朋友第一次接触 sonoff basic 都是冲着它便宜、体积小、10A 继电器够用。但用了一段时间原厂固件你就会发现它有几个绕不过去的天花板。1.1 原厂固件的三个痛点第一个痛点就是云依赖。eWeLink 的架构下手机 App 发指令要先到厂商的云服务器再转回你家的设备。表面上能远程控制实际上网络一抖动开关的响应就变得跟老头散步一样慢一旦外网断开本地控制协议也基本瘫痪你连局域网内的直接操作都很难做成。第二个痛点是协议封闭。原厂固件不支持 MQTT也不开放本地 API想接进 Home Assistant 或者 Node-RED 做联动得靠各种社区的第三方桥接方案稳定性全靠运气。我之前试着用 eWeLink 的非官方 API 做联动结果一次固件升级就把所有 token 全部作废整套自动化直接趴窝。第三个痛点是功能固化。原厂固件给你的就是开/关、定时、倒计时这几个按钮哪怕你想改一下上电默认状态、把按键改成双次触发、或者利用板子上多余的 GPIO 接个传感器都没有任何可配置的入口。1.2 刷机后到底得到了什么刷上 Tasmota 之后sonoff basic 就不再是那个“只能连自家云的小开关”了。它能做的事包括通过 MQTT 接入任何智能家居平台、完全本地化控制、网页端直接配置 GPIO、自定义上电状态和按键行为、支持定时器和规则引擎甚至可以后续扩展接传感器。对我这种 Home Assistant 用户来说刷机后最大的感受就是“这个设备终于归我了”。断电重启不会丢配置局域网内控制毫秒级响应再也不用看云服务器的心情。哪怕你对智能家居平台还没什么概念刷个 Tasmota 也能在网页里把它当普通开关用体验比原厂固件顺滑得多。这里先说明一点刷机本身不会破坏硬件而且 Tasmota 这类固件底层也是在乐鑫官方 ESP8266 SDK 上开发的对芯片的利用更直白。真正伤硬件的往往是焊接和供电环节所以后面我会花大篇幅讲清楚焊接操作里的细节。2. 动手前的备料清单从拆壳到识别编程接口刷机必须和芯片的串口通信sonoff basic 板上又没有现成的 USB 口所以第一步就是把它的 UART 接口引出来。这需要你先备齐工具并且搞清楚板子上哪些引脚是干什么的。2.1 工具清单与选型建议刷 sonoff basic 需要的东西不算多但每一样都有讲究电烙铁建议用恒温焊台温度设定在 320-350 摄氏度。没有恒温的普通烙铁也能用但最好选 30W 以上的尖头否则焊点不圆润容易虚焊。焊锡丝推荐 0.5-0.8mm 的含铅锡丝63/37 配方熔点低、流动性好新手很容易上手。无铅锡丝熔点高烙铁温度低了容易拉丝反而增加难度。助焊剂松香或者中性助焊剂都行。如果焊盘上有氧化层先涂一点助焊剂再上锡焊点会漂亮很多。排针/杜邦线准备一条 4P 或 6P 的 2.54mm 排针加上若干母对公杜邦线。后面焊接时排针当作转接接口杜邦线负责连接 USB 转 TTL 模块。USB 转 TTL 模块这个非常关键。推荐 CP2102 或者 CH340 方案的模块便宜稳定驱动也齐全。尽量别买那些杂牌 PL2303 老芯片的模块WIN10 以上系统驱动经常装不上。万用表不是必须但强烈建议准备。焊接完先量一下引脚有没有短路能避免烧板子。螺丝刀和尖嘴钳拆 sonoff basic 外壳用另外一把小锉刀或者美工刀可能要用在开孔穿线上。这里多啰嗦一句刷机全程只给电路板供 3.3V 电千万不要把 220V 交流电接上去调试。我在初学阶段就见过有人把刷机线接好了一半然后误触了强电部分USB 转 TTL 模块当场报废。安全规范一定要放在第一位。2.2 拆壳与 PCB 引脚识别sonoff basic 的外壳是用卡扣固定的用一字螺丝刀从侧面缝隙撬开两排卡扣就行不用太大力气听到“咔哒”声就是开了一个。盖子上半部分连着指示灯导光柱拆的时候小心别掰断。打开之后你会看到一块小板主控是乐鑫的 ESP8266EX旁边是继电器和电源模块。板子正面靠近输入端的位置有一排焊盘通常标注了丝印常见的是 3V3、RX、TX、GND以及 GPIO0。有的版本丝印是 VCC 而不是 3V3本质上都是指芯片的 3.3V 供电引脚。3V3 / VCC给 ESP8266 供电的正极必须是 3.3V。RX芯片的串口接收引脚接 TTL 模块的 TX。TX芯片的串口发送引脚接 TTL 模块的 RX。GND公共地必须和 TTL 模块共地。GPIO0烧录模式控制脚低电平接地时芯片启动会进入 Download 模式高电平或悬空时正常启动。需要注意不同批次的 sonoff basic 结构略有差异。老款 basic v1.0 的 GPIO4 是空的或者用于按键新款 basic R2 的按键接在 GPIO04 上板子布局也会有一点变化。刷 Tasmota 的时候如果发现继电器的 GPIO 不对通常是模板选错而不是焊接问题。另外有些版本把烧录接口做成了旁边的四个圆孔但绝大多数还是要自己焊排针。我第一次刷的时候以为板子上默认有串口直接用杜邦线怼上去结果接触不良导致反复失败老实焊接之后一次就成功了。3. 焊接方案选择直插排针、飞线还是免焊探针把 sonoff basic 的烧录接口引出来做法其实不止一种。我见过有人直接拿杜邦线顶着焊盘刷也有人焊排针、焊母座、甚至用夹具。不同方案各有优缺点我结合自己的实操经验逐一说一下。3.1 三种方案的对比直插排针在焊盘上焊一排 2.54mm 排针最常用的方案。优点是牢固、稳定以后想重新刷固件随时能插杜邦线缺点是排针会一直留着外壳盖上之前要开个孔让排针露出来影响美观。飞线把杜邦线直接焊到焊盘上刷完剪断或者用胶固定。优点是外壳改动少刷完线一剪就干净缺点是线头容易虚焊焊接时线会晃动需要耐心。另外如果剪线太短下次刷机又得重新焊。免焊探针用弹簧针pogo pin做夹具顶住焊盘就能刷不需要焊接。优点是不破坏板子缺点是对固定要求高手一抖接触就失效而且针脚不一定匹配所有版本的焊盘间距。3.2 我推荐的直插排针实操步骤如果你和我一样是新手我建议用直插排针方案因为重复刷机、检查连接都方便。具体操作流程如下先把排针剪成需要的长度。一般焊 5 个引脚就够了3V3、RX、TX、GND、GPIO0但我建议预留 6-7 个位置万一以后想引出来接其他传感器也能用。在焊盘周围涂少量助焊剂用烙铁给每个焊盘先薄薄上一层锡。上锡时烙铁尖要同时接触焊盘和锡丝看到锡变成亮银色并流动开就移开烙铁。把排针从板子背面穿过来竖直方向放平用胶带在背面固定住防止加热时歪斜。依次焊接每个引脚。烙铁点住引脚和焊盘的结合处送一小段锡丝看到锡自动包裹住引脚就撤走。焊完检查一下焊点应该是圆润的小山丘状不是一大坨或者中间断开的。用万用表通断档测量相邻引脚之间有没有短路再确认每个引脚和焊盘之间是导通的。如果发现虚焊补一点助焊剂再加热一次。最后在排针周围用热熔胶稍微固定一下这样插拔杜邦线时不会把焊盘拽下来。上电之前一定要目视检查有没有锡渣掉落在板子上我曾经因为一颗微小的锡珠卡在两个引脚之间导致模块无法进入刷机模式排查了半天才发现是短路。3.3 焊接常见的失误和处理办法第一个常见问题是焊盘脱落。sonoff basic 的焊盘本身不算厚如果你烙铁温度太高、压的时间太久铜皮很容易被掀起来。遇到焊盘脱落后不要硬补可以用美工刀刮开附近的走线表层露出下面的铜线再做飞线连接。第二个问题是焊点桥接。相邻两个引脚间距很小锡给多了就黏到一起。处理办法很简单吸锡带放在桥接的锡上烙铁加热几秒钟就能吸走多余锡。没有吸锡带的话用烙铁尖把多余的锡带出来也行但要注意别把其他引脚也带连了。第三个问题是排针歪斜。插排针时如果不固定焊完经常发现针脚是歪的杜邦线插上去很别扭。解决方法是焊接前用胶带将排针和 PCB 粘成垂直状态或者先焊第一个和最后一个引脚确认垂直后再焊中间的。4. 串口接线与烧录模式一张表理清所有接法焊接搞定之后接下来就是接线。很多新手在这里容易犯迷糊因为串口接线强调“交叉连接”和很多人想象的“同名对接”完全相反。我再怎么强调都不过分这里是刷机失败的重灾区。4.1 为什么必须拉低 GPIO0ESP8266 芯片在上电时有一个 Boot Mode 判断机制具体来说就是芯片会检测 GPIO0 和 GPIO2 的电平状态从而决定启动到正常运行模式还是 UART 下载模式。GPIO0 接地低电平时进入刷机模式悬空或接高电平时正常启动。所以刷机时必须先把 GPIO0 接到 GND再给模块上电。否则芯片直接跑现有的固件你的串口发什么它都不理。我一开始就是忘了这个动作还以为模块是坏的折腾了一晚上。记住这个顺序GPIO0 接 GND然后接上 3.3V 电源等 1-2 秒再开始刷写。刷完之后要把 GPIO0 从 GND 上断开然后重新上电芯片才会正常启动新固件。4.2 一张接线对照表USB 转 TTL 模块常见的引脚标注有 TX、RX、VCC、GND有的还有 3V3 和 5V 两个电源输出。接线时记住一个关键点控制端和芯片之间串口是交叉的。USB 转 TTL 模块sonoff basic 引脚说明3V33V3 / VCC给模块供 3.3V 电千万别接 5VTXRX模块发送接芯片接收RXTX模块接收接芯片发送GNDGND必须共地GNDGPIO0刷机模式下拉低不接GPIO2 / 其他正常启动时悬空即可4.3 上电与连接确认接好线之后先把 USB 转 TTL 插到电脑打开设备管理器看看串口号。Windows 下一般是 COM3 或者 COM4Linux 下是 /dev/ttyUSB0。如果设备管理器里根本没有识别到先换 USB 线试试——很多 USB 线只有充电能力没有数据能力这个坑非常隐蔽。确认串口后我会打开一个串口监视工具或者直接用 esptool 自带的检测命令验证芯片能不能连上。具体命令是esptool.py --port COM3 chip_id如果返回了一串芯片 ID说明串口连接正常。如果提示连接失败或者报错 timeout优先检查 GPIO0 是否确实接地、3.3V 是否到位、TX/RX 是否接反。我还遇到过一种情况USB 转 TTL 模块的 TTL 电平是 5V 的和 ESP8266 的 3.3V 电平不兼容导致通信乱码后来换成支持 3.3V 电平的模块才解决。注意刷机时 TTL 模块必须设置为 3.3V 逻辑电平。部分模块虽然标注了 3.3V 输出但 TX/RX 信号仍是 5V这种最好加一个电平转换模块或者直接换 CP2102/CH340 中明确标识 3.3V 逻辑的版本。5. 刷写固件的完整流程与固件选型接线确认没问题接下来就是实际刷机了。系统性地讲一下固件选择、刷写工具和相关参数设置这些细节如果错了即使连接成功也可能把 flash 刷坏或者功能异常。5.1 选 Tasmota 还是 ESPHomesonoff basic 常见的第三方固件主要有三个方向Tasmota目前适用面最广。开箱即用网页配置支持 MQTT对 sonoff basic 的 GPIO 定义有专门的模板。适合大多数用户。ESPHome更适合 Home Assistant 深度玩家。所有配置都是 YAML 文件可以精确控制每一个引脚、添加传感器和自动化逻辑。但门槛也更高需要一点编程思路。ESPEasy早期很火的固件界面直观适合简单传感器节点不过现在更新节奏慢了功能上不如前两者。我在家里用的是 Tasmota因为它兼容性最好社区资料最多。如果你的需求是“以后可能接传感器、改继电器逻辑、做复杂自动化”Tasmota 足够用如果你就是想把它变成 HA 里的一个纯粹开关ESPHome 也行。两者二选一不用纠结。5.2 用 esptool.py 刷写 Tasmota先在电脑上安装 Python 和 esptoolpip install esptool去 Tasmota 官方网站下载对应的固件文件。sonoff basic 推荐下载 tasmota.bin完整版如果你的 flash 空间比较小也可以用 tasmota-lite.bin。注意区分basic 的 flash 是 1MB不要下 4MB 的版本容量不够会刷不进去。刷机前最好先擦除 flashesptool.py --port COM3 erase_flash这一步很重要。我见过有人跳过擦除直接写入结果旧固件的配置残留在 flash 里新固件启动后行为异常各种莫名其妙的按键失灵都是这么来的。擦除完成后再写入固件esptool.py --port COM3 write_flash -fs 1MB -fm dout 0x0 tasmota.bin写完之后断开 GPIO0 接地重新上电。等十几秒应该能看到一个名为 sonoff-XXXX 的 WiFi 热点出现这就是 Tasmota 的配置模式。5.3 刷机参数背后的原理参数里 -fs 1MB 是指 flash 大小sonoff basic 原厂的 flash 容量是 1MB选大了固件写入位置会错乱。-fm dout 这个参数更容易被忽略。ESP8266 支持几种 flash 模式其中 qio 模式可以发挥最高读取速度但前提是 flash 芯片支持四线 IO。sonoff basic 上用的 flash 芯片部分型号不支持 qio如果用了 qio 启动大概率会变成启动循环就是反复重启、怎么都进不了系统。用 dout 模式虽然慢一点但绝对兼容。整条命令其实就是告诉 esptool用哪个串口、以什么 flash 参数、把哪个固件写到零地址。理解了这个逻辑你以后刷任何 ESP8266 设备都不会发怵。5.4 第一次配置 Tasmota进入配置模式后用手机或者电脑连接 sonoff-XXXX 这个热点然后浏览器打开 192.168.4.1。按照页面提示填上你家里的 WiFi 名称和密码Tasmota 会重启并连接你的路由器。连接成功后找到它在路由器上的 IP用浏览器打开就是 Tasmota 的主界面了。初次进入时建议先做三件事Upgrade 一下固件版本我经常用 OTA 升级的方式方便又安全。Configuration 里的 Module 下拉菜单选 Sonoff Basic它会自动匹配 GPIO 定义继电器和按键就都能用了。打开 MQTT 配置页面填上你的 MQTT 服务器地址和账号密码如果你用 Home Assistant 集成的 Mosquitto就填本机地址保存之后设备就能通过 MQTT 通信了。6. 刷机失败排查从驱动到时序的完整链路即使按上面的流程走也难免碰到各种异常。我见过太多人在群里问“为什么我的 sonoff basic 刷不了”其实大部分问题的原因都集中在几个点上。我整理一份完整的排查路线你可以按顺序逐步定位。6.1 驱动、串口号和 USB 线问题先确认电脑能不能识别 USB 转 TTL 模块。设备管理器里没有新串口最常见的原因是驱动没装好或者是 USB 线坏了/不支持数据传输。我建议手边常备一条短的原装数据线很多网红线只能充电不能传数据一接上去完全没有反应。在 Linux 下还容易遇到权限问题。如果 esptool 提示“Permission denied”需要把用户加入 dialout 组sudo usermod -a -G dialout $USER重新登录后再检查 /dev/ttyUSB0 是否存在。顺便说一句如果串口出现了乱码往往是波特率设置不匹配但 esptool 会自动探测波特率一般不会出现这个问题。6.2 连接超时与上电时序esptool 连接不上芯片报错信息通常包含“Failed to connect”或“A fatal error occurred”。这时按顺序排查GPIO0 是否稳定接地。杜邦线松动是高频问题用力压一压或者换一条线试试。TX/RX 是否接反。接口两边必须交叉模块 TX 接板子 RX模块 RX 接板子 TX。3.3V 电压是否正常。用万用表量一下 VCC 和 GND 之间的电压在 3.1-3.5V 之间算正常。如果模块供电能力太弱会出现电压跌落芯片觉得没吃饱直接拒绝通信。上电顺序对不对。要按“GPIO0 先拉低、再上电”的顺序如果是先上电再接地 GPIO0芯片已经启动到正常模式自然连不上。我还遇到过一个很邪门的情况TTL 模块的 TX 指示灯亮但 esptool 一直卡在等待芯片响应。后来发现是引脚虚焊导致通信时断时续用放大镜检查才发现针脚根部有个肉眼几乎看不到的裂缝。6.3 刷写成功但无法启动如果 esptool 显示成功写入但重新上电后没有新固件运行或者设备反复重启通常有两个原因。一个是 flash mode 用错了。解决方法是换用 dout 模式重新写入esptool.py --port COM3 write_flash -fs 1MB -fm dout 0x0 tasmota.bin另一个是没有先擦除 flash。旧固件的配置和新固件冲突导致启动崩溃。遇到这种情况就再走一遍擦除 flash写入固件断开 GPIO0重新上电。90% 的问题都能解决。如果还不行把串口监视工具的波特率调到 74880看芯片的启动日志。ESP8266 在上电时会在 UART 输出一串信息里面会标明 Flash 识别结果和报错原因。我碰到过一次 SPI flash 芯片不兼容日志里直接提示了 flash ID 错误后来把固件换成兼容模式才搞定。6.4 Tasmota 能运行但继电器不受控刷完 Tasmota网页能打开WiFi 也连上了但按页面上的按钮继电器没反应。这个时候不要急着怀疑板子烧了先去 Configuration 里确认 Module 选的是“Sonoff Basic”。如果选成了 Generic 或者其他模板GPIO 定义和物理连接对不上自然控制不了继电器。正确的模板下Sonoff Basic 通常把继电器定义为 GPIO12按键定义为 GPIO00蓝色 LED 定义为 GPIO13。不同版本引脚定义可能有细微差别你可以根据模板里的说明交叉核对。7. 刷机后还能怎么玩刷完只是起点。Tasmota 的规则引擎允许你把 sonoff basic 变成多功能的智能开关我简单分享几个自己试过并且稳定的玩法。7.1 接入 Home Assistant 做自动化最基础的是 MQTT 接入。在 Tasmota 里填好 MQTT 服务器后Home Assistant 会自动发现这个设备然后你就可以在自动化和仪表盘里直接控制它。我家里客厅灯就是 sonoff basic 控制的设置了一个日落时分自动开灯、超过十一点自动关灯的规则运行了半年没出过问题。7.2 利用空闲 GPIO 扩展功能Sonoff Basic 上除了烧录用的五个引脚其实还有 GPIO2 和 GPIO14 可以引出使用。你可以焊接一个 DHT22 温湿度传感器到这些引脚上Tasmota 里添加传感器驱动之后就能在 Web 界面实时看到温湿度数据还能通过 MQTT 上报。举个例子我在书房的风扇控制里接了一个 sonoff basic同时在 GPIO14 上接了 DHT22用 Tasmota 的规则实现了“温度超过 28 度自动开风扇低于 26 度自动关风扇”。全程不依赖任何云端断网也照常工作。7.3 开关逻辑自定义Tasmota 里能配置上电默认状态断电再上电时继电器是保持断电前的状态还是强制关/开。这个功能对冰箱、鱼缸这类设备很实用。还可以配置按键模式单击、双击、长按对应不同动作避免墙上机械开关和智能开关打架的问题。官方文档里把这套规则称为 Tasmota Rules语法很简单比如Rule1 ON Temperature28 DO Power ON ENDON ON Temperature26 DO Power OFF ENDON把它粘贴到 Tasmota 控制台的 Rule1 里再执行 Rule1 ON 启用整个自动化逻辑就跑起来了。我建议新手先从这几种玩法入手后续再考虑把固件换成 ESPHome 做更复杂的联动。8. 最后分享几个实操中的小习惯刷机这件事真到了实操环节细节决定成败。分享几个我后来养成的习惯能帮你少走弯路刷机前一定把 GPIO0 接 GND刷完一定要断开再上电。这句话我说了三遍因为它真的值得说三遍。我见过太多人在这一步反复折腾最后发现只是接线顺序的问题。养成“先接拉低线再上电先断电再拆线”的习惯可以避开 80% 的刷机异常。备齐工具比技术更重要。没有恒温焊台和助焊剂硬要用普通烙铁焊成功率会低很多。如果连续两次焊接失败先别急着怀疑板子把烙铁温度调到 330 度用新锡丝重新走一遍你会发现焊点质量完全不一样。刷完之后第一时间备份配置。Tasmota 的配置可以在网页端导出也可以直接备份整个 flash。我把每一块 sonoff basic 的 flash 备份都存成了一个 bin 文件以后刷坏了随时能恢复。备份命令也很简单esptool.py --port COM3 read_flash 0x0 0x100000 sonoff-basic-backup.bin最后提醒一句永远不要在上电状态下焊接、插拔串口或者触碰板子裸露的金属部分。sonoff basic 的电源部分是强电区域和弱电部分挨得很近焊接时最好先用绝缘胶带把继电器和电源端子的区域盖住。安全永远是第一位的剩下的才是折腾的乐趣。