ESP-01S WiFi 继电器模块怎么用:烧录、接线与选购

Cartoon of a royal-blue ESP-01S relay carrier board with a blue cube relay, two green screw terminal blocks and an empty yellow eight-hole socket, with a much smaller black ESP-01S module carrying a gold zigzag antenna lying beside it and a teal arrow pointing it into the socket

ESP-01S WiFi 继电器模块是一块载板,不是一台做好的成品:一个插座、一个 5V 继电器、一颗稳压,加两组螺丝端子。它出厂不含 ESP-01S 模块,而且在你亲手给那颗模块烧进固件之前,它一直是哑的。载板上没有第二颗单片机,也没有把串口引出来,所以模块出厂自带的 AT 固件在这里根本没有说话的对象。

ESP-01S WiFi 继电器模块是什么?板上有些什么?

ESP-01S WiFi 继电器模块在市面上有五六个名字——WiFi 继电器开关、智能继电器板、远程继电器模块、直流 WiFi 开关、家居自动化模块——而它们讲的都是同一件事:一个线圈由 WiFi 来指挥、而不是由手指按墙上开关的继电器。在这里负责做这件事的载板,是一块大约一张大邮票那么大的蓝色板子,上面装着五样东西:一颗印着 SRD-05VDC-SL-C 的蓝色方块继电器、一颗 PC817 光耦、一颗 AMS1117-3.3 稳压、一个给模块用的黄色 2×4 插座,以及两组绿色螺丝端子——两针进 5V,三针是继电器自己的触点。

板上没有的东西更要紧。没有第二颗单片机,除了那个插座之外没有别的排针,也没有 USB 口。继电器线圈是由模块自己的一个 GPIO 经光耦驱动的,所以插座空着的时候,这块板上没有任何东西能做决定。板边那颗白色按键是 RST,作用是让模块重启。它不是烧录键,这块板上也根本没有烧录键。

另一条路,如果一路继电器不够用

ItemPriceQty
NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP-32 (CH340)NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP-32 (CH340)E32CH34RM29.90
Relay Module 3.3V 5V 12V 1/2/4/8 Ways Optocoupler Trigger Relay Module 1 2 4 8 Channel Relay Module - 5V RELAY MODULE(1WAY)Relay Module 3.3V 5V 12V 1/2/4/8 Ways Optocoupler Trigger Relay Module 1 2 4 8 Channel Relay Module - 5V RELAY MODULE(1WAY)1WRELAYRM3.15

这是另一条路,不是上面那套的加购件。如果你已经确定要两路或以上的开关输出,或者继电器旁边还要坐一个传感器,那就干脆跳过 ESP-01S,改用 ESP32 配一块独立的继电器模块——理由写在最后一节。

为什么这块板一开箱什么都不做?

ESP-01S 出厂时跑的是 Espressif 的 AT 固件,那是一个串口命令解释器:由别的东西通过 UART 发文字给它,它回答。当模块坐在一块 Arduino 旁边、中间拉两根线的时候,这套很好用。在这块载板上却行不通,因为载板并没有把 TX 和 RX 接去任何地方。模块一坐进去,唯一还进得来的路就是 WiFi——而要能用 WiFi 回答,就得跑你自己写的代码。

市面上还有另一族 ESP-01S 继电器载板,它们确实听得懂 AT 指令,这也解释了为什么那么多教程里都出现一串像 A0 01 01 A2 这样的字节把继电器扳过去:那些板子多加了一颗八脚的 STC 单片机,坐在模块的 TX 线上,自己把那串字节解出来。这块载板没有那颗芯片——插座旁边只有一颗四脚的 PC817 光耦、那颗 AMS1117-3.3 稳压和一颗小三极管,没有任何长着八条腿的东西——所以板上没有谁在听,继电器只能由模块自己来驱动。

路线 你实际上要做什么 对这块板的结论
AT 固件,出厂原样 通过串口引脚发 AT 文字指令 在这里是死路——载板上没有串口引线,板上也没有芯片在听
ESP8266 Arduino 草稿 在 Arduino IDE 里写一个文件,上传一次 从这里开始。一套工具链、一个文件,什么都看得见
Tasmota 或 ESPHome 烧一套现成的智能家居固件,再在它的网页界面里把 GPIO0 设成反相的继电器 真的可行、支持也好——已经有人写好模板——但要先啃下第二套工具链

先走中间那条。一上来就用 Tasmota,等于同时调试两样你都不熟的东西——下面那套烧录仪式,加上别人家的配置模型——而且出问题时你分不出是哪一边在坏。先烧一个短草稿,听见那声「咔」,再决定。

