最佳实践 · ESP01S WiFi 继电器接入 ThingsCloud,生成手机 APP 远程控制开关

2025/6/20

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:Username
  • THINGSCLOUD_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 建立消息规则,根据传感器数据来自动控制继电器状态。

更多相关教程

更多学习资源

关于 ThingsCloud

ThingsCloud 是新一代物联网设备统一接入平台,帮助企业在极短的时间内搭建个性化的物联网平台和应用,并适应不断变化的发展需求。目前广泛应用于制造、电力、能源、环境、农业、楼宇、家居、教育、交通、物流、自动化等领域。

ThingsCloud 可接入各类网关,传感器、执行器、控制器、通信模组、智能硬件等,实现数据采集、远程控制,数据分析、告警通知、智能联动。还可以零代码生成项目应用 SaaS 和用户应用 App,并开放 API 和实时消息,便于业务系统集成和扩展开发。

通过使用 ThingsCloud,企业可以大大缩短搭建物联网系统的时间,节省软件开发费用,降低定制开发的风险,快速落地数字化和智能化项目。我们的客户遍布各行业,包括中国石化、中国铁塔、中国燃气、吉林大学、北控水务、ACE、中国民航大学、西安交通大学、精量电子、大秦铁路、宁波水利局等。

立即搭建您的物联网平台?

接入物联网设备,搭建可视化看板,生成 App,仅需不到 30 分钟。

进入控制台

5000+ 企业在使用 ThingsCloud

更多博客

应用场景

全球 80% 的数据将来自物联网,不论是传统行业还是新兴行业,都将利用更多有价值的数据来驱动业务,实现降本增效。