ESP01S WiFi 继电器模块接入 ThingsCloud,生成手机 APP 远程控制开关
ESP01S WiFi 继电器模块接入 ThingsCloud,生成手机 APP 远程控制开关
ESP01S 是基于 ESP8266 芯片设计的一款无线通信模组,属于 ESP8266 系列模组中的经典型号。它主要用于为各类电子设备添加 Wi-Fi 联网功能,常见于智能家居、物联网(IoT)设备、传感器节点等场景。
这个教程我们分享如何在 Arduino IDE 中使用 ThingsCloud ESP SDK,为 ESP01S 模块开发和烧录固件程序,让 ESP01S 通过 WiFi 接入 ThingsCloud,并利用 ThingsCloud 强大的零代码应用开发工具,为用户生成手机端 App,随时随地远程控制继电器。

温馨提示
在学习本教程之前,您可能需要具备一些基础知识,包括:
- 继电器的基础知识和接线方法。
- 如何在 Arduino IDE 中为 ESP8266 芯片开发和烧录固件。
- Arduino 框架下的单片机编程基础。
这些内容不在本教程的范围内,请您自行学习,相关学习资源在网上很容易找到。
硬件准备工作
硬件清单
请自行网购以下硬件及配件:
- ESP01S 模块:核心通信单元,负责 WiFi 连接和继电器控制。
- ESP01S 烧录器:为 ESP01S 模块烧录固件,通常集成 CH340/CP2102 芯片实现 USB 转 UART。
- 继电器底座板:提供继电器驱动电路和电源接口,支持 5V-12V 供电,部分型号带光耦隔离。
- USB 电源线(裸线):为继电器底座板供电,使用 5V 供电。


烧录器连线示意图
烧录固件时,将 ESP01S 模块插入到烧录器上,如下图:

将烧录器的 USB 接口插到电脑上。
继电器底座板连线示意图
将烧录固件程序后的 ESP01S 模块,插到继电器底座板上,如下图:

将 USB 电源线(裸线)连接到继电器底座板的电源输入端子,这样就可以给 ESP01S 模块供电。
ThingsCloud 控制台准备工作
学习如何在 ThingsCloud 控制台注册账号以及创建项目,请浏览 快速上手。
创建设备类型
进入项目后,首先创建设备类型,选择“从产品库快速导入”,输入产品 ID 7288422311
,这是我们发布的 ESP01S 示例模板,包含了功能定义和 App 面板界面,您可以直接使用,并在此基础上自行编辑。

创建设备
接下来,创建一个设备,填写一个设备名称,绑定到刚创建的设备类型下。

设备创建成功后,进入设备详情页的连接页面,这里的 MQTT 接入点信息稍后在 Arduino 编辑代码时会用到。

Arduino 准备工作
确保您的 Arduino 已成功安装 ThingsCloud ESP SDK,详细方法请浏览 如何安装 Arduino ThingsCloud ESP32/ESP8266 SDK。
编辑固件代码
获取示例代码
请确保您的 ThingsCloud ESP SDK 已更新到 v1.0.14 版本,在 Arduino 示例代码中,找到 ThingsCloud_ESP_SDK > 10.IoT_Tutorials > esp01_relay
示例代码。