没有烧录键,怎么让 ESP-01S 进烧录模式?

ESP8266 是在脱离复位的那一瞬间,靠读三个 strapping 引脚来决定接下来做什么的,而 ESP-01S 留给你去动的那一个是 GPIO0:GPIO2 虽然也引了出来,但必须保持高电平,GPIO15 则根本没有引出来。复位那一刻是高,意思是跑 flash 里已经有的固件;是低,意思是等着从 UART 收新固件。芯片只读这个引脚一次,读完就定了——晚一秒钟做什么都改不了它的主意。整套仪式就是这么一句话:按住 GPIO0 不放,上电,松手,上传。

插座引脚 ESP-01S 功能 在这里为什么要紧
1 GND 烧录模式那道短接桥的其中一半
2 GPIO2 复位时必须是高电平;也是唯一真正空着的引脚
3 GPIO0 复位那一刻决定启动模式,其余时间是继电器驱动线
4 RX 固件从这里进来
5 VCC 只能 3.3 V——这里给 5 V 会烧掉模块
6 RST 复位,瞬间拉低就重启
7 CH_PD / EN 必须是高电平,否则芯片永远醒不过来
8 TX 上传进度和开机信息从这里出去

那支 ESP-01S 下载器是一根黑色的 USB-A 短棒,上面带着同样的黄色插座、一颗 CH340 USB 转串口芯片,以及一颗特别显眼的 1000 µF 电容。那颗电容才是值得弄懂的部分:Espressif 的 ESP8266EX 数据手册给出 802.11b 发射瞬间是 170 mA,而平均只有 80 mA,而一个 USB 口经过一段细细的 PCB 走线去供这样一个台阶,电压会塌下去。电容就在本地把这一下顶住——这也正是为什么没有电容的转接板,会让上传烧到一半失败,也会让模块在 WiFi 一开的瞬间重启。

下载器上没有烧录模式的开关,所以那道桥要你自己搭。插座那八根引脚会穿到短棒背面的焊尾上:在你把 USB 插头推进接口的同时,用一根导线、或者一把镊子,横跨 GND 和 GPIO0 这两根焊尾,插到位之后再松开。经常烧这类模块的人,会在这两根焊尾之间一次性焊上一颗小按键,从此不必再想这件事。

动手之前先把那两根焊尾认出来,因为 VCC 也是穿到同一面的,把它和 GND 短在一起,只会把 3.3 V 电源压垮,而不是让 bootloader 就位。那八根焊尾是两排各四根,顺序就是上面那张表列的:一排是 GND、GPIO2、GPIO0、RX,另一排折回来是 VCC、RST、CH_PD、TX。所以 GND 和 GPIO0 是同一排的第一根和第三根,中间隔着不必碰的 GPIO2,而 VCC 就在 GND 的对角。与其数位置,不如这样确认一遍:把空的下载器插上电,万用表黑表笔夹住某一个角上的焊尾,红表笔去点对角那一根——读到大约 +3.3 V,就说明黑表笔正坐在 GND 上;读数接近零,就说明你拿到的是另一条对角线——换到剩下那一对去。

卡通图:一颗小小的黑色 ESP-01S 模块带金色锯齿天线,插在一支黑色 USB 下载器短棒上,短棒上有一颗银色电容,底下一根绿色导线短接两个焊盘,一个青色箭头指向同一颗模块插进蓝色继电器载板,旁边画着青色的无线电波弧线
这颗模块有两个家。它在黑色 USB 下载器里被烧录,插上去的那一刻由一根导线把 GPIO0 按住;烧好之后搬去蓝色载板,同一根 GPIO0 就变成继电器线。

整件事的时序才是关键,所以看一遍实物动作会有帮助:

在 Arduino IDE 里,把 http://arduino.esp8266.com/stable/package_esp8266com_index.json 贴进 文件 → 首选项 → 附加开发板管理器网址,从开发板管理器里安装 esp8266 by ESP8266 Community,然后选 Generic ESP8266 Module,上传速度 115200。Flash Size 要设成 1MB (FS:64KB OTA:~470KB)——ESP-01S 那颗 flash 是 25Q80,8 兆比特就是 1 兆字节。下载器是一颗 CH340 器件,所以万一端口没冒出来,第一个该怀疑的就是驱动:我们那篇讲板子认不出串口的指南讲的就是这件事,也一并讲了CH340 串口线

草稿里要写些什么?

