Skip to main content

How to Make Your Own Wi-Fi Connected Button With ESP8266

The post How to Make Your Own Wi-Fi Connected Button With ESP8266 appeared first on BardTech.

make-wifi-button

The Internet of Things has vast DIY potential. With enough know-how and a few cheap components, you could build a complex system of connected devices.

Sometimes, however, you want something simple. No bells or whistles, just a button that performs a single task. You might already be familiar with something like this if you’ve ever used an Amazon Dash button to reorder everyday household items.

Today we will make a Wi-Fi enabled button using a NodeMCU, and program it to use IFTTT to do… well, anything! Written instructions following the video, if you prefer.

What You’ll Need

Wi-Fi Button Parts Needed

You will need:

  • 1 x NodeMCU (ESP8266) board, available for $2-3 on AliExpress
  • 1 x Pushbutton
  • 1 x LED (optional)
  • 1 x 220 Ohm resistor (optional)
  • Breadboard and hookup wires
  • Micro USB for programming
  • Computer with the Arduino IDE installed

Apart from the NodeMCU, you should be able to find most of these parts in any Arduino starter kit . This tutorial will assume you are using the optional LED and resistor, but they are not essential.

Step 1: Setting Up the Circuit

The hardware setup is very simple for this project. Set up your board according to this diagram.

NodeMCU Wi-Fi button Fritzing diagram

The purple wire attaches pin D0 to one side of the button. The green wire connects the other side of the button to the RST pin. The blue wire runs from pin D1 to the resistor and LED. The negative leg of the LED attaches to the GND pin of the NodeMCU.

When the breadboard is set up it should look something like this:

NodeMCU Wifi button circuit setup

If you are wondering how I’ve got my LED going to the ground pin using just those tiny bits of cable, our quick breadboard crash course should help clear it up! Check your setup and attach your NodeMCU to the computer via USB.

Step 2: Setting Up the IDE

Before getting on with coding, you need to make some preparations. If you haven’t already, set up the Arduino IDE to recognize your NodeMCU board. You can add it to your boards list via File > Preferences.

arduino board manager URLS

You can find a more detailed explanation of this step in our NodeMCU introduction article .

Two libraries are required for this project. Navigate to Sketch > Include Library > Manage Libraries. Search for ESP8266WIFI by Ivan Grokhotkov and install it. This library is written for making Wi-Fi connections with the NodeMCU board.

Arduino IDE Library Manager
Next search for the IFTTTWebhook by John Romkey and install the latest version. This library is designed to simplify the process of sending webhooks to IFTTT.

That’s all the preparation we need, lets code!

How the Code Will Work

We’ll use the ESP8266WIFI library to establish a Wi-Fi connection. The IFTTTWebhooks library makes a request to IFTTT—in this case, to post to Twitter. Then, instruct the NodeMCU board to sleep when not in use to save power.

When the button is pressed, it will link the D0 and RST pins. This resets the board, and the process happens again.

Most of the code in this tutorial is simple enough for beginners. That said, if you are starting out, you’ll find it a lot easier to understand after following our Arduino beginners guide .

This tutorial goes through the code in chunks to help with understanding. If you want to get straight to business, you can find the complete code at Pastebin . Note that you will still need to fill in your Wi-Fi and IFTTT credentials in this code for it to function!

Step 3: Testing Deep Sleep

To begin, we’ll create a simple test to show how deep sleep works. Open a new sketch in the Arduino IDE. Enter the following two code chunks.

#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"

Here, we include our libraries, along with defining a few variables we will need in our sketch. You’ll notice that the ledPin and wakePin are numbered differently here compared to the Fritzing diagram above. The NodeMCU has a different pinout to Arduino boards. This is not a problem though, due to this handy diagram:

NodeMCU__v1.0_pinout

Now create a setup function:

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); 
}

Here, we set up our serial port, and use a while loop to wait until it begins. Since this code will trigger after pressing the reset button, we print “Button Pressed” to the serial monitor. Then, we tell the NodeMCU to go into deep sleep until the button connecting the wakePin to the RST pin is pressed.

Finally, for testing, add this to your loop() method:

void loop(){
  //if deep sleep is working, this code will never run.
  Serial.println("This shouldn't get printed");
}

Usually, Arduino sketches run the loop function continuously after setup. Since we send the board to sleep before setup ends, the loop never runs.

Save your sketch and upload it to the board. Open the serial monitor and you should see “Button Pressed.” Every time the button triggers, the board resets and the message prints again. It works!

Button Pressed Serial Monitor Test

A Note About the Serial Monitor

You may have noticed some nonsense characters in the serial monitor during some of your projects. This is usually due to not setting the serial monitor to the same baud rate as the Serial.begin(XXXX) rate.

Many guides suggest starting the serial connection at a baud rate of 115200 for a project like this. I tried many combinations, and they all had varying degrees of gibberish before and after serial messages. According to various forum posts, this could be down to a faulty board or software compatibility issue. As it doesn’t affect the project too badly, I’m choosing to pretend it’s not happening.

If you are having issues with the serial monitor, try different baud rates and see which works best for you.

Step 4: Connecting to Wi-Fi

Now create a function for connecting to your Wi-Fi network.

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");
  }
}

This method attempts to connect to your network ten times with a second in between. Success or failure of connection prints to the serial monitor.

Step 5: Calling the Connection Method

Right now, the connectToWifi() is never called. Add a call to your setup function between the “Button Pressed” message and sending the board to sleep.

connectToWifi();

In case you are wondering where this fits, it should look like this:

Where connectToWifi() fits
At the top of the sketch replace the ssid and password variables with your Wi-Fi credentials. Save your sketch and upload to the board.

