本帖最后由 陈世繁华 于 2024-8-8 10:46 编辑
一个买了很久的亚克力板台灯,只有一个颜色,USB供电,底座长这个样子
这是内部结构
成品展示视频:
【台灯增加网络控制—智能小台灯】 https://www.bilibili.com/video/B ... 867ecd1fbfd09a6b594
使用ESP01S+HLK_V20离线语音+ThingsCloud物联网平台进行控制灯板亮灭
————————————————————————————————————————
ThingsCloud 是新一代物联网设备统一接入平台,可接入各类网关,传感器、执行器、控制器、通信模组、智能硬件等,实现数据采集、远程控制,数据分析、告警通知、智能联动。还可以零代码生成项目应用 SaaS 和用户应用 App,并开放 API 和实时消息,便于业务系统集成和扩展开发
创建好账号后现在设备类型中创建设备
设备类型可以自定义设置或者在平台的模板库中选择,我们在模板库中选择单路网络继电器
设备接入类型选择:直连设备
设备通信方式选择:WIFI
设备接入协议选择:ThingsCloud 标准接入协议
选择好后点击创建
创建好设备类型后我们创建设备
设备类型选择我们刚刚创建好的单路网络继电器,其他可以自定义或空白,然后点击创建
点进去创建好的设备,红格子内可以控制继电器开关,点击连接查看
连接中的设备证书以及MQTT接入点信息需要更新到ESP01S代码中
更新好后刷入模块便可以在网页通过网络控制
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模式
添加语音指令
设置引脚发送信息,模块只能发送16进制的信息
添加免唤醒词
设置好后选择发布SDK,发布SDK需要约半小时,对SDK审核以及打包,打包好便可以下载了
//此模块烧录需要先在模块不通电的情况下连接电脑,烧录软件开始烧录后再给模块通电,使用的话建议给模块电源增加拨动开关进行控制
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
安装前就是这个样子,电击器控制LED负极通断
本人还不懂json代码编写,所以代码中没有添加[通过属性上报更改平台继电器状态]的操作
大佬们有没有简单易学的JSON教程推荐下
|