1 | #define BLYNK_PRINT Serial
|
2 | #define ESP8266_BAUD 19200
|
3 |
|
4 | #include <ESP8266_Lib.h>
|
5 | #include <BlynkSimpleShieldEsp8266.h>
|
6 | #include <TimeLib.h>
|
7 | #include <WidgetRTC.h>
|
8 | #include <SoftwareSerial.h>
|
9 |
|
10 | char auth[] = "";
|
11 | char ssid[] = "";
|
12 | char pass[] = "";
|
13 |
|
14 | SoftwareSerial EspSerial(11, 12); // RX, TX
|
15 | ESP8266 wifi(&EspSerial);
|
16 | WidgetTerminal terminal(V2);
|
17 | BlynkTimer timer;
|
18 | WidgetRTC rtc;
|
19 |
|
20 | //Konstanten
|
21 | const int greenled = 3; //Pin für rote LED
|
22 | const int redled = 4; //Pin für grüne LED
|
23 | const int gelbled = 5; //Pin für gelbe LED
|
24 | const int ldrdigital = 8; //Alternativ das Modul digital auslesen
|
25 | const int speaker = 7; //Pin für akkustischen Alarm
|
26 | //const int btnPin = 6; //Pin für An- und Ausschalten des Systems
|
27 |
|
28 |
|
29 |
|
30 | //Variablen
|
31 | boolean aktiv = true; // Variable für Aktivierung
|
32 | boolean alarm = false; // Variable für Alarm
|
33 | int buttonVal = 0; // Variable um Buttonzustand festzustellen
|
34 | int prev_buttonVal = 0; // Variable um Buttonzustand zu vergleichen
|
35 |
|
36 | // Konstanten für Sirene
|
37 | const int lowrange = 2000; // niedrigste Frequenz
|
38 | const int highrange = 4000; // höchste
|
39 |
|
40 | //Flags //Vermeiden von loop für Benachrichtigungen und Terminal
|
41 | int flagAlarm = 0;
|
42 | int flagAktiv = 0;
|
43 | int flagtime = 0;
|
44 |
|
45 | //Strings
|
46 | String password = "tesla";
|
47 |
|
48 | void setup()
|
49 |
|
50 | {
|
51 | //Bestimmen der Output und Input Pins
|
52 | pinMode(redled,OUTPUT);
|
53 | pinMode(greenled,OUTPUT);
|
54 | pinMode(gelbled, OUTPUT);
|
55 | pinMode(speaker,OUTPUT);
|
56 |
|
57 | pinMode(ldrdigital, INPUT);
|
58 | //pinMode(btnPin, INPUT);
|
59 |
|
60 | timer.setInterval(100L, data); //timer will run every sec
|
61 | Serial.begin(19200);
|
62 | EspSerial.begin(ESP8266_BAUD);
|
63 | Blynk.begin(auth, wifi, ssid, pass);
|
64 | rtc.begin();
|
65 | setSyncInterval(10 * 60);
|
66 |
|
67 | Aktivieren ();
|
68 | delay(10);
|
69 |
|
70 | }
|
71 |
|
72 | void loop()
|
73 | {
|
74 |
|
75 | Blynk.run();
|
76 | timer.run();
|
77 | }
|
78 |
|
79 | void data()
|
80 | {
|
81 |
|
82 | String currentTime = String(hour()) + ":" + minute() + ":" + second();
|
83 | String currentDate = String(day()) + "." + month() + "." + year();
|
84 |
|
85 | if (flagtime == 0) {
|
86 | delay(500);
|
87 | terminal.print (currentTime);
|
88 | terminal.print (F(" - "));
|
89 | terminal.println (currentDate);
|
90 | terminal.println (F("--------------------------------"));
|
91 | terminal.flush();
|
92 | flagtime = 1;
|
93 | }
|
94 |
|
95 |
|
96 | int digitalValue = digitalRead(ldrdigital); //liest den Wert des LDR Moduls aus
|
97 | Serial.println (digitalValue);
|
98 | if ((aktiv) && (digitalValue == HIGH)){ //vergleicht ausgelesenen Wert mit Grenzwert
|
99 | alarm = true;
|
100 | }
|
101 |
|
102 | if (alarm){
|
103 | if (flagAlarm == 0){
|
104 | Blynk.notify("Der Alarm wurde ausgelöst!");
|
105 | terminal.print(F("Der Alarm wurde um "));
|
106 | terminal.print (currentTime);
|
107 | terminal.println (F(" ausgelöst."));
|
108 | terminal.println(F("Geben Sie Ihr Passwort ein, um den Alarm auszuschalten!"));
|
109 | terminal.flush();
|
110 | flagAlarm = 1;
|
111 | }
|
112 | // Sirene
|
113 | // steigender Ton
|
114 | for (int i = lowrange; i <= highrange; i++)
|
115 | {
|
116 | tone (speaker, i, 250);
|
117 | }
|
118 | // sinkender Ton
|
119 | for (int i = highrange; i >= lowrange; i--)
|
120 | {
|
121 | tone (speaker, i, 250);
|
122 | }
|
123 |
|
124 | // optischer Alarm bzw. blinken
|
125 | digitalWrite(gelbled, HIGH);
|
126 | digitalWrite(redled, HIGH);
|
127 | digitalWrite(greenled, HIGH);
|
128 | delay(10);
|
129 | digitalWrite(greenled, LOW);
|
130 | digitalWrite(gelbled, LOW);
|
131 | digitalWrite(redled, LOW);
|
132 | }
|
133 |
|
134 | delay(20);
|
135 | }
|
136 |
|
137 | // Funktion aktiviert das System
|
138 | void Aktivieren(){
|
139 | if (aktiv){
|
140 | digitalWrite(greenled, LOW);
|
141 | digitalWrite(redled, HIGH);
|
142 | alarm = false;
|
143 | aktiv = false;
|
144 | } else {
|
145 | digitalWrite(greenled, HIGH);
|
146 | digitalWrite(redled, LOW);
|
147 | tone(speaker, 220, 125);
|
148 | delay(200);
|
149 | tone(speaker, 196, 250);
|
150 | aktiv = true;
|
151 | }
|
152 | }
|
153 |
|
154 | //Verbindung mit Blynk
|
155 | BLYNK_CONNECTED() {
|
156 | Blynk.syncAll();
|
157 | terminal.clear();
|
158 | terminal.println(F("Blynk v" BLYNK_VERSION ": Sie sind jetzt online."));
|
159 | terminal.flush();
|
160 | }
|
161 |
|
162 |
|
163 | //Passwortschutz Terminal Blynk
|
164 | BLYNK_WRITE(V2)
|
165 | {
|
166 |
|
167 | if (alarm) {
|
168 | if (String (password) == param.asStr()){
|
169 | //deactivate alarm
|
170 | aktiv = false;
|
171 | alarm = false;
|
172 | flagAlarm = 0;
|
173 | flagAktiv = 0;
|
174 | digitalWrite(greenled, LOW);
|
175 | digitalWrite(redled, HIGH);
|
176 | tone(speaker, 150, 200);
|
177 | delay(200);
|
178 | tone(speaker, 220, 125);
|
179 | terminal.println(F("Korrekt! Alarm deaktiviert."));
|
180 | terminal.flush();
|
181 | }
|
182 | else {
|
183 | terminal.println(F("Falsches Passwort!"));
|
184 | terminal.flush();
|
185 | }
|
186 | }
|
187 | }
|
188 |
|
189 | BLYNK_WRITE(V10) {
|
190 | int buttonVal = param.asInt(); //liest Button aus und vergleicht
|
191 | if ((buttonVal == 1) && (prev_buttonVal == 0)){
|
192 | Aktivieren(); //Wenn Bedingung erfüllt wird das System ativiert
|
193 | if (flagAktiv == 0){
|
194 | terminal.println(F("Sie haben das System aktiviert!"));
|
195 | terminal.flush();
|
196 | flagAktiv = 1;
|
197 | }
|
198 | delay(50);
|
199 | }
|
200 | }
|