Skip to content

Instantly share code, notes, and snippets.

@iamgoangle
Last active June 12, 2019 15:13
Show Gist options
  • Select an option

  • Save iamgoangle/e594271dc018ff0651ed685f07ba7435 to your computer and use it in GitHub Desktop.

Select an option

Save iamgoangle/e594271dc018ff0651ed685f07ba7435 to your computer and use it in GitHub Desktop.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <BlynkSimpleEsp8266.h>
#include <dht11.h>
// WiFi
//const char *ssid = "<your_ssid>";
//const char *password = "<your_password>";
char networkDriver = 'b'; // 'n' = normal 'b' = blynk
char ssid[] = "<your_ssid>";
char password[] = "<your_password>";
// Blynk
char auth[] = "<your_blynk_token>";
// LINE
const String lineHost = "notify-api.line.me";
const String notifyApi = "/api/notify";
const String token = "<your_line_notify_token>";
const int httpsPort = 443;
// Use web browser to view and copy
// SHA1 fingerprint of the certificate
// https://en.wikipedia.org/wiki/Public_key_fingerprint
// https://www.facebook.com/longhackz/posts/1692042657717181/
const char fingerprint[] PROGMEM = "BF 16 AE 79 D2 AB 71 44 BE D8 E7 55 A2 C7 0B 39 68 DB B5 D2";
// Constant of timer
const int httpTimeout = 5000;
const unsigned long DELAY_1_S = 1000UL;
uint32_t DELAY_1_MINUTE = DELAY_1_S * 60UL;
unsigned long DELAY_1_HOUR = 3600 * DELAY_1_MINUTE;
// Sensor or I/O
int sw = D2;
int led = D3;
void connectNetwork(char options)
{
switch (options)
{
case 'n':
connectWiFi();
break;
case 'b':
connectBlynk();
break;
}
}
void connectWiFi()
{
WiFi.mode(WIFI_OFF); // Prevents reconnection issue (taking too long to connect)
delay(1000);
WiFi.mode(WIFI_STA); // Only Station No AP, This line hides the viewing of ESP as wifi hotspot
WiFi.begin(ssid, password); // WiFi connection
while (WiFi.status() != WL_CONNECTED)
{
// Wait for the WiFI connection completion
delay(500);
Serial.println("Waiting for connection");
}
Serial.println();
Serial.println("WiFi connected");
}
void connectBlynk()
{
Blynk.begin(auth, ssid, password);
}
/**
* LineNotify send message to LINE Notify service
*/
void LineNotify(String msg, bool debug)
{
if (WiFi.status() == WL_CONNECTED)
{
WiFiClientSecure httpsClient;
Serial.print("Connecting to ... ");
Serial.println(lineHost);
// certificate pinning
Serial.printf("Using fingerprint ... '%s'\n", fingerprint);
httpsClient.setFingerprint(fingerprint);
httpsClient.setTimeout(httpTimeout);
delay(1000);
if (!httpsClient.connect(lineHost, httpsPort))
{
Serial.println("Connection failed");
return;
}
Serial.print("[HTTPS] begin...");
String LineNotifyMessage = "message=" + msg;
int lineMessageContentLen = String(LineNotifyMessage).length();
String req = "";
req += "POST /api/notify HTTP/1.1\r\n";
req += "Host: " + lineHost + "\r\n";
req += "Authorization: Bearer " + token + "\r\n";
req += "User-Agent: line-iot\r\n";
req += "Connection: close\r\n";
req += "Content-Type: application/x-www-form-urlencoded\r\n";
req += "Content-Length: " + String(lineMessageContentLen) + "\r\n";
req += "\r\n";
req += LineNotifyMessage;
if (debug)
{
Serial.print("\nRequest payload: ");
Serial.println(req);
}
// Send http request
httpsClient.print(req);
delay(100);
while (httpsClient.connected())
{
String line = httpsClient.readStringUntil('\n');
if (line == "\r")
{
Serial.println("Push LINE Notify successfull!");
break;
}
}
String line = httpsClient.readStringUntil('\n');
Serial.println("reply was:");
Serial.println("==========");
Serial.println(line);
Serial.println("==========");
Serial.println("closing connection");
}
}
bool SchedulerInMinutes(int period, unsigned long timeNow)
{
unsigned long p = period * DELAY_1_MINUTE;
return millis() > timeNow + p;
}
bool SchedulerInSecs(int period, unsigned long timeNow)
{
unsigned long p = period * DELAY_1_S;
return millis() > timeNow + p;
}
void setup()
{
Serial.begin(115200);
// digital switch
pinMode(sw, INPUT_PULLUP); // always 1
pinMode(led, OUTPUT);
connectNetwork(networkDriver);
}
unsigned long timeNowMin = 0;
unsigned long timeNowSec = 0;
void loop()
{
// tigger switch sensor
int switchVal = digitalRead(sw);
if (switchVal == 0)
{
digitalWrite(led, HIGH);
LineNotify("trigger button in my home", true);
}
else
{
digitalWrite(led, LOW);
}
Blynk.run();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment