彩灯圣诞树装饰[WiFi控制]

49924年

406

27

简介:照明圣诞树装饰[WiFi控制]

在这个Instructable中,我将描述如何建立一个照明圣诞树装饰,它可以通过WiFi控制。用你最喜欢的浏览器(电脑或智能手机)连接到你的圣诞树装饰。选择颜色,速度和图案。

圣诞树装饰有自己的网络服务器。所有代码都运行在内置的Wemos/ESP8266板上。除此之外,它还需要5伏(USB)电源和WiFi连接。

这指示灯包含不同的步骤。它从三个代码示例开始。第一个例子是使用Neopixel环的Autodesk电路中的简单Arduino草图。优德体育此示例是此构建的基础。下一步是使用WEMOS板的简单Web服务器。第三个代码示例介绍了如何以特定时间间隔执行功能。
在这些编码示例之后,是时候创建设计了。这是基于常规的icosahedron。这是一个完全对称的几何形状,20面。设计是在Fusion 360中创建的,然后使用3D打印机打印。
大会遵循最终代码后。这是来自指示的开头的三个例子的组合。

这种指示是关于创建圣诞树装饰品。但是Web界面不限于圣诞饰品。它可以用于许多其他项目。事实上,可以通过WiFi控制可以由Arduino控制的任何东西。

步骤1:物料准备

所需材料:

  • WEMOS D1 MINI PRO(5美元)或Wemos D1 Mini(3美元)
  • WS2812B LED条带30 /米IP30(30个led 1米3美元)
  • Micro USB电缆(本地商店,约2美元)
  • 试验板线
  • 透明胶(专卖店)
  • 闪光粉(爱好商店)
  • USB电源(如宜家Koppla)或其他5伏电源。

一件圣诞装饰品的材料成本约为10美元。

使用体面的USB电源。LED每次使用60毫安。全电源的20个LED需要1.2安培(6瓦)。我正在使用宜家KopplaUSB电源。它有3个端口,可以在5伏5伏时交付3.2安培。

步骤2:Auto优德体育desk电路:NeoPixel环示例

用Arduino和WS2812 led做东西真的很简单。如果你从未使用过Arduino,它可能看起来有些吓人。一些编程和/或电子经验使它更容易。但其实也没那么难。

如果您想尝试一下,则无需购买Arduino。您可以在其中模拟Arduino的网站。其中一个是优德体育Autodesk电路.我使用了一个新偶联戒指制作了一个Arduino示例。这个像素环示例是这个圣诞装饰品的基础。

代码看起来很简单。但它显示了编码Arduino的许多可能性:

它使用一个外部库(Adafruit NeoPixel)。所以我不用担心改变led的颜色。我所要做的就是使用库函数。

该代码在3个数组中定义了12种颜色的RGB值。这是12种颜色,用于web界面控制led条。

还有一个自定义函数。setColor函数可以从程序中的任何地方调用。

#include  #define num_pixels 16 int d2 = 8;adafruit_neopixel像素(num_pixels,d2,neo_grb | neo_khz800);const int numColors = 12;int R[numColors] = {255,255,227,255,255,128,075,000,127,000,127,255};int G[numColors] = {194,165,066,000,000,000,000,000,255,255,255,255};int B[numColors] ={000,000,052,000,255,128,130,255,212,000,000,000}; / /指定颜色void setcolor(int r,int g,int b){for(int i = 0; i 
        

此代码包含一个具有12种颜色的一个数组(从0到11编号)。我选择了12种颜色,因为最终代码包含每个颜色的一个按钮:

颜色0:琥珀色(FFC200)
颜色1:橙色(FFA500)
颜色2:vermillion(e34234)
颜色3:红色(FF0000)
颜色4:洋红色(FF00FF)
颜色5:紫色(800080)
颜色6:靛蓝色(4B0082)
颜色7:蓝色(0000FF)
颜色8:海蓝宝石(7FFFD4)
颜色9:绿色(00FF00)
颜色10:黄绿色(7FFF00)
颜色11:黄色(ffff00)

如果您喜欢更改RGB值,可以更改颜色。可以找到更多颜色代码维基百科

_______________________________________

