物联网具有巨大的DIY潜力。有了足够的专业知识和少量廉价的组件,您就可以构建一个复杂的连接设备系统。
有时候,您想要简单的东西。没有钟声或口哨声,只需执行一个任务的按钮即可。如果您曾经使用Amazon Dash按钮对日常家用物品进行重新排序,那么您可能已经熟悉这种情况。
今天,我们将使用NodeMCU制作一个启用Wi-Fi的按钮,并将其编程为使用IFTTT做...好吧,任何事!如果需要,可以在视频后附上书面说明。
所需条件
您将需要:
除了NodeMCU,您应该能够找到其中的大多数任何Arduino入门套件中的零件。本教程将假定您使用的是可选的LED和电阻,但不是必需的。
第1步:设置电路
此项目的硬件设置非常简单。根据此图设置您的电路板。
紫色线将引脚D0 连接到按钮的一侧。绿线将按钮的另一端连接到 RST引脚。蓝色导线从引脚D1 连接到电阻器和LED。 LED的负极连接到NodeMCU的 GND引脚。
设置试验板后,其外观应类似于:
如果您想知道我如何仅使用这些微小的电缆将LED接地,那么我们的快速面包板崩溃过程应该有助于清除它!检查设置并通过USB将NodeMCU连接到计算机。
步骤2:设置IDE
在进行编码之前,您需要做一些准备。如果尚未安装,请设置Arduino IDE以识别您的NodeMCU板。您可以通过文件>首选项将其添加到板列表中。
您可以在我们的NodeMCU简介文章中找到有关此步骤的更详细说明。
此项目需要两个库。导航到草图>包含库>管理库。搜索Ivan Grokhotkov的 ESP8266WIFI 并将其安装。该库是为与NodeMCU板建立Wi-Fi连接而编写的。
这就是我们需要的所有准备工作,让我们编写代码!
代码将如何工作
我们将使用 ESP8266WIFI 库建立Wi-Fi连接。 IFTTTWebhooks 库向IFTTT发送请求-在这种情况下,将其发布到Twitter。然后,指示NodeMCU板在不使用时进入睡眠状态以节省电量。
按下按钮时,它将链接 D0 和 RST 针脚。这将重置板,然后再次执行该过程。
本教程中的大多数代码对于初学者来说都足够简单。就是说,如果您是入门者,那么在遵循我们的Arduino初学者指南之后,您会发现它容易理解。
本教程分批遍历代码以帮助您理解。如果您想直接做生意,可以在Pastebin上找到完整的代码。请注意,您仍需要在此代码中填写Wi-Fi和IFTTT凭据才能使其正常工作!
步骤3:测试深度睡眠
首先,我们将创建一个简单的测试以显示深度睡眠的工作原理。在Arduino IDE中打开一个新草图。输入以下两个代码块。
#include <IFTTTWebhook.h>#include <ESP8266WiFi.h>#define ledPin 5 #define wakePin 16#define ssid "YOUR_WIFI_SSID"#define password "YOUR_WIFI_PASSWORD"#define IFTTT_API_KEY "IFTTT_KEY_GOES_HERE"#define IFTTT_EVENT_NAME "IFTTT_EVENT_NAME_HERE"
在这里,我们包括我们的库,并定义了我们在草图中需要的一些变量。您会注意到,与上面的Fritzing图相比,此处的ledPin和akePin编号不同。 NodeMCU与Arduino开发板具有不同的引脚排列。不过,由于这个方便的图表,这不是问题:
现在创建一个设置函数:
void setup() { Serial.begin(115200); while(!Serial) { } Serial.println(" ");// print an empty line before and after Button Press Serial.println("Button Pressed"); Serial.println(" ");// print an empty line ESP.deepSleep(wakePin); }
在这里,我们设置了串行端口,并使用while循环等到它开始。由于此代码将在按下重置按钮后触发,因此我们将“已按下按钮" 打印到串行监视器。然后,我们告诉NodeMCU进入深度睡眠状态,直到按下连接 wakePin 和 RST 引脚的按钮。
最后,为了进行测试,将此添加到您的 loop()方法:
void loop(){ //if deep sleep is working, this code will never run. Serial.println("This shouldn't get printed");}
通常,Arduino草图在设置后会连续运行循环功能。由于我们在设置结束之前就将电路板送入睡眠状态,因此循环永远不会运行。
保存您的草图并将其上传到电路板上。打开串行监视器,您应该看到“已按下按钮"。每次按钮触发时,电路板都会复位,并且消息会再次打印。
在某些项目中,您可能已经注意到串行监视器中的一些废话字符。这通常是由于未将串行监视器设置为与 Serial.begin(XXXX)速率相同的波特率。
许多指南建议以波特率启动串行连接115200这样的项目。我尝试了许多组合,在串行消息前后,它们都有不同程度的乱码。根据各种论坛的帖子,这可能是由于板故障或软件兼容性问题造成的。因为它不会严重影响项目,所以我选择假装它没有发生。
如果您在串行监视器上遇到问题,请尝试使用不同的波特率,看看哪种最适合您。
第4步:连接到Wi-Fi
现在创建一个用于连接到Wi-Fi网络的功能。
void connectToWifi() { Serial.print("Connecting to: SSID NAME"); //uncomment next line to show SSID name //Serial.print(ssid); WiFi.begin(ssid, password); Serial.println(" ");// print an empty line Serial.print("Attempting to connect: "); //try to connect for 10 seconds int i = 10; while(WiFi.status() != WL_CONNECTED && i >=0) { delay(1000); Serial.print(i); Serial.print(", "); i--; } Serial.println(" ");// print an empty line //print connection result if(WiFi.status() == WL_CONNECTED){ Serial.print("Connected."); Serial.println(" ");// print an empty line Serial.print("NodeMCU ip address: "); Serial.println(WiFi.localIP()); } else { Serial.println("Connection failed - check your credentials or connection"); }}
此方法尝试连接到您的网络十次之间。连接成功或失败会打印到串行监视器。
步骤5:调用连接方法
现在,从不调用 connectToWifi()。在“已按下按钮"消息之间将呼叫添加到您的设置功能,并使电路板进入睡眠状态。
connectToWifi();
如果您想知道这适合什么位置,它应该看起来像这样:
现在,当主板启动时,它将尝试连接到Wi-Fi网络,然后返回设置功能。现在,让我们设置IFTTT集成。
步骤6:设置IFTTT集成
IFTTT允许与各种各样的Web服务集成。我们在Wi-Fi PC塔式LED教程中使用了它,以便在收到新电子邮件时发送警报。今天,我们将使用它来按一下按钮发送一条推文。
导航到我的小程序页面,然后选择新小程序
点击 +此并连接到 Webhooks 。选择“接收网络请求" 并命名您的活动。 保持简单!记下事件名称,稍后需要将其添加到NodeMCU代码中。单击“创建触发器" 。
步骤7:将IFTTT凭证添加到代码中
返回Arduino IDE,您需要添加IFTTT API您定义的变量的键和事件名称。要查找API密钥,请导航至我的小程序,然后在服务标签下选择 Webhooks 。选择文档来访问密钥。
将密钥和事件名称复制到代码中,替换为其设置的临时名称。
#define IFTTT_API_KEY "IFTTT_KEY_GOES_HERE"#define IFTTT_EVENT_NAME "IFTTT_EVENT_NAME_HERE"
注意,反斜杠必须保留,仅替换文本即可。
在调用 connectToWifi()并使开发板进入睡眠状态之间,创建IFTTTWebhook库对象的实例。该LED会在深度睡眠再次开始之前发出任务完成的信号。
//just connected to Wi-FiIFTTTWebhook hook(IFTTT_API_KEY, IFTTT_EVENT_NAME);hook.trigger();pinMode(ledPin, OUTPUT);digitalWrite(ledPin, HIGH); delay(200); digitalWrite(ledPin, LOW); //now sending board to sleep
hook 对象上的调用触发器会触发IFTTT小程序,并应发布到您的Twitter帐户。保存您的草图并上传。现在,您应该有一个功能齐全的推文按钮。
如果它似乎不起作用,请仔细检查代码和凭据,以防出现错误。如果您确实遇到困难,请从上方获取完整的代码,然后将其与您自己的代码进行比较。
完成!您如何进一步改进?
这是Wi-Fi按钮的基本版本,但是有很多方法可以对其进行改进。为简单起见,此处使用USB连接供电。电池将使它完全可以移动,而装有电路的盒子将是完美的初学者3D打印项目。
尽管使用了深度睡眠,您可能会发现电池很快就会用完。有许多Arduino省电技巧可帮助此类项目。虽然比本教程要难得多,但是如果您从头开始制作自己的节能意识的Arduino,那么电池供电的Wi-Fi按钮可能会持续数月!
该项目将是智能遥控器的完美之选。家庭应用程序。 IFTTT上已经有大量的家庭自动化小程序。一旦掌握了基础知识,就可以使用几乎任何传感器或开关来触发几乎可以想象的任何服务。
图片来源:Vadmary / Depositphotos