Now when the board boots it will attempt to connect to your Wi-Fi network, before returning to the setup function. Now, lets set up the IFTTT integration.

Step 6: Setting Up IFTTT Integration

IFTTT allows integration with a vast array of web services. We used it in our Wi-Fi PC tower LED tutorial to send an alert whenever a new email is received. Today we’ll be using it to send a tweet at the press of a button.

Navigate to the My Applets page, and select New Applet

Click on +this and connect to Webhooks. Select “Receive a web request” and name your event. Keep it simple! Note down the event name, you’ll need to add it to your NodeMCU code later. Click “Create Trigger”.

Web Request with IFTTT Webhooks
Now select +that. Search for the Twitter service and connect to it—you will need to authorize it to post to your Twitter account. Select “Post a tweet” and choose your message.

IFTTT - Send Tweet
The next screen will ask you to review the applet. Click finish. That’s it!

Step 7: Adding IFTTT Credentials to the Code

Back in the Arduino IDE you will need to add your IFTTT API key and event name to your defined variables. To find the API key, navigate to My Applets and select Webhooks under the Services tab. Select Documentation to access your key.

Copy the key, and event name into your code, replacing the temporary names set up for them.

#define IFTTT_API_KEY "IFTTT_KEY_GOES_HERE"
#define IFTTT_EVENT_NAME "IFTTT_EVENT_NAME_HERE"

Note, the inverted commas have to stay, only replace the text.

Between calling the connectToWifi() and sending the board to sleep, create an instance of the IFTTTWebhook library object. The LED signals task completion before deep sleep begins again.

//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

Calling trigger on the hook object fires off the IFTTT applet, and should post to your Twitter account. Save your sketch and upload it. You now should have a fully functional tweeting button.

Working Wi-Fi Button Gif

If it doesn’t seem to be working, check through your code and credentials carefully for mistakes. If you really get stuck, get the full code from above and compare it to your own.

Done! How Could You Improve It Further?

This is a basic version of a Wi-Fi button, but there are many ways it could be improved. For simplicity, the USB connection is used for power here. A battery would make it entirely mobile, and a case holding the circuit would be the perfect beginner 3D printing project .

Despite using deep sleep, you may find a battery would run out quite quickly. There are many Arduino power saving tips that help in these type of projects. While more difficult than this tutorial, if you made your own power-conscious Arduino from scratch , a battery-powered Wi-Fi button could last for months!

This project would make the perfect for a remote for smart home applications. There are already a considerable amount of home automation applets available on IFTTT. Once you’ve got the basics down, you can use almost any sensor or switch to trigger practically any service you can imagine.

Image Credit: Vadmary/Depositphotos

Read the full article: How to Make Your Own Wi-Fi Connected Button With ESP8266

Original Content By MakeUseOf

The post How to Make Your Own Wi-Fi Connected Button With ESP8266 appeared first on BardTech.



Tags: arduino, DIY, DIY Project Tutorials, button, connected, esp8266

Original link: here
via BardTech

Comments

Popular posts from this blog

How to change the PIM of a VeraCrypt volume

The developers of VeraCrypt introduced Personal Iterations Multiplier (PIM) functionality in the encryption program in version 1.12 . PIM stands for "Personal Iterations Multiplier". It is a parameter that was introduced in VeraCrypt 1.12 and whose value controls the number of iterations used by the header key derivation function. PIM is used by volumes even if the creator of the volume did not specify a value. It is an optional component that improves security: it adds another step to the authentication process similarly to two-factor authentication. The main difference is that the PIM value is fixed and not generated on the fly when requested. An attacker needs to know the master password and the PIM, if not set to default, to breach the encryption successfully and access the content of the drive or partition. A couple of good reasons exist to change the PIM value: It was leaked or stolen. The default value is used and that is not as secure as using a custom PIM. Yo...

Realme U1 with MediaTek Helio P70 launched in India for ₹11,999

Realme is an emerging smartphone brand in India, with a focus on budget and early mid-range segments. Realme started off as an online-only sub-brand of OPPO, but then later on, became its own separate brand . Realme devices ar seen to undercut the competition on their price value, and hence, coming up as viable alternatives despite the infancy of the brand. To keep up the pressure, Realme has now launched the Realme U1, the first smartphone with MediaTek’s Helio P70 SoC , in India. Realme U1 is the first smartphone in the company’s U series, which in-turn is the lineup that will be focused on photography. The rest of the company’s lineup includes the C series, the numbered series and the Pro series. The Realme U1 is being touted as “India’s Selfie Pro”, mainly because of its front camera — a single 25MP Sony IMX576 sensor with an f/2.0 aperture and 1.8-micron pixels. There’s software features like an AI Beauty+ mode that is optimized for Indian complexions, a Smarter Groupie featur...

The 5 Best Free IPTV Apps to Watch Live TV on Android

It’s easier than ever to watch on-demand TV shows and movies on your Android device. But what about live TV? Yes, there are services like Sling and PlayStation Vue. However, if you know where to look, you don’t need to subscribe to their expensive plans. You can use free IPTV instead; you just need an IPTV app and an IPTV source. What Is an IPTV App? IPTV apps are a bit like Kodi; they are empty shells that can’t stream any content without some user input. You have the responsibility for adding channels, playlists, and other sources. Typically, you cannot use the apps to watch Netflix, Hulu, or direct content from other third-party providers. Here, we’re not interested in the best on-demand streaming apps or places to watch TV online. We are only looking at the IPTV apps themselves. Specifically, we want to know what the best IPTV apps on Android are. 1. Lazy IPTV Our first pick is Lazy IPTV. It supports M3U playlists in open-view, ZIP, and GZ formats. The app can also read pl...