对于从未与Arduino一起工作过的人,我可以推荐教程Arduino类

本课程将介绍Arduino的世界。您将学习基础知识,构建您的第一个项目,以及更多内容。每一课都是建立在你的技能之上,并在此过程中注入新的知识和技术。

并且大多数这些类都可以使用Autodw88体育esk电路进行。优德体育

第三步:你好世界

在用ws2812 led编程arduino之后,是时候创建一个简单的web服务器了。这需要一个Wemos(带有ESP8266)板,包含WiFi适配器。Wemos可以通过USB数据线连接到你的电脑上。不需要额外的USB到串行适配器。这是Wemos优于ESP8266-12的优点。

weemos可以使用Arduino软件编程。但它需要增加额外的董事会与董事会经理。这在Wemos文档

完成这些步骤后,就可以在Arduino编程环境中选择一个weemos板。选择Wemos板(+相应的com-port),复制以下代码:

#include  #include  #include  #include  MDNSResponder mdns;//网络凭据const char* ssid = "ssid";Const char* password = "密码";String网页= "

Hello World

";ESP8266WebServer服务器(80);void setup() {Serial.begin(115200);延迟(500);WiFi。开始(ssid、密码);while (WiFi.status() != WL_CONNECTED){延迟(500); Serial.println("."); } Serial.print("IP address: "); Serial.println(WiFi.localIP()); server.on ("/", [](){server.send(200, "text/html", webPage);}); server.begin(); Serial.println("HTTP server started"); } void loop() { server.handleClient(); }

在编译和上传代码之前修改网络凭据。

这是一个非常简单的Web服务器。WEMOS将连接到WiFi网络并仅用一个页面启动Web服务器。使用串行监视器获取Web服务器的IP地址。

第4步:接线

这个说明书需要一些焊接。但这是通过使用WS2812b led带最小化。

焊接Wemos板上的男性头。只使用D2, +5伏特和接地引脚。这意味着头只需要焊接在板的一面。

LED条带上的焊料3面包板电线(接地,信号和+5伏)。

从USB连接器中取出塑料。这种连接器没有空间。将2根电线添加到USB电缆:一到+5和一个到地线。这些用于直接供电LED。别忘了隔离这些电线。

从USB线和led带连接+5伏特线。两根圆线也是一样。连接信号线,从Led带,到Wemos板上的D2引脚。最后连接usb连接器到Wemos板。

Wemos板上的表头没有接地线。这个接地针直接连接到usb连接器。它与附加的接地线相连。

步骤5:定时示例

在我的第一个Arduino neopixel代码示例(NeoPixel环),颜色更改在主循环内进行。这需要主循环延迟,或者颜色的变化将太快。在此延迟期间,WEMOS板才等待,并且不会执行任何其他代码。除了背景过程,例如,处理WiFi网络连接。
最终的产品将运行一个网络服务器来控制led。因此,代码中不应该有等待,因为这会给一个无响应的web界面。

在这个例子中,led是由一个内部定时器控制的。该osTimer由os_timer_setfn函数定义,然后使用os_timer_arm函数武装。使用的1000的值是毫秒。通过使用这个值,Wemos计时器将每秒钟执行一次timerCallback过程。这个过程增加了颜色值,并改变了led的颜色。所有这些动作都是在主循环之外完成的。

注意,osTimer中的代码必须非常短。代码必须在触发下一个计时器之前完成。

