ESP8266+ws2812,吊灯灯带炫酷升级!
创作时间:
2025-01-22 05:30:30
作者:
@小白创作中心
ESP8266+ws2812,吊灯灯带炫酷升级!
随着智能家居的普及,DIY一套炫酷的灯光系统成为许多科技爱好者的首选项目。本文将带你使用ESP8266和ws2812 LED灯带,打造一个支持远程控制和声音控制的智能灯光系统。无论是在家中还是办公室,这套系统都能为你带来前所未有的视觉享受。
硬件准备
- ESP8266开发板
- ws2812 LED灯带(建议30颗灯珠)
- MAX9814麦克风模块
- 5V电源
- 杜邦线若干
软件准备
- Arduino IDE
- 必需的库文件:
- Adafruit_NeoPixel
- PubSubClient
- FastLED
- MegunoLink
硬件连接
ESP8266与ws2812 LED灯带连接:
- ESP8266的GPIO15连接到LED灯带的DO
- 5V电源连接到灯带的VCC
- GND连接到灯带的GND
ESP8266与MAX9814麦克风模块连接:
- ESP8266的A0连接到麦克风模块的OUT
- 5V电源连接到麦克风模块的Vdd
- GND连接到麦克风模块的GND
代码实现
远程控制部分
基于MQTT协议实现远程控制,代码如下:
#include <ESP8266WiFi.h>
#include <Adafruit_NeoPixel.h>
#include <PubSubClient.h>
Adafruit_NeoPixel rgb_display_15 = Adafruit_NeoPixel(30, 15, NEO_GRB + NEO_KHZ800);
const char *mqtt_broker = "mixio.mixly.cn";
const char *mqtt_username = "your_email@example.com";
const char *mqtt_password = "your_mqtt_password";
const int mqtt_port = 1883;
String mqtt_topic = "";
String mqtt_data = "";
boolean mqtt_status = false;
String project = "ControlRGB";
WiFiClient espClient;
PubSubClient client(espClient);
void callback(char *topic, byte *payload, unsigned int length) {
String data = "";
for (int i = 0; i < length; i++) {
data = String(data) + String((char) payload[i]);
}
mqtt_topic = String(topic);
mqtt_data = data;
mqtt_status = true;
}
void setup() {
WiFi.begin("your_wifi_ssid", "your_wifi_password");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
rgb_display_15.begin();
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp-client-";
client_id += String(WiFi.macAddress());
if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) {
client.publish(String(String(mqtt_username) + "/" + String(project) + "/" + String("b640a0ce465fa2a4150c36b305c1c11b")).c_str(), String(client_id).c_str());
} else {
delay(2000);
}
}
client.subscribe(String(String(mqtt_username) + "/" + String(project) + "/" + String("RGBdata")).c_str());
}
void loop() {
client.loop();
if (mqtt_status) {
if (String(mqtt_topic).equals(String(String(mqtt_username) + "/" + String(project) + "/" + String("RGBdata")))) {
int r = mqtt_data.substring(1, 3).toInt();
int g = mqtt_data.substring(4, 6).toInt();
int b = mqtt_data.substring(7, 9).toInt();
for (int i = 0; i < rgb_display_15.numPixels(); i++) {
rgb_display_15.setPixelColor(i, rgb_display_15.Color(r, g, b));
}
rgb_display_15.show();
mqtt_status = false;
}
}
}
声音控制部分
使用MAX9814麦克风模块实现声音控制,代码如下:
#include <FastLED.h>
#include <MegunoLink.h>
#include <Filter.h>
#define N_PIXELS 30
#define MIC_PIN A0
#define LED_PIN 15
#define NOISE 580
#define TOP (N_PIXELS + 2)
#define LED_TYPE WS2812B
#define BRIGHTNESS 100
#define COLOR_ORDER GRB
CRGB leds[N_PIXELS];
int lvl = 0, minLvl = 0, maxLvl = 136;
ExponentialFilter<long> ADCFilter(5, 0);
void music_vu() {
int n, height;
n = analogRead(MIC_PIN);
n = abs(1023 - n);
n = (n <= NOISE) ? 0 : abs(n - NOISE);
ADCFilter.Filter(n);
lvl = ADCFilter.Current();
height = TOP * (lvl - minLvl) / (long)(maxLvl - minLvl);
if (height < 0L) height = 0;
else if (height > TOP) height = TOP;
for (uint8_t i = 0; i < N_PIXELS; i++) {
if (i >= height) leds[i] = CRGB(0, 0, 0);
else leds[i] = Wheel(map(i, 0, N_PIXELS - 1, 30, 150));
}
FastLED.show();
}
void setup() {
Serial.begin(115200);
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, N_PIXELS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
music_vu();
}
CRGB Wheel(byte WheelPos) {
if (WheelPos < 85)
return CRGB(WheelPos * 3, 255 - WheelPos * 3, 0);
else if (WheelPos < 170) {
WheelPos -= 85;
return CRGB(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return CRGB(0, WheelPos * 3, 255 - WheelPos * 3);
}
}
测试与调试
远程控制测试:
- 在MIXIO平台上创建一个色盘控件
- 将控件的消息主题设置为"RGBdata"
- 发送颜色信息,观察LED灯带是否按预期变化
声音控制测试:
- 运行声音控制代码
- 播放音乐或制造声音,观察LED灯带是否随声音节奏变化
总结与展望
通过以上步骤,你已经成功打造了一个支持远程控制和声音控制的智能灯光系统。这个系统不仅能够通过手机APP远程调节灯光效果,还能根据环境声音实现灯光律动,为你带来前所未有的视觉享受。未来,你可以尝试添加更多传感器,如光线传感器或人体红外传感器,进一步提升系统的智能化水平。
热门推荐
“医保取现”透支未来“救命钱” 多部门联合严查违规行为
雨水节气养生指南:中医专家推荐5个秘诀和2道食疗方
如何带领团队精进工作
2分钟看懂音箱的RMS功率是什么?对声音有什么影响?怎么选?
期价创近一年半来新低!苯乙烯持续走弱的原因是……
益生菌懒人包:益生菌何时食用?可以长期服用吗?附益生菌食物
如何提高目标任务完成率?五个关键策略让你事半功倍
生物素:维生素B7的全面解析
芝麻粉、芝麻醬、芝麻油該如何保存?原來它不需要放冰箱!
实用!坐火车不小心上错了该咋办?这份出行攻略快收好
7岁男孩专属阅读指南:六大领域精选书籍推荐
装修攻略:有限预算下的高性价比材料选购指南
核电钢结构科研创新与精益建造前后台多项目管理实践
青岛探索骑手友好社区:让“配送之路”更舒心更顺畅
4级甲状腺结节就是癌?消融术比传统手术更好?如何保护“脆皮”甲状腺?
咳嗽完全攻略:咳嗽不止常见原因跟止咳方法,看这一篇就够了!
出现心绞痛别不当回事,心脏正在发出紧急求助信号,远离5个诱因
Adobe Photoshop中添加签名或水印的两种方法
湘财股份与大智慧计划跨界融合 两家“联姻”可追溯至10年前
外出关掉这几个设置 手机续航提升20%
科学护肤:先认识这些护肤成分
如何有效清洗发动机积碳?这种清洁方法对发动机性能有何影响?
光伏设计需要考虑哪些关键方面?
德甲情报:药厂头牌因伤缺阵,波鸿化身巨人杀手
糖尿病医保报销比例及额度详解:职工医保与城乡居民医保有何不同?
蓄电池容量及内阻测试方法详解
手机储存照片清晰度指南:从拍摄到存储的全方位优化
关于提高儿童免疫力的方法解读
春秋五霸的雄风:齐桓公率先称霸
春秋霸业的奠基者:齐桓公