每一个 ESP-01S 继电器草稿,都被两件事定了型。第一件是线圈经 PC817 挂在 GPIO0 上,而载板把这颗光耦接成反相的:它内部的 LED 接在 3.3 V 电源和 GPIO0 之间,所以要先把这个引脚拉,才会有电流流过它。电流点亮 LED,LED 让光耦的输出三极管导通,那颗三极管再让吊着继电器线圈的三极管导通。这块板公开的 v4.0 原理图画的就是这样。所以 LOW 是闭合触点,HIGH 是让它弹开。

第二件是第一件的后果。GPIO0 在复位时是高——那本来就是你的固件能启动的前提——而在一块反相的板上,高就是断开的那一边。因此每一次上电、复位和重新烧录,负载都是断的,这也正是它该接在 NO 触点、而不是 NC 上的原因。

// ESP-01S WiFi 继电器 - 一个开关,局域网里任何一台浏览器都开得动。
// 开发板选 "Generic ESP8266 Module",Flash Size 选 "1MB (FS:64KB OTA:~470KB)"。
//
// 继电器线圈经载板上的光耦挂在 GPIO0 上,而光耦的 LED 接在 3.3 V 电源
// 和 GPIO0 之间:把 GPIO0 拉 LOW 才点亮它,点亮之后三极管导通,
// 线圈才通电。所以 LOW = 触点闭合。
// 如果你手上那块载板方向相反,就把下面标注的那两行对调。
//
// 这里故意不用 Serial:模块一坐进载板,TX 和 RX 就哪里都不通,
// 草稿只能改用网络来报告自己。

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

const char* WIFI_SSID = "your-wifi-name";
const char* WIFI_PASS = "your-wifi-password";
const char* HOSTNAME  = "mh-relay";     // 用 http://mh-relay.local/ 就到得了

const uint8_t RELAY_PIN    = 0;         // GPIO0 - 同时是启动模式引脚
const uint8_t RELAY_CLOSED = LOW;       // 让触点闭合的电平
const uint8_t RELAY_OPEN   = HIGH;      // 让触点弹开的电平

ESP8266WebServer server(80);
bool relayOn = false;

void applyRelay() {
  digitalWrite(RELAY_PIN, relayOn ? RELAY_CLOSED : RELAY_OPEN);
}

void handleRoot() {
  String page = F("<!DOCTYPE html><html><head><meta name='viewport' "
                  "content='width=device-width,initial-scale=1'>"
                  "<title>Relay</title></head><body style='font-family:sans-serif'>");
  page += relayOn ? F("<h2>Relay: ON</h2>") : F("<h2>Relay: OFF</h2>");
  page += F("<p><a href='/on'>Turn on</a> | <a href='/off'>Turn off</a></p>"
            "</body></html>");
  server.send(200, "text/html", page);
}

void redirectHome() {
  server.sendHeader("Location", "/");
  server.send(303, "text/plain", "");
}

void handleOn()  { relayOn = true;  applyRelay(); redirectHome(); }
void handleOff() { relayOn = false; applyRelay(); redirectHome(); }

void setup() {
  // 把 GPIO0 设成输出的同一口气里,就让它停在断开的那个电平,
  // 免得 WiFi 还在连的时候触点已经闭着。
  pinMode(RELAY_PIN, OUTPUT);
  applyRelay();

  WiFi.mode(WIFI_STA);              // 只做 station - 不要留一个开放的 AP
  WiFi.hostname(HOSTNAME);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  MDNS.begin(HOSTNAME);             // 如果 .local 不通,就去路由器上看 IP
  MDNS.addService("http", "tcp", 80);

  server.on("/", handleRoot);
  server.on("/on", handleOn);
  server.on("/off", handleOff);
  server.begin();
}

void loop() {
  MDNS.update();
  server.handleClient();
}

这样编出来大约 322 KB,塞进 ESP-01S 的一兆字节里绰绰有余。拔下下载器,把模块搬到载板那个黄色插座上。它正反两个方向都插得进去,而只有一个方向是对的:插反了,插座会把 3.3 V 送到模块的 GND 脚上。同样用对角那一招就能定下来——接上下一节说的 5 V 电源、插座先空着,对角的那两个孔会读到大约 3.3 V,而黑表笔坐着才读得到正值的那个孔,就是必须对上模块 GND 脚的那一个。

