怎样使用ESP8266制作自己的Wi-Fi连接按钮

电子说

1.2w人已加入

描述

物联网具有巨大的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:设置电路

此项目的硬件设置非常简单。

ESP8266

紫色线将引脚D0 连接到按钮的一侧。绿线将按钮的另一端连接到 RST引脚。蓝色导线从引脚D1 连接到电阻器和LED。 LED的负极连接到NodeMCU的 GND引脚。

设置试验板后,其外观应类似于:

ESP8266

如果您想知道我是如何仅使用这些细小的电缆将我的LED接地,那么我们的快速面包板崩溃过程应该有助于清除它!检查设置并通过USB将NodeMCU连接到计算机。

步骤2:设置IDE

在进行编码之前,您需要做一些准备。如果尚未安装,请设置Arduino IDE以识别您的NodeMCU板。您可以通过文件》首选项将其添加到板列表中。

ESP8266

您可以找到有关此步骤的更详细说明在我们的NodeMCU简介文章中。

该项目需要两个库。导航到草图》包含库》管理库。搜索Ivan Grokhotkov的 ESP8266WIFI 并将其安装。编写该库是为了与NodeMCU板建立Wi-Fi连接。

ESP8266

下一步,搜索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开发板具有不同的引脚排列。不过,由于这个方便的图表,这不是问题:

ESP8266

现在创建一个设置函数:

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草图在设置后会连续运行循环功能。由于我们在设置结束之前就将电路板送入睡眠状态,因此循环永远不会运行。

保存您的草图并将其上传到电路板上。打开串行监视器,您应该看到“已按下按钮”。每次按钮触发时,电路板都会复位,并且消息会再次打印。

ESP8266

有关串行监视器的注意事项

在某些情况下,您可能已经注意到串行监视器中的一些废话字符您的项目。这通常是由于未将串行监视器设置为与 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();

如果您想知道适合的位置,它应该看起来像

ESP8266

在草图顶部,将 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帐户。保存您的草图并上传。现在,您应该有一个功能齐全的推文按钮。

ESP8266

如果它似乎不起作用,请仔细检查您的代码和凭据是否有错误。如果您确实遇到困难,请从上方获取完整的代码,然后将其与您自己的代码进行比较。

完成!您如何进一步改进?

这是Wi-Fi按钮的基本版本,但是可以通过多种方法进行改进。为简单起见,此处使用USB连接供电。电池将使它完全可以移动,而装有电路的盒子将是完美的初学者3D打印项目。

尽管使用了深度睡眠,您可能会发现电池很快就会用完。有许多Arduino省电技巧可帮助此类项目。虽然比本教程要难得多,但是如果您从头开始制作自己的节能意识的Arduino,那么电池供电的Wi-Fi按钮可能会持续数月!

该项目将是智能遥控器的完美之选。家庭应用程序。 IFTTT上已经有大量的家庭自动化小程序。一旦掌握了基础知识,就可以使用几乎任何传感器或开关来触发几乎可以想象的任何服务。

责任编辑:wv

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分