【训练营】MOLUN炫彩灯 - 嘉立创EDA开源硬件平台

编辑器版本 ×
标准版 Standard

1、简单易用,可快速上手

2、流畅支持300个器件或1000个焊盘以下的设计规模

3、支持简单的电路仿真

4、面向学生、老师、创客

专业版 professional

1、全新的交互和界面

2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计

3、更严谨的设计约束,更规范的流程

4、面向企业、更专业的用户

标准版 【训练营】MOLUN炫彩灯

简介:1.基于涂鸦WB3S模块制作的智能炫彩灯,支持外接红外控制!可以查看@gpdi的项目 2.基于ESP-12S控制WS2812B炫彩灯,通过点灯blinker接入小爱同学,可以APP和小爱同学语音控制!

开源协议: GPL 3.0

(未经作者授权,禁止转载)

创建时间: 2020-11-24 21:00:52
更新时间: 2023-08-03 14:26:00
描述
## **涂鸦WB3S方案炫彩灯** 主控采用涂鸦智能WB3S模块,USB供电,两段式拨动开关,采用AMS1117 3.3 [线性稳压器\(LDO\)](https://list.szlcsc.com/catalog/387.html "线性稳压器(LDO)") 降压至3.3V给模组供电,LED1为Red电源指示灯。 IR + -为外接红外接收模组,可以焊接排母插入模组,也可以直接焊接红外接收模组,可选操作(手里有就可以利用起来)(注意需要根据遥控在涂鸦平台设置固件时设置遥控键值) 电路板背面预留3颗 5050 RGB共阳灯珠,方便单板使用。R G B 5V为外接灯带排针,直排、弯针随意,可以外接灯带或者另做灯板用于级联延长(增加)RGB灯。 ![002.jpg](//image.lceda.cn/pullimage/FGEeTl8rokHO9j7GaqswsUztoLLjmpnKLMgVoUKC.jpeg) ![微信图片_20201126140408.jpg](//image.lceda.cn/pullimage/Bffc571caZ8C3HqDJwsn1wuitLHopJqiBMy3YYZ4.jpeg) ## **ESP8266炫彩灯方案** 基于ESP-12S控制WS2812B炫彩灯,通过点灯blinker接入小爱同学,可以APP和小爱同学语音控制! ESP-12S GPIO13 控制WS2812B RGB灯,可以实现APP、小爱语音控制炫彩灯开关、调整颜色、定时开关、切换显示模式。 ![微信图片_20201206001311.jpg](//image.lceda.cn/pullimage/glClh6Ip0LjP1eRnblPX7gJX2bdYYWMM65UwBN7u.jpeg) ![微信图片_20201206001307.jpg](//image.lceda.cn/pullimage/O7Mm8cqjxYjY3PN8o1by8jEEydmTNrnZ4KmNLA9l.jpeg) ![微信图片_20201206001316.jpg](//image.lceda.cn/pullimage/JMsVmFkcLVkeR2nbZna1Y7shGOqFODVkmB5WTac5.jpeg) ![微信图片_20201206001325.jpg](//image.lceda.cn/pullimage/RzgiWBv5ANVYys7f0NnqCNBgun7OzR7svTs65Aqt.jpeg)![微信图片_20201206002904.jpg](//image.lceda.cn/pullimage/XJyUZkaGAXL7VKCJuPqBncuSQZFlDJugOv1cI2sd.jpeg) ## 实例代码 通过Arduino编写程序,接入点灯科技,并对接小爱同学! ``` /*代码源于网络,源地址找不到了,进行了二次修改,采用SMARTCONFIG进行配网: * 灯光效果目前的循环模式是,每循环一次效果检测一下blinker的新命令,所以会有blinker app按键不能及时同步的情况,同样语音助手也 * 可能迟钝。blinker有频次限制暂时做不到随时中断灯效下的循环。 * * 这次的代码新增了fastled示例中的cylon,同时也有之前adafruit_nexopixel中的示例。大家可以看自己的喜好添加效果。 * * 具体的流程:blinker app设置控件--关联智能家具--编译、上传代码到开发板  相关教程参考电灯科技的官方开发文档与教程,也欢迎交流。 * * 预设五种模式+调色盘 除按键1外,默认都是先用调色盘调亮度物种模式才能正常显示。大家可以更改预设哈。 */ #define BLINKER_WIFI #define BLINKER_MIOT_LIGHT #define BLINKER_ESP_SMARTCONFIG #include #include /////////////////////////////////////blinker设备的授权码 char auth[] = "1e650860bd51"; ////////////////////////////////////////五个开关按键 一个滑条 一个调色盘 BlinkerButton Button1("ButtonKey1"); BlinkerButton Button2("ButtonKey2"); BlinkerButton Button3("ButtonKey3"); BlinkerButton Button4("ButtonKey4"); BlinkerButton Button5("ButtonKey5"); BlinkerSlider Slider1("SliderKey"); BlinkerRGB RGBWS2812("RGBKey"); int openState = 0;/////////////////////////////灯效模式,默认关灯 int freq_flash = 25;/////////////////////////灯效节奏 uint8_t colorR, colorG, colorB, colorW; bool wsState; uint8_t wsMode = BLINKER_CMD_MIOT_DAY; #include #define PIN            13                               /////ws2812 DAT 接的引脚编号,注意开发板不同,请更改 #define NUMPIXELS      32                                ////ws2812 灯数 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);//////////////////////Adafruit_NeoPixel CRGB leds[NUMPIXELS];//////////////FASTLED //////////////////////////////////////颜色写入 void pixelShow() {   pixels.setBrightness(colorW);   for (int i = 0; i < NUMPIXELS; i++) {     pixels.setPixelColor(i, colorR, colorG, colorB);   }   pixels.show(); } /////////////////////////////////////////频率读取 void tip_led() {   digitalWrite(2, HIGH);   delay(50);   digitalWrite(2, LOW);   Blinker.vibrate(); } void slider1_callback(int32_t value) {   tip_led();   Blinker.vibrate();///震动   BLINKER_LOG("get slider value: ", value);   freq_flash = value; } ////////////////////////////////////////////////调色盘 void ws2812_callback(uint8_t r_value, uint8_t g_value, uint8_t b_value, uint8_t bright_value) {   tip_led();   button_clear();   BLINKER_LOG("R value: ", r_value);   BLINKER_LOG("G value: ", g_value);   BLINKER_LOG("B value: ", b_value);   BLINKER_LOG("Rrightness value: ", bright_value);   /////颜色和亮度赋值,但不写入   colorR = r_value;   colorG = g_value;   colorB = b_value;   colorW = bright_value;   openState = 6;   //Text1.print("灯光模式:" , "单颜色"); } void button_clear() {   Button1.print("off");   Button2.print("off");   Button3.print("off");   Button4.print("off");   Button5.print("off");   Button1.color("#008000");   Button2.color("#008000");   Button3.color("#008000");   Button4.color("#008000");   Button5.color("#008000"); } //////////////////////////////////////////////////////////btn1 void button1_callback(const String & state) {   tip_led();   BLINKER_LOG("get button state: ", state);   if (state == BLINKER_CMD_ON) {     BLINKER_LOG("日光 music 模式开启");     tip_led();     button_clear();     Button1.color("#DC143C");     Button1.print("on");     openState = 1;   }   else if (state == BLINKER_CMD_OFF) {     BLINKER_LOG("日光 music 模式关闭!");     tip_led();     button_clear();     Button1.color("#008000");     openState = 0;   } } //////////////////////////////////////////////////////////btn2 void button2_callback(const String & state) {   tip_led();   BLINKER_LOG("get button state: ", state);   if (state == BLINKER_CMD_ON) {     BLINKER_LOG("月光模式开启");     tip_led();     button_clear();     Button2.print("on");     Button2.color("#DC143C");     openState = 2;   }   else if (state == BLINKER_CMD_OFF) {     BLINKER_LOG("月光模式关闭!");     tip_led();     button_clear();     openState = 0;   } } //////////////////////////////////////////////////////////btn3 void button3_callback(const String & state) {   tip_led();   BLINKER_LOG("get button state: ", state);   if (state == BLINKER_CMD_ON) {     BLINKER_LOG("温馨模式开启");     tip_led();     button_clear();     Button3.print("on");     Button3.color("#DC143C");     openState = 3;   }   else if (state == BLINKER_CMD_OFF) {     BLINKER_LOG("温馨模式关闭!");     tip_led();     button_clear();     openState = 0;   } } //////////////////////////////////////////////////////////btn4 void button4_callback(const String & state) {   tip_led();   BLINKER_LOG("get button state: ", state);   if (state == BLINKER_CMD_ON) {     BLINKER_LOG("电脑模式开启");     tip_led();     button_clear();     Button4.print("on");     Button4.color("#DC143C");     openState = 4;   }   else if (state == BLINKER_CMD_OFF) {     BLINKER_LOG("电脑模式关闭!");     tip_led();     button_clear();     openState = 0;   } } //////////////////////////////////////////////////////////btn5 void button5_callback(const String & state) {   tip_led();   BLINKER_LOG("get button state: ", state);   if (state == BLINKER_CMD_ON) {     BLINKER_LOG("电视模式开启");     tip_led();     button_clear();     Button5.print("on");     Button5.color("#DC143C");     openState = 5;   }   else if (state == BLINKER_CMD_OFF) {     BLINKER_LOG("电视模式关闭!");     tip_led();     button_clear();     openState = 0;   } } void dataRead(const String & data) {   BLINKER_LOG("Blinker readString: ", data);   Blinker.vibrate();   uint32_t BlinkerTime = millis();   Blinker.print("millis", BlinkerTime); } uint32_t getColor() {   uint32_t color = colorR 16 & 0xFF;   colorG = color >>  8 & 0xFF;   colorB = color       & 0xFF;   BLINKER_LOG("colorR: ", colorR, ", colorG: ", colorG, ", colorB: ", colorB);   openState = 6;   //pixelShow();   BlinkerMIOT.color(color);   BlinkerMIOT.print(); } void miotMode(uint8_t mode) {   BLINKER_LOG("need set mode: ", mode);   if (mode == BLINKER_CMD_MIOT_DAY) {     // Your mode function     button_clear();     Button1.print("on");     Button1.color("#DC143C");     openState = 1;   }   else if (mode == BLINKER_CMD_MIOT_NIGHT) {     // Your mode function     button_clear();     Button2.print("on");     Button2.color("#DC143C");     openState = 2;   }   else if (mode == BLINKER_CMD_MIOT_COLOR) {     // Your mode function     button_clear();     openState = 6;   }   else if (mode == BLINKER_CMD_MIOT_WARMTH) {     // Your mode function     button_clear();     Button3.print("on");     Button3.color("#DC143C");     openState = 3;   }   else if (mode == BLINKER_CMD_MIOT_TV) {     // Your mode function     button_clear();     Button5.print("on");     Button5.color("#DC143C");     openState = 5;   }   else if (mode == BLINKER_CMD_MIOT_READING) {     // Your mode function   }   else if (mode == BLINKER_CMD_MIOT_COMPUTER) {     // Your mode function     button_clear();     Button4.print("on");     Button4.color("#DC143C");     openState = 4;   }   wsMode = mode;   BlinkerMIOT.mode(mode);   BlinkerMIOT.print(); } void miotBright(const String & bright) {   BLINKER_LOG("need set brightness: ", bright);   colorW = bright.toInt();   BLINKER_LOG("now set brightness: ", colorW);   pixelShow();   BlinkerMIOT.brightness(colorW);   BlinkerMIOT.print();   openState = 6; } void miotColoTemp(int32_t colorTemp) {   BLINKER_LOG("need set colorTemperature: ", colorTemp);   BlinkerMIOT.colorTemp(colorTemp);   BlinkerMIOT.print(); } void miotQuery(int32_t queryCode) {   BLINKER_LOG("MIOT Query codes: ", queryCode);   switch (queryCode)   {     case BLINKER_CMD_QUERY_ALL_NUMBER :       BLINKER_LOG("MIOT Query All");       BlinkerMIOT.powerState(wsState ? "on" : "off");       BlinkerMIOT.color(0);       BlinkerMIOT.mode(0);       BlinkerMIOT.colorTemp(1000);       BlinkerMIOT.brightness(1);       BlinkerMIOT.print();       break;     case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :       BLINKER_LOG("MIOT Query Power State");       BlinkerMIOT.powerState(wsState ? "on" : "off");       BlinkerMIOT.print();       break;     case BLINKER_CMD_QUERY_COLOR_NUMBER :       BLINKER_LOG("MIOT Query Color");       BlinkerMIOT.color(0);       BlinkerMIOT.print();       break;     case BLINKER_CMD_QUERY_MODE_NUMBER :       BLINKER_LOG("MIOT Query Mode");       BlinkerMIOT.mode(0);       BlinkerMIOT.print();       break;     case BLINKER_CMD_QUERY_COLORTEMP_NUMBER :       BLINKER_LOG("MIOT Query ColorTemperature");       BlinkerMIOT.colorTemp(1000);       BlinkerMIOT.print();       break;     case BLINKER_CMD_QUERY_BRIGHTNESS_NUMBER :       BLINKER_LOG("MIOT Query Brightness");       BlinkerMIOT.brightness(1);       BlinkerMIOT.print();       break;     default :       BlinkerMIOT.powerState(wsState ? "on" : "off");       BlinkerMIOT.color(0);       BlinkerMIOT.mode(0);       BlinkerMIOT.colorTemp(1000);       BlinkerMIOT.brightness(1);       BlinkerMIOT.print();       break;   } } /**************************灯光效果程序************************** * ************************************************** * **************************************************/ ////////////////////////////////////////////////彩虹灯 uint32_t Wheel(byte WheelPos) {   WheelPos = 255 - WheelPos;   if (WheelPos < 85) {     return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);   }   if (WheelPos < 170) {     WheelPos -= 85;     return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);   }   WheelPos -= 170;   return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } void rainbow(uint8_t wait) {   uint16_t i, j;   for (j = 0; j < 256; j++) {     for (i = 0; i < pixels.numPixels(); i++) {       pixels.setPixelColor(i, Wheel((i + j) & 255));     }     pixels.show();     delay(freq_flash);   } } //////////////////////////////////////////////////////////////// void colorWipe(uint32_t c, uint8_t wait) {   for (uint16_t i = 0; i < pixels.numPixels(); i++) {     pixels.setPixelColor(i, c);     pixels.show();     delay(wait);   } } void colorScan() {   colorWipe(pixels.Color(255, 0, 0), freq_flash); // Red   colorWipe(pixels.Color(0, 255, 0), freq_flash); // Green   colorWipe(pixels.Color(0, 0, 255), freq_flash);   colorWipe(pixels.Color(0, 255, 255), freq_flash);   colorWipe(pixels.Color(255, 0, 255), freq_flash);   colorWipe(pixels.Color(255, 0, 0), freq_flash); } ///////////////////////////////////FASTLEDS的示例效果 void fadeall() {   for (int i = 0; i < NUMPIXELS; i++) {     leds[i].nscale8(250);   } } void cylon() {   static uint8_t hue = 0;   // First slide the led in one direction   for (int i = 0; i < NUMPIXELS; i++) {     // Set the i'th led to red     leds[i] = CHSV(hue++, 255, 255);     // Show the leds     FastLED.show();     // now that we've shown the leds, reset the i'th led to black     // leds[i] = CRGB::Black;     fadeall();     // Wait a little bit before we loop around and do it again     delay(freq_flash);   }   // Now go in the other direction.   for (int i = (NUMPIXELS) - 1; i >= 0; i--) {     // Set the i'th led to red     leds[i] = CHSV(hue++, 255, 255);     // Show the leds     FastLED.show();     // now that we've shown the leds, reset the i'th led to black     // leds[i] = CRGB::Black;     fadeall();     // Wait a little bit before we loop around and do it again     delay(freq_flash);   } } void setup() {   Serial.begin(115200);   BLINKER_DEBUG.stream(Serial);   LEDS.addLeds(leds, NUMPIXELS);   LEDS.setBrightness(84);   Blinker.begin(auth);   pixels.begin();   Blinker.attachData(dataRead);   BlinkerMIOT.attachPowerState(miotPowerState);   BlinkerMIOT.attachColor(miotColor);   BlinkerMIOT.attachMode(miotMode);   BlinkerMIOT.attachBrightness(miotBright);   BlinkerMIOT.attachColorTemperature(miotColoTemp);   BlinkerMIOT.attachQuery(miotQuery);   pinMode(14, OUTPUT);   digitalWrite(14, HIGH);   pinMode(15, OUTPUT);   digitalWrite(15, HIGH);   Button1.attach(button1_callback);   Button2.attach(button2_callback);   Button3.attach(button3_callback);   Button4.attach(button4_callback);   Button5.attach(button5_callback);   Slider1.attach(slider1_callback);   RGBWS2812.attach(ws2812_callback);   pixels.setBrightness(0);   button_clear(); } ////////////////////以下是灯光效果模式,请自行更改 void mode_1() { cylon(); } void mode_2() {   colorR = 25;   colorG = 0;   colorB = 240;   colorW = 50;   wsState = true;   pixelShow(); } void mode_3() {   colorR = 128;   colorG = 0;   colorB = 128;   colorW = 50;   wsState = true;   pixelShow(); } void mode_4() {   rainbow(freq_flash);   colorW = 50; } void mode_5() {   colorW = 50;   colorScan(); } void loop() {   Blinker.run();   switch (openState)   {     case 0:       wsState = false;       openState = 0;       colorR = 255;       colorG = 255;       colorB = 255;       colorW = 0;       pixelShow();       break;     case 1:       mode_1();       break;     case 2:       mode_2();       break;     case 3:       mode_3();       break;     case 4:       mode_4();       break;     case 5:       mode_5();       break;     case 6:       pixelShow();       break;     default:       break;   } } ```
设计图
原理图
1 /
PCB
1 /
未生成预览图,请在编辑器重新保存一次
ID Name Designator Footprint Quantity
1 SW_SS-12D07_JX SW1 SW_SS-12D07_JX 1
2 WB3S U2 WIFI_BLE-SMD_WB3S 1
3 BL1117-3.3_JX U1 SOT223_JX 1
4 10k/1% R1 R0603 1
5 Red/LED LED1 0603_D_JX 1
6 10μF/10V C2,C1 0603_C_JX 2
7 MINI-USB_JX P1 USB_MINI_B_FE_JX 1
8 3.3K R2,R3,R4 R0603 3
9 1K R7,R8,R9,R10,R5,R6 R0603 6
10 HDR-F-2.54_1x3 H1 HDR-F-2.54_1X3 1
11 AO3400A Q3,Q1,Q2 SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR 3
12 TC5050RGBF08-3CJH-AF53A LED2,LED3,LED4 LED-SMD_6P-L5.0-W5.0-TL_TC5050RGBF08 3
13 HDR-M-2.54_1x4 J1 HDR-M-2.54_1X4 1

展开

工程视频/附件
序号 文件名称 下载次数
1

WeChat_20201206001331.mp4

154
2

WeChat_20201208114440.mp4

75
工程成员
侵权投诉
相关工程
换一批
加载中...
添加到专辑 ×

加载中...

温馨提示 ×

是否需要添加此工程到专辑?

温馨提示
动态内容涉嫌违规
内容:
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 技术支持

support
  • 开源平台公众号

MP