【电子DIY作品】语音小夜灯:ESP-01S+离线语音+ThingsCloud

[复制链接]
查看359 | 回复9 | 2024-8-8 09:48:00 | 显示全部楼层 |阅读模式
本帖最后由 陈世繁华 于 2024-8-8 10:46 编辑

一个买了很久的亚克力板台灯,只有一个颜色,USB供电,底座长这个样子

1723082904773.png

这是内部结构
0758f302627ad4574a84d3828feaa96.png

成品展示视频:
【台灯增加网络控制—智能小台灯】 https://www.bilibili.com/video/B ... 867ecd1fbfd09a6b594


使用ESP01S+HLK_V20离线语音+ThingsCloud物联网平台进行控制灯板亮灭
————————————————————————————————————————
ThingsCloud 是新一代物联网设备统一接入平台,可接入各类网关,传感器、执行器、控制器、通信模组、智能硬件等,实现数据采集、远程控制,数据分析、告警通知、智能联动。还可以零代码生成项目应用 SaaS 和用户应用 App,并开放 API 和实时消息,便于业务系统集成和扩展开发

创建好账号后现在设备类型中创建设备
19c117e1a826f77da9fef66f79e2207.png

设备类型可以自定义设置或者在平台的模板库中选择,我们在模板库中选择单路网络继电器
6852cd4c3dc711ea7fb6f524732ffb5.png
设备接入类型选择:直连设备
设备通信方式选择:WIFI
设备接入协议选择:ThingsCloud 标准接入协议
选择好后点击创建
94fc5f8b49652e77091c64d26b547b2.png

创建好设备类型后我们创建设备
3cd40a71ad261a400f860d1a9ca4ec6.png
设备类型选择我们刚刚创建好的单路网络继电器,其他可以自定义或空白,然后点击创建
96c7ca01a237bd1a9d35c7821e013ac.png

点进去创建好的设备,红格子内可以控制继电器开关,点击连接查看
8936f57805414f0fc536849599f0ec6.png

连接中的设备证书以及MQTT接入点信息需要更新到ESP01S代码中
50b799f0179844c0ae1b2475c03e1c2.png

更新好后刷入模块便可以在网页通过网络控制
ThingsCloud创建设备小程序以及app,有兴趣的可以看下网站教程

——————————————————————————————————
由于HLK_V20的SDK无法设置UART接收信息,所以由ESP01S控制继电器
代码中的WIFI,设备证书以及MQTT接入点需要更新为自己的
以下是ESP01S-Arduino代码
#include <ThingsCloudWiFiManager.h>
#include <ThingsCloudMQTT.h>
#include <SoftwareSerial.h>
#include <Arduinojson.h>

//======================================================
// 设置 ssid / password,连接到你的 WiFi AP
// 设置 ssid / password,连接到你的 WiFi AP
const char *ssid = "Ge";
const char *password = "asdasdasd";

// 在 ThingsCloud 控制台的设备详情页中,复制以下设备连接信息
// https://console.thingscloud.xyz
#define THINGSCLOUD_MQTT_HOST "gz-3-mqtt.iot-api.com"
#define THINGSCLOUD_DEVICE_ACCESS_TOKEN "6h46cx76m3jyfs0g"
#define THINGSCLOUD_PROJECT_KEY "paSzsTkQLo"
//======================================================
//定义串口通讯引脚
#define ESP_RX_PIN 3
#define ESP_TX_PIN 1


// 创建一个软件串行实例用于ESP-01S通信
SoftwareSerial espSerial(ESP_RX_PIN, ESP_TX_PIN);

ThingsCloudMQTT client(
  THINGSCLOUD_MQTT_HOST,
  THINGSCLOUD_DEVICE_ACCESS_TOKEN,
  THINGSCLOUD_PROJECT_KEY);

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

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

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

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

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

  // 初始化SoftwareSerial用于与ESP-01S通信,设置波特率为115200
  espSerial.begin(115200);

}

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();
  if (espSerial.available()) { // 检查ESP-01S是否有数据可用
    int incomingByte = espSerial.read(); // 读取一个字节
    // 检查接收到的字节
    switch (incomingByte) {
      case 0x01: // 如果是01
        digitalWrite(RELAY_PIN, LOW); // 打开继电器
        break;
      case 0x10: // 如果是10
        digitalWrite(RELAY_PIN, HIGH); // 关闭继电器
        break;
      default: // 其他情况
        // 不做任何操作
        break;
    }
  }
}
//接收ThingsCloud与HLK_V20的指令更改IO2引脚的高低电平来进行控制继电器,继电器需改为低电平控制
————————————————————————————————————————————————————————————————————————————————————————————————

HLK_V20网页控制系统操作
设置引脚为UART模式
image.png
添加语音指令
image.png
设置引脚发送信息,模块只能发送16进制的信息
image.png
添加免唤醒词
image.png

设置好后选择发布SDK,发布SDK需要约半小时,对SDK审核以及打包,打包好便可以下载了
//此模块烧录需要先在模块不通电的情况下连接电脑,烧录软件开始烧录后再给模块通电,使用的话建议给模块电源增加拨动开关进行控制
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
安装前就是这个样子,电击器控制LED负极通断
37e123b2bda051663034df55d3cad93.png

本人还不懂json代码编写,所以代码中没有添加[通过属性上报更改平台继电器状态]的操作
大佬们有没有简单易学的JSON教程推荐下

9d43224700df1db51b506f368e9f0a9.jpg
19c117e1a826f77da9fef66f79e2207.png
回复

使用道具 举报

爱笑 | 2024-8-8 09:54:24 | 显示全部楼层
图片需要本地上传,没显示出来。
用心做好保姆工作
回复 支持 反对

使用道具 举报

陈世繁华 | 2024-8-8 09:54:52 | 显示全部楼层
爱笑 发表于 2024-8-8 09:54
图片需要本地上传,没显示出来。

好的
回复 支持 反对

使用道具 举报

爱笑 | 2024-8-8 10:38:40 | 显示全部楼层
用心做好保姆工作
回复 支持 1 反对 0

使用道具 举报

WT_0213 | 2024-8-8 11:21:05 | 显示全部楼层
真不错
回复

使用道具 举报

bzhou830 | 2024-8-8 11:36:34 | 显示全部楼层
那个奥特曼灯好漂亮,有链接吗?
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

陈世繁华 | 2024-8-8 13:18:08 | 显示全部楼层
bzhou830 发表于 2024-8-8 11:36
那个奥特曼灯好漂亮,有链接吗?

PDD链接https://mobile.yangkeduo.com/goods2.html?ps=P2B4xbyoi5
回复 支持 反对

使用道具 举报

bzhou830 | 2024-8-8 13:45:12 | 显示全部楼层
陈世繁华 发表于 2024-8-8 13:18
PDD链接https://mobile.yangkeduo.com/goods2.html?ps=P2B4xbyoi5

收到,谢谢
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

大猫的鱼 | 2024-8-8 13:58:53 | 显示全部楼层
不错不错
回复

使用道具 举报

WildboarG | 2024-8-8 15:46:13 | 显示全部楼层
学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则