第一次开机有两件事会出岔子,两件都不是板子的错。ESP8266 是一颗只有 2.4 GHz 的无线电,而 setup() 里那个 while 循环会一声不吭地一直等下去:本地大多数家用路由器把两个频段做成同一个 SSID,再自己帮客户端切换,于是被塞到 5 GHz 那一半的模块永远连不上,就那样干坐着。在路由器里给 2.4 GHz 频段起一个自己的名字,草稿就指向那个名字。另一件事是地址——原装的 Windows 和部分 Android 版本解析不了 .local 名字,那就打开路由器的客户端列表,找到 mh-relay,用它拿到的那个 IP。无论走哪条路,这个页面都是没有密码的:任何已经连上你 WiFi 的人都能扳动这个继电器——拿来开一盏灯没问题,拿来开大门就不行。

5V 电源和负载要怎么接?

ESP01RM 那组两针端子要的是 5 V,而板上那颗 AMS1117-3.3 就是它不是 3.3 V 的原因。线性稳压只会做减法:Advanced Monolithic 给 AMS1117 的规格是输入输出压差大约 1 V 就能工作,在它 0.8 A 的测试电流下压差保证不差于 1.3 V,负载轻的时候还会更小。往那个端子喂 3.3 V,就一点余量都不剩了:3.3 V 那条电源会正好在无线电吃电最凶的时候,往 Espressif 给 ESP8266EX 的 2.5 V 下限塌过去——而且那个 5V 线圈也根本吸不动。

把这条电源要扛的东西加起来。Songle SRD-05VDC-SL-C 的线圈是 70 Ω、0.36 W 的绕组——在额定 5 V 下大约 72 mA——而模块发射时的峰值是 170 mA:最糟的那一刻加起来是四分之一安培。一颗 5V 3A 火牛远远够用,还留着余量,免得线圈和无线电一起吃电时电压往下掉。它那个圆头插进一条 5.5 x 2.1 mm 母头带线,剥好的红黑两端直接拧进螺丝端子——不必剪任何充电器的线。先量一下:红对黑应该读到正值。

端子 接到哪里 作用
两针端子,+ 5 V 带线的红线 整块板唯一的电源——它同时喂 AMS1117-3.3、模块和继电器线圈
两针端子,− 带线的黑线 线圈和模块的共地
三针端子,COM 负载自己那条回路,剪断后的其中一头 动触点
三针端子,NO 同一根线剪断后的另一头 静止时断开,GPIO0 拉 LOW 时闭合。用这一个。
三针端子,NC 空着不接 静止时闭合——那样负载在每一次复位和重新烧录时都是通电的

触点是一个开关,不是一个电源——里面不会有电出来。负载保留自己的电源,那两颗触点螺丝只是在它自己的回路里,顶替一个手动开关的位置。我们那篇讲怎样安全地接继电器模块的指南,讲了续流二极管和感性负载。

卡通图:一块宝蓝色 ESP-01S 继电器板的俯视图,一对红黑导线从两颗螺丝的绿色端子接到一个黑色墙插火牛,另有两根灰色导线从三颗螺丝的绿色端子接进另一条独立回路,回路里有一个电池盒和一盏发亮的黄色灯
两条各自独立的回路。黑色火牛的 5 V 只进那个两颗螺丝的绿色端子,别的地方都不去;负载保留自己的电源,只是从那个三颗螺丝的触点端子上穿过去,而那个端子顶替的就是一个手动开关。

方块继电器侧面印着的是触点额定值:10A 250VAC、10A 125VAC、10A 30VDC 和 10A 28VDC。这些数字描述的是封在塑料壳里的两片金属,跟它周围这块板一点关系也没有——一块裸露的 PCB,低压那一侧离触点螺丝只有几毫米,没有接地,也没有外壳。就把它当成一块低压直流的项目板:一条 12V 灯条、一个小水泵、一个门铃。至于 240V 市电,我们在延时继电器接线指南里划下的那条线原封不动——在马来西亚,固定的市电工程属于能源委员会注册的承包商,而一个触点额定值并不等于一个外壳。

我们常见的错误

只买了载板,然后坐等 WiFi 出现。空插座里既没有无线电也没有逻辑,网络上当然什么都不会冒出来——而且这块板也不会亮起来安慰你。它唯一那颗指示 LED 是跨在继电器线圈上的,只有触点真的吸合时才会亮,所以一块通了电、插座却空着的载板,本来就该是黑的。

模块还插在载板上就想上传。那里没有 USB 口,也没有串口排针,而且 GPIO0 已经被继电器占住了。模块要拔出来,在下载器里烧好,再插回去。

因为手边只有那个火牛,就把 12 V 灌进两针端子。那个端子是整块板的电源,而它是一个 5 V 输入。AMS1117-3.3 是线性稳压,所以高过 3.3 V 的每一伏,都会变成热留在一颗小小的贴片封装里,而它连散热片都没有:进 5 V 是压掉 1.7 V,进 12 V 就是 8.7 V——同样的电流,五倍的热,而这块板只有一张邮票大,旁边还坐着一个继电器线圈。