#include  #include  #define NUM_PIXELS 20 Adafruit_NeoPixel pixels(NUM_PIXELS, D2, NEO_GRB | NEO_KHZ800);os_timer_t osTimer;const int numColors = 12;int R[numColors] = {255,255,227,255,255,128,075,000,127,000,127,255};int G[numColors] = {194,165,066,000,000,000,000,000,255,255,255,255};int B[numColors] ={000,000,052,000,255,128,130,255,212,000,000,000}; / /指定颜色int vColor = 0;void setColor(int R, int G, int B) {for (int i = 0;我< NUM_PIXELS;我+ +){像素。S.etPixelColor (i, R, G, B); } pixels.show(); } void timerCallback(void *pArg) // interrupt os-timer
{ vColor++; if (vColor>=numColors){vColor=0;} setColor (R[vColor], G[vColor], B[vColor]); } void setup() { pixels.begin(); pixels.setBrightness (16); // reduce power usage pixels.show(); os_timer_setfn (&osTimer, timerCallback, NULL); os_timer_arm (&osTimer, 1000, true); } void loop() { delay (1000); // nothing to do }

这段代码还引入了一个名为setColor的函数。这个函数接受3个值,这些值用来改变所有led的颜色。

第6步:常规icosahedron

圣诞树上有许多不同形状的装饰品。当我在寻找一种设计时,我发现了一些几何形式。有一种几何学引起了我的注意:A正多面体.它们完全对称。这使它成为完美的圣诞装饰。只有五种已知类型:

  1. 四棱锥
  2. 多维数据集(6面)
  3. 八面体(8面)
  4. 十二章(12面)
  5. 二十面体(20侧)

我选择了Icosahedron..它有最多的边数。每边有一个WS2812 LED,共20个。

WS2812 LED带的使用限制了几何形状的尺寸。led之间的距离是1.3英寸(每米30个led)。这等于每个等边三角形的边的上限。在创建了纸上原型后,我想出了一个大约3英寸(75毫米)的尺寸。这为Wemos控制器和20个led提供了足够的空间。

第7步:Auto优德体育desk Fusion 360

画一个正二十面体从每个轴上的3个矩形开始。这些必须金矩形.黄金矩形是指边长符合黄金比例(约为1.618)的矩形。我们可以计算一个对角线为75毫米(3英寸)的黄金矩形的边长。利用毕达哥拉斯定理,给出了65x40毫米的边长。

矩形的每个角都是5个三角形的角。

下一步是创建20个三角形(使用通过3个点的平面)。然后把它们挤压到里面。用这20个三角形创建一个新的第四体。每个三角形都可以调整,这样led就可以放在后面。

所有融合360文件都可以在我的Autodesk驱动器上下载:优德体育二十面体第1部分第2部分

第8步:打印零件

这个设计我已经印了三次了。两次用原上丝(白色),一次用异形丝(蓝色)。

拆卸所有支撑材料。确保led灯能装进洞里。用锋利的刀和砂纸去除所有不规则的地方。它的目的是用闪闪发光的东西覆盖整个圣诞装饰。因此,在最终产品中,任何不规范都是可见的。

步骤9:装配

在粘合LED之前,为LED带的路径画一条线。这条线可能不会越过自己。

从粘合led开始,在大型3D打印部件内部。开始与最后的LED在最后的长条。我用了热熔胶枪。加工时小心弯曲LED条。

在我的第一个版本中,我使用了两个LED条。一个有5个led,一个有15个led。但它是完全可能使用一个单一的LED带20个LED。这样可以节省一些焊接时间。

将+5和地线从LED条带连接到USB电缆。信号电缆连接到WEMOS板上的D2引脚。地面是内部连接的。在关闭圣诞节装饰之前,不要忘记检查LED。

在连接器上涂点胶水,这样就不会松掉了。将Wemos板放置在大型3D打印部件内。为USB电缆的吞吐量留出一些空间,并将所有东西粘在一起。

第10步:WebServer

这个Arduino草图文件包含了一个web服务器和一个weemos板的所有代码。在上传代码之前修改“ssid”和“password”变量。

关于代码

代码的某些部分需要一些解释:

#include  #include  #include  #include  #include  #include  .h

在这个Arduino草图中使用的所有库。

#define num_pixels 20 adafruit_neopixel像素(num_pixels,d2,neo_grb | neo_khz800);

这里有20个led灯。这些led连接到Wemos板上的D2引脚。

int R[13] = {255,255,227,255,255,128,075,000,127,000,127,255,000};int G[13] = {194,165,066,000,000,000,000,000,000,255,255,255,000};int B[13] = {000,000,052,000,255,128,130,255,212,000,000,000,000};

这些是定义的12种颜色(颜色为0到11),这些颜色用于LED。并且相应的十六进制值用于按钮。此阵列中有13个值。数组中的最后一个值将LED关闭(#000000 =黑色)。如果需要,您可以更改这些颜色。

String ButtonColor [2] = {“白色”,“黑色”};Boolean ColorState [13] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1。//初始颜色

所有12个按钮都有一个“状态”。当按钮的值为“True”时,led会显示相应的颜色。按下一个按钮,这个按钮的状态就会改变。这也改变了这个按钮的文本颜色(例如,从黑色[打开]到白色[关闭])。

int waitTimes[16]={50, 100, 150, 200, 250, 500, 750, 1000, 1500, 2000,…int waitTime = 5;/ /默认值

有两个按钮来改变计时器的值(“更快”和“更慢”)。waitTime的默认值是5。这个值提供了一个500毫秒的定时器间隔。

int nextColor (int lastColor) {foundColor = numColors;//没有找到任何返回值countColors = 0;// count循环内的搜索次数do {currentColor += 1;countColors + = 1;} if (ColorState[currentColor]) {foundColor=currentColor;}} while (currentColor != lastColor && foundColor= = numColors && countColors < numColors+1);返回(foundColor);}

这个函数使用colorState数组找到要显示的下一种颜色。它从数组位置开始,编号为lastColor。并返回值为1的colorState数组中的下一个索引值。

例如:下面的数组已关闭颜色2-7(白色文本)。执行这个值为0的函数将返回1。使用这个值为1的函数将返回8。这是下一个具有colorState“True”的颜色。

颜色0:琥珀色(FFC200)
颜色1:橙色(FFA500)
颜色2:vermillion(e34234)
颜色3:红色(FF0000)
颜色4:洋红色(FF00FF)
颜色5:紫色(800080)
颜色6:靛蓝色(4B0082)
颜色7:蓝色(0000FF)
颜色8:海蓝宝石(7FFFD4)
颜色9:绿色(00FF00)
颜色10:黄绿色(7FFF00)
颜色11:黄色(ffff00)

颜色总是按照固定的顺序显示。当所有12种颜色都关闭时,所有led都关闭(值000000)。

// interrupt os-timer void timerCallback(void *pArg) if (!buttonSparkle) {// Sparkle Off = Blink} else {// Sparkle}

有2种操作模式:闪闪发光和闪烁。它们每个都有一个不同的代码路径在OS计时器内。

闪烁模式具有最简单的代码。通过调用NextColor函数,它获得了下一个颜色。然后所有LED颜色都更改为此颜色。

闪闪发光模式与很多不同。它始终以ColorState数组中的第一个可用颜色开头。然后调用每个LED的NextColor函数。增加起始LED值,给出了闪闪发光的效果。

void showpage(){webpage + =“

<按钮样式= \”背景:#ffc200; webpage + =“<按钮样式=“背景:#ffa500; ...网页+ =” <按钮样式=“背景:#e34234; ...

此功能显示/刷新网页。此草图中只有一个网页。按钮颜色是硬编码的。这些颜色与R-G-B阵列匹配。

void setup(void){server.on(“/”,[](){showpage();});server.on(“/ socketamb”,[](){colorstate [0] =!colorstate [0]; showpage();});server.on(“/ socketora”,[](){colorstate [1] =!colorstate [1]; showpage();});server.on(“/ socketver”,[](){colorstate [2] =!colorstate [2]; showpage();});

设置部分包含启动Wemos后第一个执行的代码。它初始化新像素,WiFi连接,操作系统定时器和web服务器。
按此页面上的按钮会导致执行一些代码。例如:网页(琥珀色)上的第一个按钮具有引用(HREF)到“SocketAmb”。按此按钮执行“socketamm”的服务器中的代码。这段代码在阵列中改变了第一个颜色的ColorState(这是琥珀色)。

LED颜色通过定时功能改变。颜色不会立即改变。

void loop(void) {server.handleClient();}

主循环中唯一的是要处理Web服务器。所有其他处理都是通过定时器函数完成的。

第11步:没有WiFi版本

下面的Wemos代码可以作为一个没有WiFi的圣诞装饰的例子。

这段代码可以使用arduino,而不是weemos (ESP8266)。arduino代码可在circuits.io(WS2812矩阵的例子)。代码中的主要区别是端口名(端口8而不是D2)。

#include  #define NUM_PIXELS 20 Adafruit_NeoPixel pixels(NUM_PIXELS, D2, NEO_GRB | NEO_KHZ800);int R[14] = {255,255,227,255,255,128,075,000,127,000,127,255,000,255};int G[14] = {194,165,066,000,000,000,000,000,000,255,255,255,255,000,255};int B[14] = {000,000,052,000,255,128,130,255,212,000,000,000,255};int NUM_ROWS = 20;/ /领导01 02年03 04 05 06 07年08年09年10 11 14 13 14 15 16 17 18 19 20 int ColorMatrix[20][20] ={{13、8、7、8、7、7、7、7、7、7、8、7、7、7、7、7、7、7、7、7},{8 7,13日,6、7、7、7、7、7、7、6、7、7、7、7、7、7、7、7、7},{7、7、13、7、8、7、7、7、7、8、7、8、7、7、7、7、7、7、7、7},{7、7、7、7、6、7、7、7、8、13、7、6、7、7、7、7、7、7、7,7},{7、7、7、7、7、8、7、7、13日,7日,7日,7日,8日,7日,7日,8日7日7日7日7},{7、7、7、7、7、6、7、7、7、7、7、7、6、7、7、13、8、7、7、7},{7、7、7、7、7、7、8、7、7、7、7、7、7、8、7、7、13、8、7、7},{7、7、7、7、7、7、6、7、7、7、7、7、7、6、7、7、7、13日8日7},{7、7、7、7、7、7、7、8、7、7、7、7、7、7、8、7、7、7、13、8},{8、7、7、7、7、7、7、6、7,7、7、7、7、7、6、7、7、7、7、13},{13、8、7、8、7、7、7、7、7、7、8、7、7、7、7、7、7、7、7、7},{8 7,13日,6、7、7、7、7、7、7、6、7、7、7、7、7、7、7、7、7},{7、7、13、7、8、7、7、7、7、8、7、8、7、7、7、7、7、7、7、7},{7、7、7、7、6、7、7、7、8、13、7、6、7、7、7、7、7、7、7、7},{7、7、7、7、7、8、7、7、13日,7日,7日,7日,8日,7日,7日,8日7日7日7日7},{7、7、7、7、7、6、7、7、7、7、7、7、6、7、7、13、8、7、7、7},{7、7、7、7、7、7、8、7、7、7、7、7、7、8、7、7、13、8、7、7},{7、7、7、7、7、7、6、7、7、7、7、7、7、6、7、7、7、13日8日7},{7、7、7、7、7、7、7、8、7、7、7、7、7、7、8、7、7、7、13、8},{8、7、7、7、7、7、7、6、7、7、7、7、7、7、6、7、7、7、7、13}};int brightValue = 10; int brightMax = 16; // brightness (1..16) void setup(void) { pixels.begin(); } void loop(void) { for (int j = 0; j < NUM_ROWS; j++) { for (int i = 0; i < NUM_PIXELS; i++) { pixels.setPixelColor (i, R[ColorMatrix [j][i]]*brightValue/brightMax, G[ColorMatrix [j][i]]*brightValue/brightMax, B[ColorMatrix [j][i]]*brightValue/brightMax); } pixels.show(); delay (50); } }

LED的顺序取决于胶合的顺序。我的装饰有以下命令:

  • 上5个led: 4,5,6,7,8(逆时针方向)。
  • 下5个led: 11、12、13、14、15(逆时针方向)
  • 中间10个led: 1、2、3、10、9、16、17、18、19、20(顺时针)

ColorMatrix中的数字对应于R / G / B颜色(参见颜色的第一个示例)。有20行具有20个LED颜色。主循环从第一行开始(这是代码中的行号为零)。并将20值写入LED条带。展示功能更改颜色。

然后代码等待50毫秒,在继续矩阵中的下一行之前。在这个例子中没有定时器。这样就可以用arduino来执行这段代码。

第12步:装饰

最后一步是装饰圣诞装饰品。首先去除多余的胶水和其他不平整的地方。

它的目的是用闪闪发光的东西覆盖整个圣诞装饰。而且,LED。这些提供足够的光以保持可见。

完全用胶水覆盖3D印刷品。使用透明胶水质量良好。撒上整个装饰品上的闪光尘埃。使用盒子收集过多的闪光。可以重复使用此闪光。继续,直到整个装饰覆盖着闪光。

第13步:圣诞快乐

在这最后一步,我祝大家圣诞快乐。

GO.S.S.E.一个D.E.m一种

物联网建筑商比赛

三等奖
物联网建筑商比赛

现在设计:2016 3D设计大赛

第四名
现在设计:2016 3D设计大赛

Make it Glow Contest 2016

参加了
Make it Glow Contest 2016

2人制作了这个项目!

建议

  • 锡箔速度挑战

    锡箔速度挑战
  • 让它发光比赛

    让它发光比赛
  • 首次作家大赛

    首次作家大赛

27讨论

0.
JeanF10

提示1年前

非常好的项目,我喜欢制作它!
通过使用ESP8266HTTPUpdateServer类与ESP8266WebServer类一起实现web浏览器的更新;)

0.
Wesley35601.

3年前

无论如何你可以上传非WiFi装饰品的代码?我有一个没有WiFi的Arduino纳米板,我想使用,可能有一个无限的循环。任何帮助都会有巨大的,我是新的,对编码不太了解。

0.
Laurentm.

3年前

嗨@gosse,我想知道如果你在闪光的顶部喷涂了什么,所以它无处不在,如果是的话,是什么?

我发现我的闪光片到处都是…

谢谢

0.
pocketlight

3年前

在一阵挠头之后,我成功了。又累又闹不是最好的。不管怎样,我现在在测试面包板时遇到的唯一问题是,它会闪烁几秒钟,然后停止20-30秒,然后又开始闪烁。有些按钮似乎也没有做很多…?我想知道我是否犯了一个错误,因为你提到的一些库在通过Arduino SDK app安装时有多个选择。

0.
Numbstar

4年前

另一个问题……我点的是WS2812B LED条带30 /米IP30/你的列表。你说你用了20个LED灯。你是说你把最后10条剪掉了吗?

0.
gjansen

4年前回复

是的,或者你改变30个发光二极管的代码,用30个发光二极管做一个圣诞装饰品

0.
gjansen

4年前

这很棒,但我错过了Android的程序,或者我正在看它。

0.
高斯Adema

4年前回复

所有代码都在圣诞装饰品内运行。WEMOS板上有一个Web服务器。您可以使用最近的任何浏览器选择颜色。

0.
格里龙

4年前回复

你是如何控制多个饰品的,比如在你的第一个视频?

0.
高斯Adema

4年前回复

蓝色(左侧)包含没有WiFi的代码。另一个具有WiFi启用。只有一个由视频中的WiFi控制。另一个(右侧)使用无限循环,但是启用了WiFi。

0.
Numbstar

4年前回复

我知道这些有wifi和USB线,你可以用它挂在树上....它能通过wifi编程吗?

0.
gjansen

4年前

是的,它有效,现在我知道每个bal当然都有自己的ip。

0.
高斯Adema

4年前回复

很高兴看到你已经用个人WS2812 LED制作了这个。我仍然有25个,但我用了这个指示的LED条带。我认为没有人会为圣诞树装饰焊接60根电线。

0.
Numbstar

4年前

我找不到Wemos mini D1Pro和非专业的区别…任何见解都会有帮助。


我打算今年建几座这样的房子作为明年的礼物。

0.
etaiNET

4年前

很好!

我喜欢它的多种想法。我在三场比赛中都投了票!优德娱乐


荣誉!

0.
TwoMonocles

4年前

这看起来很棒。带来许多想法。感谢分享!

0.
jlaureys.

4年前

伟大的......最后我是一场音乐会,我们有一个改变的手镯:颜色,我不知道它是如何工作的,但现在我知道它......我要试试这个......

0.
rmahna2.

4年前

优秀的项目,有大量的机械,电子和草图的细节。

有一个链接到融合360“二十面体,第一部分和第二部分”链接的问题。“二十面体”是好的。“第一部分”也指向“二十面体”,而“第二部分”实际上指向“第一部分”。没有“第二部分”的链接。

你得到了我的选票