跳至主要內容

ESP32 + 继电器模块接入 ThingsCloud

约 2254 字大约 8 分钟

ESP32 + 继电器模块接入 ThingsCloud

ESP32 是乐鑫公司推出的 WiFi 芯片,它不仅支持 WiFi 和 BLE,还可以作为可编程的 MCU,通过 Espressif IDF、Arduino 等框架编写固件,用于非常广泛的物联网场景。

这个教程我们分享如何在 Arduino IDE 中使用 ThingsCloud ESP SDK,为 ESP32 开发固件程序,通过 ThingsCloud 物联网平台远程控制继电器状态,并利用 ThingsCloud 强大的零代码应用开发工具,为用户生成 App,并支持 WiFi 配网。

该示例不仅支持 ESP32 芯片,同样支持:ESP8266、ESP32-S2、ESP32-S3、ESP32-C3。

温馨提示

在学习本教程之前,您需要具备一些基础知识,包括:

  • 如何在 Arduino IDE 中开发和上传 ESP32 固件。
  • Arduino 框架下的单片机编程基础。
  • C 语言基础

这些内容不在本教程的范围内,请您自行学习,相关的学习资源很多。

硬件部分准备

连线示意图

我们使用的继电器模块有3个引脚:

引脚说明
VCC3.3-5V DC
GND接 ESP32 的 GND
IN输入引脚,低电平信号触发继电器闭合

与 ESP32 开发板的接线方式,如下图:

示例中我们将继电器模块的输入引脚接到了 ESP32 的 GPIO5 上,您也可以使用其它可用的 GPIO 引脚,并在代码中修改引脚编号。

在 Arduino 中安装依赖库

安装 ThingsCloud ESP SDK

详细安装方法,请浏览 在 Arduino IDE 中安装 ThingsCloud ESP SDK

使用示例代码

请确保已更新 SDK 到最新版本,在 Arduino 示例代码中,找到 10.IoT_Tutorials > relay_control 示例代码。

以下为完整代码:

#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);

// 设置继电器的输入引脚
#define RELAY_PIN 5

void setup() {
  Serial.begin(115200);

  pinMode(RELAY_PIN, OUTPUT);
  // 初始断开继电器,输出高电平
  digitalWrite(RELAY_PIN, HIGH);

  // 允许 SDK 的日志输出
  client.enableDebuggingMessages();

  // 连接 WiFi AP
  client.setWifiCredentials(ssid, password);
}

void handleAttributes(const JsonObject &obj) {
  if (obj.containsKey("relay")) {
    // 接收到下发的 relay 属性
    if (obj["relay"] == true) {
      // 闭合继电器,输出低电平
      digitalWrite(RELAY_PIN, LOW);
      Serial.println("relay switch to ON");
    } else {
      // 断开继电器,输出高电平
      digitalWrite(RELAY_PIN, HIGH);
      Serial.println("relay switch to OFF");
    }
  }
}

// 必须实现这个回调函数,当 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 = "my-wifi-ap";
const char *password = "thingscloud.xyz";

ThingsCloud 设备 MQTT 地址和连接证书

接下来填写您在 ThingsCloud 的设备 MQTT 地址和连接证书,如下:

// 在 ThingsCloud 控制台的设备详情页中,复制以下设备连接信息
// https://console.thingscloud.xyz
#define THINGSCLOUD_MQTT_HOST ""
#define THINGSCLOUD_DEVICE_ACCESS_TOKEN ""
#define THINGSCLOUD_PROJECT_KEY ""

如何获得这些参数呢?首先在 ThingsCloud 控制台创建一个设备类型,这里可以直接选择标准类型中的单路网络继电器,如下图:

填写其它的信息,如下图:

接下来创建一个新设备,选择绑定到刚才创建的设备类型上。如下图:

设备创建成功后,在设备概览中,可以看到一个拨动开关,这是由设备类型的属性定义产生的。

进入设备的 连接 页面,在这里可以复制代码中需要的几个参数,如下图:

将参数补全到代码中,例如:

// 在 ThingsCloud 控制台的设备详情页中,复制以下设备连接信息
// https://console.thingscloud.xyz
#define THINGSCLOUD_MQTT_HOST "********.iot-api.com"
#define THINGSCLOUD_DEVICE_ACCESS_TOKEN "bzqsg6b7l2******"
#define THINGSCLOUD_PROJECT_KEY "VV9Z******"

特别注意

不要直接使用以上的参数示例,请登录 ThingsCloud 创建自己的设备,获取 MQTT 地址和设备证书。

编译代码并上传固件到 ESP32

接下来编译和上传固件到 ESP32 开发板。

通过 ThingsCloud 下发控制

固件上传成功后,ESP32 打印日志到串口,可以看到 WiFi 连接成功,ThingsCloud 连接成功后,设备等待云平台下发的控制消息。

在 ThingsCloud 控制台的设备概要页面,拨动继电器开关,如下图:

ESP32 串口监视器中可以看到立即收到了下发的 relay 属性,并闭合继电器。

再拨动几次试试。

下发控制没有问题了,还需要考虑一点,假如 ESP32 断电后重启,我们希望继电器能恢复之前的状态,我们重启 ESP32 来试试。

程序中我们在 MQTT 连接成功后立即读取云平台的设备属性,来初始化继电器的状态,如下图:

设计App设备面板

到此为止,我们已经可以在 ThingsCloud 控制台中控制 ESP32 继电器,如果您的设备是卖给用户,那就需要给用户提供相应的管理软件,并且为用户分配相应的设备。ThingsCloud 提供了用户应用,帮助您生成用户 App。

我们需要完成以下几步简单的操作。

创建设备类型

前边我们已经为设备创建了设备类型,这里就可以跳过了。

编辑 App 界面

我们再回到设备类型中,进入 应用配置 > 编辑设备面板,如下图:

提示

ThingsCloud 将不断增加更多的组件和样式风格,并支持包括分页和背景样式等高级功能。

创建用户并关联设备

接下来,为设备关联现有用户,也可以创建新用户。

如下图,设备已经关联了一个用户。

创建用户应用

还剩最后一步,那就是创建一个用户应用,所有的用户都可以登录这个应用来管理自己关联的设备。

这里我们选择 ThingsX ,这是用户应用通用版 App。

给应用起个名字,如下图:

进入创建的应用,可以看到平台为我们生成了多个平台的应用,不论使用哪个,界面都是完全一致的。

在 App 中浏览设备数据

这里我们以微信小程序为例,点击上边的微信小程序,会自动生成小程序码,用微信扫一扫,进入登录页,如下图:

使用创建用户时设置的登录名和密码,登录成功,进入设备列表页,如下图:

进入设备,看到的便是我们刚才编辑的设备面板界面,您可以重新编辑这个界面,界面更新后,只需要重新进入设备页,便会自动同步新的面板界面。

提示

了解用户应用的详细介绍,以及 ThingsX 公版及 OEM App,请浏览 用户应用

视频教程

以下是我们在B站的视频教程:

更多应用

设备接入 ThingsCloud 后,以上只介绍了如何创建关联用户,以及快速生成用户 App。还有更多的功能值得您探索,例如:

更多场景和功能介绍,请浏览官方资源: