如何使用ESP8266制作自己的Wi-Fi连接按钮

物联网具有巨大的DIY潜力。有了足够的专业知识和少量廉价的组件,您就可以构建一个复杂的连接设备系统。

有时候,您想要简单的东西。没有钟声或口哨声,只需执行一个任务的按钮即可。如果您曾经使用Amazon Dash按钮对日常家用物品进行重新排序,那么您可能已经熟悉这种情况。

今天,我们将使用NodeMCU制作一个启用Wi-Fi的按钮,并将其编程为使用IFTTT做...好吧,任何事!如果需要,可以在视频后附上书面说明。

所需条件

您将需要:

  • 1 x NodeMCU(ESP8266)板,可用在AliExpress上只需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连接而编写的。

    这就是我们需要的所有准备工作,让我们编写代码!

    代码将如何工作

    我们将使用 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

    标签: Arduino DIY项目教程