电子说
物联网具有巨大的DIY潜力。有了足够的专业知识和少量廉价的组件,您就可以构建一个复杂的连接设备系统。
有时候,您想要简单的东西。没有钟声或口哨声,只需执行一个任务的按钮即可。如果您曾经使用Amazon Dash按钮对日常家用物品进行重新排序,那么您可能已经熟悉这种情况。
今天,我们将使用NodeMCU制作一个启用Wi-Fi的按钮,并将其编程为使用IFTTT做。..好吧,任何事!如果需要,可以在视频后提供书面说明。
您需要的内容
您将需要:
1 x NodeMCU(ESP8266)板,可在速卖通上以2-3美元的价格购买
1 x按钮
1 x LED(可选)
1 x 220欧姆电阻(可选)
面包板和连接线
用于编程的Micro USB
已安装Arduino IDE的计算机
除了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连接。
下一步,搜索John Romkey的 IFTTTWebhook 并安装最新的版。该库旨在简化向IFTTT发送Webhook的过程。
这就是我们需要的所有准备工作,让我们编写代码!
代码的工作方式
我们将使用 ESP8266WIFI 库建立Wi-Fi连接。 IFTTTWebhooks 库向IFTTT发送请求-在这种情况下,将其发布到Twitter。然后,指示NodeMCU板在不使用时进入睡眠状态以节省电量。
按下按钮时,它将链接 D0 和 RST 针脚。这将重置板,然后再次执行该过程。
本教程中的大多数代码对于初学者来说都足够简单。就是说,如果您是入门者,那么在遵循我们的Arduino初学者指南之后,您会发现它容易理解。
本教程分批遍历代码以帮助您理解。如果您想直接做生意,可以在Pastebin上找到完整的代码。请注意,您仍然需要在此代码中填写Wi-Fi和IFTTT凭据才能使其正常工作!
步骤3:测试深度睡眠
我们将开始创建一个简单的测试以显示深度睡眠的工作原理。在Arduino IDE中打开一个新草图。输入以下两个代码块。
#include
#include
#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();
如果您想知道适合的位置,它应该看起来像
在草图顶部,将 ssid 和 password 变量替换为您的Wi-Fi凭据。保存您的草图并将其上传到板上。
现在,在板启动时,它将返回到设置功能之前尝试连接到Wi-Fi网络。现在,让我们设置IFTTT集成。
步骤6:设置IFTTT集成
IFTTT允许与各种Web服务集成。我们在Wi-Fi PC塔式LED教程中使用了它,以便在收到新电子邮件时发送警报。今天,我们将使用它来按一下按钮发送一条推文。
导航到我的小程序页面,然后选择新小程序
点击 +此并连接到 Webhooks 。选择“接收网络请求” 并命名您的活动。 保持简单!记下事件名称,稍后需要将其添加到NodeMCU代码中。点击“创建触发器” 。
现在选择 +那个。搜索 Twitter 服务并连接到该服务-您需要授权该服务才能发布到您的Twitter帐户。选择“发布推文” 并选择您的消息。
下一个屏幕将要求您查看该小程序。单击完成。就是这样!
步骤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-Fi
IFTTTWebhook 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上已经有大量的家庭自动化小程序。一旦掌握了基础知识,就可以使用几乎任何传感器或开关来触发几乎可以想象的任何服务。
责任编辑:wv
全部0条评论
快来发表一下你的评论吧 !