物联网有着巨大的DIY潜力。有了足够的专门知识和一些廉价的组件,您可以构建一个复杂的连接设备系统。
然而,有时你想要一些简单的东西。没有**或口哨,只有一个按钮,执行一个单一的任务。如果你曾经使用过Amazon的Dash按钮来重新订购日常家居用品,那么你可能已经很熟悉这样的东西了。
今天我们将使用NodeMCU**一个Wi-Fi启用按钮,并将其编程为使用IFTT来完成…好的,任何事情!如果您愿意,请按照视频编写说明。
您需要:
除了NodeMCU,您应该能够在任何Arduino初学者工具包中找到这些部件的大部分。本教程将假设您正在使用可选的LED和电阻器,但它们不是必需的。
这个项目的硬件设置非常简单。根据这个图表来设置你的电路板。
紫色导线将针脚D0连接到按钮的一侧。绿色导线将按钮的另一侧连接到RST引脚。蓝色导线从引脚D1延伸到电阻器和LED。LED的负脚连接到NodeMCU的GND引脚。
当设置试验板时,它应该如下所示:
如果你想知道我是如何让我的LED去接地引脚只使用这些微小的电缆位,我们的快速实验板速成课程应该有助于清理它!检查设置并通过USB将NodeMCU连接到计算机。
在开始编写代码之前,您需要做一些准备。如果还没有,请设置Arduino IDE以识别NodeMCU板。您可以通过“文件”>;“首选项”将其添加到电路板列表中。
您可以在我们的NodeMCU简介文章中找到关于这一步骤的更详细的解释。
此项目需要两个库。导航到“草图”>;“包含库”>;“管理库”。搜索由Ivan Grokhotkov提供的ESP8266WIFI并安装。此库用于与NodeMCU板建立Wi-Fi连接。
接下来搜索johnromkey提供的ifttwebhook并安装最新版本。此库旨在简化向IFTTT发送webhook的过程。
这就是我们所需要的一切准备,让我们来编码吧!
我们将使用ESP8266WIFI库建立Wi-Fi连接。ifttwebhooks库向IFTTT发出请求——在本例中,请求发布到Twitter。然后,指示NodeMCU板在不使用时休眠以节省电源。
当按下按钮时,它将链接D0和RST引脚。这将重置电路板,并且该过程将再次发生。
本教程中的大部分代码对于初学者来说都足够简单。也就是说,如果你刚开始学习,在遵循我们的Arduino初学者指南之后,你会发现它更容易理解。
本教程将分块介绍代码,以帮助理解。如果你想直接开始工作,你可以在Pastebin找到完整的代码。请注意,您仍需要在此代码中填写Wi-Fi和IFTTT凭据,它才能正常工作!
首先,我们将创建一个简单的测试来演示深度睡眠的工作原理。在ArduinoIDE中打开一个新草图。输入以下两个代码块。
#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和wakePin在这里的编号是不同的。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 pin的按钮被按下。
最后,为了进行测试,请将以下内容添加到loop()方法中:
void loop(){ //if deep sleep is working, this code will never run. Serial.println("This shouldn't get printed");}通常,Arduino草图在设置之后会连续运行循环功能。因为我们在安装结束前让电路板进入睡眠状态,所以循环永远不会运行。
保存你的草图并上传到黑板上。打开串行监视器,你会看到“按下按钮”。每次按钮触发,电路板复位,信息再次打印。真管用!
在某些项目中,您可能注意到串行监视器中存在一些无意义的字符。这通常是由于没有将串行监视器设置为与序列号.开始(XXXX)费率。
许多指南建议在这样的项目中以115200的波特率开始串行连接。我尝试了许多组合,它们在串行消息前后都有不同程度的胡言乱语。根据各种论坛帖子,这可能是由于一个错误的董事会或软件兼容性问题。因为它不会对项目造成太大的影响,我选择假装它没有发生。
如果串行监视器有问题,请尝试不同的波特率,看看哪种最适合您。
现在创建一个连接到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"); }}此方法尝试连接到您的网络十次,间隔一秒。连接成功或失败打印到串行监视器。
现在,从未调用connectToWifi()。在“按下按钮”信息和发送电路板进入睡眠状态之间,添加对设置函数的调用。
connectToWifi();如果你想知道它适合什么,它应该是这样的:
在草图顶部,用Wi-Fi凭据替换ssid和密码变量。保存草图并上传到黑板。
现在,当电路板启动时,它将尝试连接到您的Wi-Fi网络,然后返回设置功能。现在,让我们设置IFTTT集成。
IFTTT允许与大量web服务集成。在我们的Wi-Fi PC塔式LED教程中,我们使用它在收到新电子邮件时发送警报。今天我们将用它来发送一条推特在按下一个按钮。
导航到“我的小程序”页面,然后选择“新建小程序”
单击+此并连接到Webhook。选择“接收web请求”,并命名您的事件。简单点!记下事件名称,您需要稍后将其添加到NodeMgu代码中。单击“创建触发器”。
现在选择+那个。搜索Twitter服务并连接到它---您需要授权它发布到您的Twitter帐户。选择“发布tweet”并选择您的信息。
下一个屏幕将要求您查看小程序。单击“完成”。就这样!
回到ArduinoIDE,您需要将IFTTTAPI密钥和事件名称添加到定义的变量中。要查找API密钥,请导航到“我的小程序”,然后选择“服务”选项卡下的“Webhooks”。选择文档以访问密钥。
将密钥和事件名称复制到代码中,替换为它们设置的临时名称。
#define IFTTT_API_KEY "IFTTT_KEY_GOES_HERE"#define IFTTT_EVENT_NAME "IFTTT_EVENT_NAME_HERE"注意,倒逗号必须保留,只替换文本。
在调用connectToWifi()和将线路板发送到休眠状态之间,创建ifttWebHook库对象的实例。在深度睡眠再次开始之前,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在钩子对象上调用trigger会触发IFTTT applet,并应发布到您的Twitter帐户。保存草图并上传。你现在应该有一个功能齐全的tweet按钮。
如果它似乎不起作用,请仔细检查代码和凭据是否有错误。如果你真的陷入困境,从上面得到完整的代码,并将其与你自己的代码进行比较。
这是一个Wi-Fi按钮的基本版本,但有很多方法可以改进。为简单起见,这里使用USB连接供电。电池将使它完全移动,一个案件举行电路将是完美的初学者三维打印项目。
尽管使用深度睡眠,你可能会发现电池会很快耗尽。在这类项目中,有许多Arduino节能技巧可以帮助您。虽然比本教程更难,但如果您从头开始**自己的具有电源意识的Arduino,电池供电的Wi-Fi按钮可能会持续数月!
这个项目将使智能家居应用的远程控制成为完美的选择。IFTTT上已经有相当数量的家庭自动化小程序可用。一旦你掌握了基本知识,你几乎可以使用任何传感器或开关来触发任何你能想到的服务。
图片来源:Vadmary/寄存照片
...芯片进行编程。这种方法非常适合那些希望了解Arduino板如何工作的人,或者需要将硬件安装到特定空间的项目。在这个例子中,独立的Arduino电路被用来控制一个脉冲立方体的LED,你也可以做! ...
...决所有你想知道的关于Echo秀的问题,包括设备是什么,如何设置连接的设备,如何控制智能家居,详细说明技能是什么,常见问题的排除,等等。 ...
... 缺乏本地连接限制了物联网的可能使用。 有限的板载内存会使复杂的程序变得困难。 ...
...些董事会已经产生了影响,但一个问题仍然存在:你应该使用一个真正的Arduino董事会在您的项目?也许不是。这就是原因。 ...
...开始学习编程,我会从头开始学习,以便了解每个部分是如何工作的。这是掌握编码的许多方法之一。 ...
...时自动亮起的灯怎么办?由别人的情绪控制的情绪照明?如何用人工日出的声音慢慢进入白天? ...
...的,因为您可以期望仅此升级就可以显著提高性能。有关如何增压路由器的指南,请参阅此详细指南。 ...
...快和容易。在本文中,我们将详细介绍Blynk是什么,它是如何工作的,并提供两个关于NodeMCU和Raspberry Pi开发板服务不同用途的简短示例项目。 ...
...Instructables用户dmainmon在其带有web界面的ESP8266电动相机中使用的方法: ...