用同一个火牛既供板子、又带负载。把灯条或水泵接在载板赖以生存的那条电源上,它启动那一下的浪涌会把电压拉垮,模块欠压复位,GPIO0 回到它高电平的空闲状态,触点断开——一断开电压就恢复,于是又闭合。那阵「哒哒哒」是共用电源的毛病,不是板子坏了。

所以到底该买哪一个?

当整件事就是一个小盒子里的一个开关——一盏灯、一把风扇、一个水泵——由同一个 WiFi 里的一台手机去开关,ESP-01S 继电器载板就是那个对的答案。

它的天花板是结构性的,不是口味问题。ESP-01S 一共引出四个可用引脚,其中两个是 UART。GPIO0 已经被继电器占走,剩下 GPIO2——而它本身也是一个启动 strapping 脚,复位时必须是高,所以挂在它上面的任何东西都得照顾这一点。一路输出,没有传感器,没有显示屏。

所以只要你开始想要第二路输出、继电器旁边多一个传感器、或者一块屏,那就买一块 ESP32 开发板加一块独立的继电器模块:引脚多得用不完,还有一个不必搭桥就能烧录的 USB 口。我们那篇 ESP32 网页控制继电器就是同一个玩法,只是留足了长大的空间;而 Blynk 那一版还多了一个手机 App,人在屋外也控制得到。如果连用哪颗芯片都还没定,先看我们的 ESP32 与 ESP8266 与 Uno 对比

卡通对比图:左边一块宝蓝色 ESP-01S 继电器板装在灰色项目盒里,接着一盏发亮的灯;右边一块黑色 ESP32 开发板带银色屏蔽罩,用彩色杜邦线接着三块红色继电器模块和一个白色传感器模块
左边是盒子里的一个开关;右边是三块各自独立的红色继电器板,加一个传感器,全挂在一块 ESP32 上。ESP-01S 在继电器拿走 GPIO0 之后只剩一个空脚,所以右边这张图非要那颗更大的芯片不可。

常见问题

ESP-01S 继电器模块有附 ESP-01S 吗?

没有。继电器板是载板——继电器、稳压、光耦、插座和端子——而 ESP-01S 是另外配的。这也是产品照片里那个黄色插座空着的原因,而这正是一块新板子看起来像坏了的头号理由。

可以用 AT 指令来控制继电器吗?

在这块载板上不行。AT 固件回答的是从模块串口引脚发进去的文字,而这块载板并没有把 TX 和 RX 接去任何地方——没有排针,板上也没有单片机在听。给模块烧上你自己的草稿、或者烧 Tasmota,让它自己去驱动继电器。

一定要用 ESP-01S 下载器吗?普通的 USB 转 TTL 线行不行?

用带插座的下载器。一条普通的 CH340 串口线引出来的是 5 V、GND、TX 和 RX——没有 3.3 V 那一路——而 ESP-01S 是一颗只吃 3.3 V 的器件,同时还要一路够硬的电源来应付它 170 mA 的发射瞬间。下载器有对的插座、对的电源,还有一颗 1000 µF 的储能电容。

是哪个引脚在驱动继电器?为什么代码要写 LOW 才打开?

是 GPIO0,经 PC817 光耦。载板把这颗光耦的 LED 接在 3.3 V 电源和 GPIO0 之间,所以把 GPIO0 拉低才点得亮它,点亮之后它的输出三极管导通,线圈才通电。如果哪块板的方向相反,就把草稿里的 RELAY_CLOSED 和 RELAY_OPEN 对调。

我的 ESP-01S 连不上 WiFi,问题出在哪里?

ESP8266 是一颗只有 2.4 GHz 的无线电,所以它加入不了 5 GHz 的网络。如果你的路由器把两个频段做成同一个 SSID 再自己帮客户端切换,模块就可能被塞到 5 GHz 那一半、永远连不上——而草稿两种情况下都一样默默地等。给 2.4 GHz 频段起一个自己的名字,草稿指向它,再检查密码里有没有多出来的空格。

继电器上印着 10A 250VAC,那它能开关 240V 市电吗?

那是一个触点额定值,不是一张许可证——它描述的是密封方块里那几片金属,而不是它周围这块没有外壳的裸板。这块板请用来带低压直流负载;在马来西亚,固定的市电工程是能源委员会注册承包商的事。

最后更新:2026 年 9 月。有问题?WhatsApp 联系我们

Leave a Reply

Your email address will not be published. Required fields are marked *