行空板K10——WLED控灯(新年快乐)
【项目背景】[*]本项目旨在通过行空板 K10 通过 HTTP POST 请求控制 ESP32-C3 连接的 WS2812 灯带。ESP32-C3 作为控制节点,运行 WLED 项目提供的固件,实现对 WS2812 灯带的精细控制。行空板 K10 作为控制端,发送 HTTP POST 请求来控制灯带的颜色、效果和其他参数。
[*]WLED 是一个开源项目,提供了一个快速且功能丰富的 ESP8266/ESP32 Web 服务器,用于控制 NeoPixel(WS2812B, WS2811, SK6812)LED 灯带,以及基于 SPI 的芯片集,如 WS2801 和 APA102。WLED 项目集成了 WS2812FX 库,支持超过 100 种特殊效果,并提供了现代的用户界面,包括颜色、效果和段控制。此外,WLED 还支持多种控制接口,如 JSON 和 HTTP 请求 API、MQTT、Blynk IoT、E1.31、Art-Net、DDP 和 TPM2.net 等。
【项目设计】
[*]实现远程控制:通过行空板 K10 语音指令发送 HTTP POST 请求,远程控制 ESP32-C3 连接的 WS2812 灯带。
[*]提供丰富的效果:利用 WLED 项目提供的多种效果,实现灯带的动态显示。
【项目硬件】
[*]行空板 K10:作为控制端,通过语音指令发送 HTTP POST 请求。
[*]ESP32-C3:作为控制节点,运行 WLED 固件,控制 WS2812 灯带。
[*]WS2812 灯带:被控制的 LED 灯带,支持多种颜色和效果。
【制作步骤】1.硬件准备:准备行空板 K10、ESP32-C3 和 WS2812 灯带。
2.固件部署:在 ESP32-C3 上部署 WLED 固件。通过https://install.wled.me/网站在线安装。同时配置wifi连接。
3.网络配置:配置行空板 K10 和 ESP32-C3 的网络连接。
访问无线路由,获取ESP32-C3的IP地址。
4.控制端开发:开发行空板 K10 的控制程序,结合语音指令发送 HTTP POST 请求。
/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
#include <DFRobot_HTTPClient.h>
// 函数声明
void DF_MoShi(float mind_n_XiaoGuoXuHao);
// 创建对象
DFRobot_Iot myIot;
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
String bodydata="";
int c=0;
ASR asr;
DFRobot_HTTPClient http;
// 主程序开始
void setup() {
k10.begin();
k10.initScreen(screen_dir);
k10.creatCanvas();
asr.asrInit(CONTINUOUS, CN_MODE, 60000);
while(asr._asrState == 0){delay(100);}
asr.setAsrSpeed(2);
http.init();
Serial.begin(9600);
myIot.wifiConnect("sxs", "************");
while (!myIot.wifiStatus()) {}
k10.setScreenBackground(0x000000);
k10.canvas->canvasText(myIot.getWiFiLocalIP(), 35, 0, 0xFFFFFF, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->canvasText("行空板K10 WLED", 25, 100, 0xFFFFFF, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->canvasText("1.语音唤醒:你好小行", 0, 200, 0xFFFFFF, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->canvasText("2.说命令词:模式?", 0, 250, 0xFFFFFF, k10.canvas->eCNAndENFont24, 50, true);
k10.canvas->updateCanvas();
asr.addASRCommand(1+1, "mo shi yi");
asr.addASRCommand(2+1, "mo shi er");
asr.addASRCommand(3+1, "mo shi san");
asr.addASRCommand(4+1, "mo shi si");
asr.addASRCommand(27+1, "mo shi er shi qi");
asr.addASRCommand(60+1, "mo shi liu shi");
asr.addASRCommand(73+1, "mo shi qi shi san");
asr.addASRCommand(82+1, "mo shi ba shi er");
asr.addASRCommand(83+1, "mo shi ba shi san");
asr.addASRCommand(93+1, "mo shi jiu shi san");
asr.speak("初始化完成");
}
void loop() {
if (asr.isDetectCmdID(1+1)) {
DF_MoShi(1);
}
if (asr.isDetectCmdID(2+1)) {
DF_MoShi(2);
}
if (asr.isDetectCmdID(3+1)) {
DF_MoShi(3);
}
if (asr.isDetectCmdID(4+1)) {
DF_MoShi(4);
}
if (asr.isDetectCmdID(27+1)) {
DF_MoShi(27);
}
if (asr.isDetectCmdID(60+1)) {
DF_MoShi(60);
}
if (asr.isDetectCmdID(73+1)) {
DF_MoShi(73);
}
if (asr.isDetectCmdID(82+1)) {
DF_MoShi(82);
}
if (asr.isDetectCmdID(83+1)) {
DF_MoShi(83);
}
if (asr.isDetectCmdID(93+1)) {
DF_MoShi(93);
}
}
// 自定义函数
void DF_MoShi(float mind_n_XiaoGuoXuHao) {
c=(floor(mind_n_XiaoGuoXuHao));
DFRobot_HTTPClient http;;
http.addHeader("Content-Type", "application/json");
http.addHeader("charset", "UTF-8");
bodydata=R"({"on":1,"bri":128,"seg":[{"id":0,"start":0,"stop":120,"on":true,"bri":50,"col":[],"fx":)"+String(c)+R"(,"pal":1}]})";
Serial.println((bodydata));
http.addString((bodydata));
http.POST("http://192.168.31.207/json", 10000);
Serial.println(http.getString());
asr.speak((String("已设置模式") + String(c)));
}
【演示视频】
https://www.bilibili.com/video/BV19CckeqEay/?share_source=copy_web
页:
[1]