-
Notifications
You must be signed in to change notification settings - Fork 0
/
Motion-Sensor.ino
104 lines (84 loc) · 2.29 KB
/
Motion-Sensor.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#include "env.h"
int inputPin = 16; // ESP8266 - D0
const String userAgent = "Arvand-IOT/Motion-Sensor";
int detected = 0;
bool alarm = false;
bool sent = true;
ESP8266WiFiMulti WiFiMulti;
void setup() {
pinMode(inputPin, INPUT);
Serial.begin(115200);
// Connect to WiFi
setup_wifi();
}
void setup_wifi() {
delay(10);
WiFi.persistent(false);
WiFi.mode(WIFI_STA);
WiFiMulti.addAP(wifi_ssid, wifi_password);
Serial.println("");
Serial.print("[SETUP] Connecting ");
while (WiFiMulti.run() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("[SETUP] Connected to ");
Serial.println(wifi_ssid);
Serial.print("[SETUP] IP address: ");
Serial.println(WiFi.localIP());
}
void alert() {
if (WiFiMulti.run() == WL_CONNECTED) {
Serial.println("[ALARM] Send alert to server");
std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);
client->setFingerprint(alert_url_fingerprint);
HTTPClient https;
https.setUserAgent(userAgent);
Serial.println("[ALARM] Begin");
if (https.begin(*client, alert_url)) {
Serial.println("[ALARM] POST");
int httpCode = https.POST("");
if (httpCode > 0) {
Serial.printf("[ALARM] POST ... code: %d\n", httpCode);
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
// String payload = https.getString();
Serial.println("[ALARM] Done");
sent = true;
}
} else {
Serial.printf("[ALARM] POST ... failed, code: %d - error: %s\n", httpCode, https.errorToString(httpCode).c_str());
}
https.end();
} else {
Serial.println("[ALARM] Unable to connect");
}
} else {
Serial.println("[ALARM] Check WiFi connection");
}
}
void loop() {
int val = digitalRead(inputPin);
if (val == HIGH) {
detected = detected + 1;
} else {
detected = 0;
alarm = false;
}
delay(10);
if (detected > 10 && !alarm && sent) {
Serial.println("[SENSOR] Motion detected !");
alarm = true;
sent = false;
alert();
}
if (!sent) {
Serial.println("[ALARM] Try again");
alert();
}
}