|
/** |
|
* IOTButtonForIFTT.ino |
|
* Connects to Wifi, Retrieves a URL, Blinks LED on if Successful |
|
* Be sure to adjust the User Inputs below. |
|
* |
|
* 2017/11/16 Modified by |
|
* Donovan Keith <[email protected]> |
|
* |
|
* Based On: |
|
* BasicHttpClient.ino by |
|
* Created on: 5.7.2016 by Sajin George |
|
* |
|
* References: |
|
* https://github.com/techiesms/IoT-Button-DIY-Amazon-Dash-Button-/blob/master/IoT_Button.ino |
|
*/ |
|
|
|
|
|
// Imports |
|
|
|
#include <Arduino.h> |
|
#include <ESP8266WiFi.h> |
|
#include <ESP8266HTTPClient.h> |
|
|
|
// USER INPUT |
|
|
|
// Request Settings |
|
char iftttTriggerUrl[] = "http://maker.ifttt.com/trigger/EVENT/with/key/KEY"; // `http` is intentional as `https` won't work without a more complex setup. |
|
|
|
// WiFi Settings |
|
char wifiNetwork[] = "NetworkName"; |
|
char wifiPassword[] = "NetworkPassword"; |
|
|
|
// Board Setup |
|
const int serialBaudRate = 9600; |
|
const int LED_PIN = 2; // [Reference](https://arduino.stackexchange.com/questions/38477/does-the-node-mcu-v3-lolin-not-have-a-builtin-led) |
|
const int BUTTON_PIN = 16; // D0 [Reference](http://www.c-sharpcorner.com/article/blinking-led-by-esp-12e-nodemcu-v3-module-using-arduinoide/) |
|
|
|
// Variables |
|
|
|
int lastPressed = millis(); |
|
int oneSecond = 1000; |
|
int timeoutDuration = 5 * oneSecond; |
|
int pushCount = 0; |
|
|
|
// Forward Declarations |
|
void setupWifi(void); |
|
bool postToIfttt(void); |
|
|
|
|
|
void setup() { |
|
pinMode(BUTTON_PIN, INPUT); |
|
|
|
// setup the led pin and turn it off |
|
pinMode(LED_PIN, OUTPUT); |
|
blinkLED(); |
|
blinkLED(); |
|
blinkLED(); |
|
|
|
Serial.begin(serialBaudRate); |
|
Serial.flush(); |
|
|
|
Serial.println(""); |
|
Serial.println(""); |
|
Serial.println("DIY IoT IFTTT Button"); |
|
Serial.println("===================="); |
|
Serial.println(""); |
|
|
|
setupWifi(); |
|
|
|
Serial.println(""); |
|
Serial.println("Button Presses"); |
|
Serial.println("--------------"); |
|
} |
|
|
|
void blinkLED(){ |
|
setLED(true); |
|
delay(500); |
|
setLED(false); |
|
delay(250); |
|
} |
|
|
|
void setLED(bool state){ |
|
if (state){ |
|
// The built-in LED actually turns on when LOW and off when HIGH |
|
digitalWrite(LED_PIN, LOW); |
|
} else { |
|
digitalWrite(LED_PIN, HIGH); |
|
} |
|
} |
|
|
|
void loop() { |
|
if (!buttonPressed()) |
|
return; |
|
|
|
if(WiFi.status() == WL_CONNECTED) |
|
{ |
|
requestUrl(); |
|
} |
|
else { |
|
Serial.println("ERROR: No Wifi connection, can't log press."); |
|
} |
|
} |
|
|
|
bool buttonPressed(){ |
|
// Returns `true` the first time a button is pressed (or still pressed) |
|
|
|
bool buttonState = digitalRead(BUTTON_PIN); |
|
setLED(buttonState); |
|
|
|
if (buttonState){ |
|
if (millis() > (lastPressed + timeoutDuration)){ |
|
lastPressed = millis(); |
|
pushCount++; |
|
Serial.println("Button Pressed: "); |
|
Serial.print(pushCount); |
|
Serial.print(" times"); |
|
delay(100); // No need to keep checking while user is releasing button |
|
return true; |
|
} |
|
else { |
|
Serial.println("Button locked until timeout is over."); |
|
delay(100); // No need to keep checking while user is releasing button |
|
} |
|
} |
|
|
|
return false; |
|
} |
|
|
|
void setupWifi() |
|
{ |
|
Serial.println("Wifi Connection"); |
|
Serial.println("---------------"); |
|
Serial.println(""); |
|
Serial.println("Conecting to WiFi Network: "); |
|
Serial.print(wifiNetwork); |
|
|
|
WiFi.disconnect(); |
|
WiFi.begin(wifiNetwork, wifiPassword); |
|
|
|
const int maxDotsPerRow = 26; |
|
int dotCount = 0; |
|
|
|
while (WiFi.status() != WL_CONNECTED) { |
|
if (dotCount > maxDotsPerRow){ |
|
Serial.println(""); |
|
dotCount=0; |
|
} |
|
|
|
Serial.print("."); |
|
dotCount++; |
|
delay(500); |
|
} |
|
|
|
Serial.println(""); |
|
Serial.println("WiFi Connected"); |
|
Serial.println(""); |
|
Serial.println("IP address: "); |
|
Serial.println(WiFi.localIP()); |
|
Serial.println(""); |
|
} |
|
|
|
bool requestUrl() |
|
{ |
|
// [Reference](https://techtutorialsx.com/2016/07/17/esp8266-http-get-requests/) |
|
HTTPClient http; //Declare an object of class HTTPClient |
|
|
|
http.begin(iftttTriggerUrl); //Specify request destination |
|
int httpCode = http.GET(); //Send the request |
|
|
|
if (httpCode > 0) { //Check the returning code |
|
String payload = http.getString(); //Get the request response payload |
|
Serial.println(payload); //Print the response payload |
|
} |
|
|
|
http.end(); //Close connection |
|
} |