自隐藏在桌子下方的灰色塑料塔楼以来,台式PC塔楼已经走了很长一段路。除具有不同功能的机箱外,PC机箱也逐渐发展出一种美学感,玻璃面板自豪地展示了组件,强大的未来派设计成为所有傲慢怪胎桌子上的焦点。
LED装置正变得越来越流行比较普遍;普遍上。一条简单的 12v RGB 条带可以每米低至1美元的价格购买,并且可以很好地照亮箱子的内部(以及几乎所有其他东西)。
但是,我们想做些比这更特别的事情!今天,我们将使用像素LED来创建Wi-Fi可控的箱体照明,并带有自定义的如果那么那么(IFTTT)通知。整个系统使用塔内的备用Molex连接器供电,使其完全独立。最棒的是,整个项目的制作成本不到10美元。
本教程可通过下面的视频形式获得,或者继续阅读书面版本。
大脑发光
我们将为该项目使用可单独寻址的LED。有时称为 Neopixels ,有多种模型可供选择。此处使用的LED来自 WS2812B 灯带,每米约4美元。
我们将使用 NodeMCU 板进行控制。尽管您可以将任何Arduino兼容板与Wi-Fi结合使用,但NodeMCU作为Arduino杀手已成为我们的最爱。
您需要什么
此列表中唯一与众不同的是 Molex 连接器。如今,许多PC所有者完全不使用CD驱动器,尽管仍然为他们提供了电源。我们可以利用这些备用电源线来发挥我们的优势。我可以从旧的磁盘驱动器上挽回我的母连接器,尽管它们的价格仅为0.30美元。
构建电路
为避免不必要的打扰,我们将测试一下使用外部电源进行设置。像这样设置面包板。
如果这是您首次设置此类LED,我建议您仔细阅读我们的深入指南,以首先将这些灯条与Arduino一起使用。
该开关仅使NodeMCU脱离电路。在此构建中,我实际上将使用一个简单的断路器来代替开关。它的功能是允许我们通过USB连接时隔离板的 VIN 引脚。虽然我们的LED将消耗的功率相对较小,但最好避免通过USB拉动过多的功率。
一旦安装好面包板,其外观应如下所示:
在我的示例中,电容器和电阻器已经在原型板上使用,尽管电路是完全相同的,但电路是完全相同的。
现在我们有了硬件设置,让我们创建代码。
操作的大脑
您将使用Arduino IDE编码NodeMCU。在此示例中,我们将设置两种操作模式,一个主开关,以及在收到电子邮件时的通知信号。我们将使用物联网设备的Web服务Blynk与我们的开发板进行通信。
如果您以前从未使用过Blynk入门文章,请确保您阅读了该文章。
在Blynk应用中,设置一个新项目,然后选择NodeMCU作为您的板。授权码将发送到您在Blynk注册的电子邮件地址。添加 3个按钮和 3个滑块。
这些按钮和滑块应设置为向虚拟引脚V0-V5发送值。 “测试"按钮将立即测试我们的电子邮件通知。标记其他两个按钮电源和自动/手动或类似名称,这三个滑块分别用于红色,绿色和 Blue 。
现在打开Arduino IDE。您将需要Blynk和FastLED库用于该项目,因此请确保已安装。如果您刚开始使用Arduino IDE,请查阅我们的Arduino初学者指南。
我们将在这里将代码分解成小块,尽管如果您只想下载完整的代码,则可以找到
如果要决定这样做,请确保在脚本中添加自己的Wi-Fi详细信息,授权代码以及相关的NodeMCU引脚和LED数量。如果您刚刚开始学习编程,那么我将从头开始进行学习,以了解每个部分的工作方式。这是掌握编码的多种方法之一。
创建一个新草图并用适当的名称保存。确保从工具>面板和工具>端口菜单中选择正确的板和端口。首先包括相关的Blynk和FastLED命名空间:
#define BLYNK_PRINT Serial#include <ESP8266WiFi.h>#include <BlynkSimpleEsp8266.h>#include "FastLED.h"
下一步,为FastLED添加一些定义:
//---FastLED definitions and CRGB---#define LED_PIN 3 // GPIO pin for RGB LEDs.#define NUM_LEDS 44 // Number of LEDs connected.#define BRIGHTNESS 64 // Default LED brightness.#define LED_TYPE WS2812B#define COLOR_ORDER GRBCRGB leds[NUM_LEDS];
接下来,我们将为RGB值声明变量,即自动/手动模式,以及我们的主开关。我们还将为以后将使用的FastLED预设添加所需的基础颜色值。
//---variables for our RGB values (0-1023) ---int r = 500;int g = 500;int b = 500;//---variables for On/Off, and Auto/Manual toggleint masterSwitch = 1;int autoMode = 1;//--- int/byte for automatic hue incrementation---uint8_t gHue = 0; // rotating "base color" used by many of the patterns
添加Blynk详细信息时,请确保在此处填写您自己的Wi-Fi详细信息:
//---Blynk auth code and wifi details---char auth[] = "YourAuthCode";//Blynk authorisationchar ssid[] = "YourWifiName";char pass[] = "YourWifiPassword";
我们使用设置功能将LED添加到FastLED,并与Blynk建立通信。
void setup() { // power-up safety delay delay(3000); Serial.begin(9600); //--- add the LEDS to FastLED and set the brightness--- FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalSMD5050); FastLED.setBrightness(BRIGHTNESS); #define FRAMES_PER_SECOND 120 //---start communication with the Blynk server --- Blynk.begin(auth, ssid, pass);}
在Loop函数中使用if语句根据您所处的模式进行不同的操作。
void loop() { Blynk.run(); if(masterSwitch == 0) { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB::Black; FastLED.show(); delay(30); } } if(autoMode == 0 && masterSwitch == 1) { for (int i = 0; i < NUM_LEDS; i++){ leds[i] = CRGB(r, g, b); FastLED.show(); delay(30); } } if(autoMode == 1 && masterSwitch == 1) { fill_rainbow( leds, NUM_LEDS, gHue, 7); // send the 'leds' array out to the actual LED strip FastLED.show(); // insert a delay to keep the framerate modest FastLED.delay(1000/FRAMES_PER_SECOND); EVERY_N_MILLISECONDS(20) { gHue++; // slowly cycle the "base color" through the rainbow } }}
现在,根据您在Blynk应用中选择的内容,使用 BLYNK_WRITE 函数更改这些变量:
//---Master On/Off---BLYNK_WRITE(V0) { masterSwitch = param.asInt();}//--- Red slider value---BLYNK_WRITE(V1) { r = param.asInt();}//--- Green slider value---BLYNK_WRITE(V2) { g = param.asInt();}//--- Blue slider value---BLYNK_WRITE(V3) { b = param.asInt(); }//--- Toggle Auto/Manual Mode ---BLYNK_WRITE(V4) { autoMode = param.asInt();}
最后,创建一个函数导致一连串的红色指示灯用作您的电子邮件通知。此功能旨在触发其他任何事件,这意味着即使当前灯光不亮,您也始终会收到通知。
//---Email notification light---BLYNK_WRITE(V5) { int g = param.asInt(); if(g == 1) { for(int a = 0; a < 10 ; a++) { for (int i = 0; i< NUM_LEDS; i++) { leds[i] = CRGB(1023, 0, 0); FastLED.show(); delay(10); FastLED.clear(); delay(10); } } }}
一旦有了完整的代码,请使用开关/电路断路器将NodeMCU与电路隔离,然后通过USB插入。将草图上载到板上。上传后,断开USB电缆的连接,然后连接5v电源。一切正常,LED灯带应以自动模式启动,这是FastLED的 fill_rainbow 模式。您可以使用“测试"按钮来测试通知信号。
正如您在此处看到的那样,我将LED大致放在机箱的侧面,这样我就知道需要多少。在我的情况下为44,尽管我使用的是迷你塔,所以您也许可以使用更多的塔。只需确保考虑到您使用的LED的功耗,以及您的PC电源可以提供多少。
配置IFTTT
我们将使用 IFTTT Gmail集成以触发我们的通知顺序。如果您以前从未使用过IFTTT,那么您会惊讶于可以自动执行自己喜欢的网络应用程序的众多方法。
设置一个新的applet。对于“此",从 Gmail 频道中选择收件箱中的任何新电子邮件。对于“那个",选择 Maker Webhooks 和提出Web请求。
URL部分是我们称为通知图钉的位置。您将需要修改URL才能使用您的项目。格式为 http:// BlynkIpAddress / YourAuthCode / pin / V5 。您可以通过在命令提示符下键入 ping blynk-cloud.com 来找到Blynk ip。
选择 PUT 作为方法,并以 application / json 作为内容类型。最后,将 [“ 1"] 添加到 Body 部分,然后单击 Create Action 。
现在,每次电子邮件到达与IFTTT关联的Gmail地址的收件箱中,它将向Blynk服务器上的虚拟Pin 5发送“ 1"消息,这将触发我们的通知。尝试给自己发送电子邮件进行测试。请耐心等待,IFTTT可能需要一些时间!
现在,您可以根据需要摆脱Blynk应用程序中的“测试"按钮。
将它们放在一起
现在我们已经对所有内容进行了测试,现在该完成并安装硬件了。将项目从面包板移动到原型板上。如果您不熟悉焊接,并且正在寻找一些提示,请查阅我们的焊接指南。
在将Molex连接器连接到板上之前,请注意要使用的引脚。来自PC电源的公连接器将具有四根电缆。黑色的两条电缆是公共接地电缆,黄色的电缆是+ 12v,红色的电缆是+ 5v。确保将母连接器的相应引脚连接到板上。我选择只连接两个插脚,以避免意外炸开我的电路板和LED!
我决定在电路板和LED之间连接杜邦电缆,因此仍可以完全卸下PC机壳的侧面,而不必卸下原型板。我建议您先将LED放在外壳上,然后用胶带将其固定,以确保在关闭时它们能正确装入外壳内。
注意:当您将LED灯条焊接在一起时,数据线需要全部沿相同方向流动。
最后,将原型板安装到PC塔中。由于这是我的临时搭建物,因此我选择将板子的背面绝缘,然后将其拉链绑在我的箱子的背面。但是,您决定安装该板,请注意不要造成任何短路,并请注意内部组件上的静电危险。
开明
一切都很好,您应该拥有功能齐全的Wi-Fi供电的指示灯,并具有自动的电子邮件通知功能。现在您已经有了该系统,可以使用板上的kill开关,以便通过USB安全地插入NodeMCU并更改代码。您可以尝试添加与IFTTT集成的另一个通知(例如,在Twitter或Facebook上提到蓝灯),或尝试在FastLED库中使用自定义设置以使您的灯稍微动一下。
具有您将LED安装到PC塔中了吗?您是否为他们设置了任何出色的自动化功能?在下面的评论部分中,让我们了解您的项目和计划!
图片来源:David Brown / Flickr