以下为完整代码:
#include <ThingsCloudWiFiManager.h>
#include <ThingsCloudMQTT.h>
//======================================================
// 设置 ssid / password,连接到你的 WiFi AP
const char *ssid = "";
const char *password = "";
// 在 ThingsCloud 控制台的设备详情页中,复制以下设备连接信息
// https://console.thingscloud.xyz
#define THINGSCLOUD_MQTT_HOST ""
#define THINGSCLOUD_DEVICE_ACCESS_TOKEN ""
#define THINGSCLOUD_PROJECT_KEY ""
//======================================================
ThingsCloudMQTT client(
THINGSCLOUD_MQTT_HOST,
THINGSCLOUD_DEVICE_ACCESS_TOKEN,
THINGSCLOUD_PROJECT_KEY);
// 设置控制继电器的GPIO输出引脚,可根据实际情况调整
#define RELAY_PIN 0
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
// 初始断开继电器,输出高电平
digitalWrite(RELAY_PIN, HIGH);
// 允许 SDK 的日志输出
client.enableDebuggingMessages();
// 连接 WiFi AP
client.setWifiCredentials(ssid, password);
}
/**
* @brief 根据传入的状态控制继电器的开关
*
* 该函数依据传入的布尔值 state 控制继电器引脚的电平,从而实现继电器的闭合与断开,
* 同时会在串口打印当前继电器的状态信息。
*
* @param state 继电器的目标状态,true 表示闭合继电器,false 表示断开继电器
*/
void controlRelay(bool state) {
if (state) {
// 闭合继电器,输出低电平
digitalWrite(RELAY_PIN, LOW);
// 打印继电器闭合状态信息
Serial.println("relay switch to ON");
} else {
// 断开继电器,输出高电平
digitalWrite(RELAY_PIN, HIGH);
// 打印继电器断开状态信息
Serial.println("relay switch to OFF");
}
}
void handleAttributes(const JsonObject &obj) {
if (obj.containsKey("relay")) {
// 接收到下发的 relay 属性
controlRelay(obj["relay"]);
}
}
// 必须实现这个回调函数,当 MQTT 连接成功后执行该函数。
void onMQTTConnect() {
// 订阅获取属性的回复消息
client.onAttributesGetResponse([](const String &topic, const JsonObject &obj) {
if (obj["result"] == 1) {
handleAttributes(obj["attributes"]);
}
});
// 订阅云平台下发属性的消息
client.onAttributesPush([](const JsonObject &obj) {
handleAttributes(obj);
});
// 读取设备在云平台上的属性,用于初始化继电器状态。
// 云平台回复的属性会进入上边 client.onAttributesGetResponse 接收的消息。
client.getAttributes();
}
void loop() {
client.loop();
}
编辑代码中的参数
以上示例代码,您只需要补全以下两处参数,其它部分不需要任何修改。
WiFi 连接参数
这个教程我们使用的是指定 WiFi 连接参数的方式,您需要修改以下部分:
// 设置 ssid / password,连接到你的 WiFi AP
const char *ssid = "";
const char *password = "";
修改为您的 WiFi 路由器连接参数,例如:
// 设置 ssid / password,连接到你的 WiFi AP
const char *ssid = "bj_office_713";
const char *password = "12345678";
请确保您的 WiFi 路由器支持 2.4GHz 频段。
ThingsCloud 设备 MQTT 地址和连接证书
接下来填写您在 ThingsCloud 的设备 MQTT 地址和连接证书,如下:
// 在 ThingsCloud 控制台的设备详情页中,复制以下设备连接信息
// https://console.thingscloud.xyz
#define THINGSCLOUD_MQTT_HOST ""
#define THINGSCLOUD_DEVICE_ACCESS_TOKEN ""
#define THINGSCLOUD_PROJECT_KEY ""
这几个参数在 ThingsCloud 控制台的设备详情页中可以找到,上文中我们有提到,它们的对应关系是:
THINGSCLOUD_MQTT_HOST
:MQTT 主机THINGSCLOUD_DEVICE_ACCESS_TOKEN
:UsernameTHINGSCLOUD_PROJECT_KEY
:Password
编译代码并上传固件
将烧录器 USB 连接到电脑,在 Arduino IDE 中选择对应的开发板,如下图:

选择连接到烧录器的 USB 端口,如下图:

点击上传按钮,编译并上传固件,如下图:

固件上传成功后,在 Arduino IDE 打开串口日志,可以看到模块 WiFi 连接成功,以及通过 MQTT 成功连接到 ThingsCloud 的日志信息。
此时,在 ThingsCloud 控制台也可以看到设备上线的提示信息。
ThingsCloud 控制台下发控制
在 ThingsCloud 控制台的设备概要页面,拨动继电器开关,如下图:

与此同时,可以看到在 Arduino 串口监视器中会有收到下发消息和执行继电器的日志。
ThingsX App 远程控制继电器
编辑 App 设备面板
本教程中您快速导入的设备类型模板中,我们已经编辑好了 App 设备面板,您可以直接使用,也可以进入设备类型的 App 设备面板编辑器中,自行修改样式。
学习如何编辑 App 设备面板?请浏览 App 设备面板。

创建用户应用
要在手机上打开 App 设备面板,我们需要先创建一个 ThingsX 用户应用,并创建用户账号来登录这个应用。详细方法请您学习 生成用户应用 App。
登录 App 体验
最后,登录 App 便可以远程控制 ESP01S 模块的继电器状态。

进阶方向
- 多继电器控制:在项目中创建更多设备,通过可视化看板,同时控制多个 ESP01S 继电器。
- 定时任务:在 ThingsCloud 中设置定时任务,例如每天 8 点开启继电器,无需设备端代码修改。
- 智能联动:添加其它传感器设备(如温湿度传感器),在 ThingsCloud 建立消息规则,根据传感器数据来自动控制继电器状态。
更多相关教程
- 视频教程(1):用 Arduino IDE 开发 ESP32 网络继电器,远程控制无距离限制
- 视频教程(2):给 ESP32 网络继电器定制个性化 App,不用写一行代码
- 视频教程(3):ESP32 网络继电器,轻松搞定手机 WiFi 配网
- ESP32 + DHT11/DHT22 温湿度传感器接入 ThingsCloud
- ESP32 + 继电器模块接入 ThingsCloud