· 5 years ago · Jul 15, 2020, 06:26 AM
1/* PROJECT IOT 16 : Sistem Absensi RFID
2 Programmed by : Rizky Dermawan (01 Februari 2020) */
3
4
5//----------------LIBRARIES----------------
6 #include <ArduinoJson.h>
7 #include <ESP8266WiFi.h>
8 #include <ESP8266HTTPClient.h>
9 #include <SPI.h>
10 #include <MFRC522.h>
11 #include <LiquidCrystal_I2C.h>
12 #include <DFPlayer_Mini_Mp3.h>
13//-----------------------------------------
14
15//Sesuaikan dengan addres i2c dan ukuran LCD yg digunakan
16LiquidCrystal_I2C lcd(0x27, 16, 2);
17
18const char* ssid = "Realme 5 Pro"; //Silakan isi dengan nama SSID
19const char* password = "12345678"; //Siakan isi dengan password
20
21
22// Buat object http
23 HTTPClient http;
24
25//sesuaikan dgn ip dan direktori penyimpanan file php anda
26//String url = "http://absenrfid.com/prosesID.php?";
27String url = "http://192.168.43.220/absenrfid/prosesID.php?";
28String payload;
29
30
31#define RST_PIN D3 //RST rfid
32#define SS_PIN D4 //SDA rfid
33
34MFRC522 mfrc522(SS_PIN, RST_PIN);
35MFRC522::MIFARE_Key key;
36
37byte i;
38String ID;
39String KEY_API = "abc123"; //silakan sesuaikan dengan KEY_API yg ada di database
40
41
42void startdisplay() {
43 lcd.setCursor(0, 0);
44 lcd.print("ABSENSI RFID-WEB");
45 lcd.setCursor(0, 1);
46 lcd.print("Stat: Connected");
47 }
48
49void setup () {
50
51 Serial.begin(9600);
52 WiFi.begin(ssid, password);
53
54 //mySerial.begin (9600);
55 mp3_set_serial (Serial); //set softwareSerial for DFPlayer-mini mp3 module
56 delay(1); //wait 1ms for mp3 module to set volume
57 mp3_set_volume (25);
58
59 lcd.begin();
60 lcd.backlight();
61
62
63 while (WiFi.status() != WL_CONNECTED) {
64 Serial.println("Connecting...");
65 lcd.clear();
66 lcd.print("Connecting");
67 for(int x = 0; x<16; x++){
68 lcd.setCursor(x, 1);
69 lcd.print(".");
70 delay(100);
71 }
72 }
73
74 if(WiFi.status() == WL_CONNECTED) {
75 Serial.println("Connected...!!!");
76 lcd.clear();
77 lcd.print("Connected...!!!");
78 mp3_play(2);
79 delay(1000);
80 lcd.clear();
81 startdisplay();
82 }
83
84 SPI.begin();
85 mfrc522.PCD_Init();
86
87}
88
89
90void readRFID(byte *buffer, byte bufferSize)
91{
92 ID="";
93 for(byte i = 0;i<bufferSize; i++)
94 {
95 ID=ID+String(buffer[i], HEX);
96 }
97}
98
99void loop() {
100
101 if(!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()){
102 return;
103
104 }
105 readRFID(mfrc522.uid.uidByte, mfrc522.uid.size);
106
107 if (WiFi.status() == WL_CONNECTED) {
108
109 http.begin(url + "KEY_API=" + KEY_API + "&ID=" + ID);
110 int httpCode = http.GET();
111
112 if (httpCode > 0) {
113 char json[500];
114 String payload = http.getString();
115 payload.toCharArray(json, 500);
116
117// StaticJsonDocument<200> doc;
118 DynamicJsonDocument doc(JSON_OBJECT_SIZE(15));
119
120
121 // Deserialize the JSON document
122 deserializeJson(doc, json);
123 String IDtag = doc["ID"];
124 String Jam = doc["Jam"];
125 String STAT = doc["STAT"];
126 String Auth = doc["Auth"];
127
128 Serial.println("");
129 Serial.print("Response HTTP = ");
130 Serial.println(httpCode);
131 Serial.print("ID Card = ");
132 Serial.println(ID);
133 Serial.print("Status= ");
134 Serial.println(STAT);
135 Serial.print("Jam = ");
136 Serial.println(Jam);
137 Serial.println("");
138
139 //kepagian
140 if(STAT == "kepagian") {
141 mp3_play(3);
142 lcd.clear();
143 lcd.setCursor(0, 0);
144 lcd.print("Sistem Masih");
145 lcd.setCursor(0, 1);
146 lcd.print("Terkunci!!!");
147 delay(3000);
148 lcd.clear();
149 startdisplay();
150 }
151
152 //masuk
153 else if(STAT == "masuk") {
154 mp3_play(4);
155 lcd.clear();
156 lcd.setCursor(0, 0);
157 lcd.print("Tap Masuk");
158 lcd.setCursor(0, 1);
159 lcd.print("diterima");
160 delay(2000);
161 lcd.clear();
162 lcd.setCursor(0, 0);
163 lcd.print("ID: ");
164 lcd.print(IDtag);
165 lcd.setCursor(0, 1);
166 lcd.print("Jam: ");
167 lcd.print(Jam);
168 delay(3000);
169 lcd.clear();
170 startdisplay();
171 }
172
173 //terlambat
174 else if(STAT == "terlambat") {
175 mp3_play(5);
176 lcd.clear();
177 lcd.setCursor(0, 0);
178 lcd.print("Tap Masuk");
179 lcd.setCursor(0, 1);
180 lcd.print("diterima");
181 delay(2000);
182 lcd.clear();
183 lcd.setCursor(0, 0);
184 lcd.print("Tapi Anda Datang");
185 lcd.setCursor(0, 1);
186 lcd.print("Terlambat!!!");
187 delay(2000);
188 lcd.clear();
189 lcd.setCursor(0, 0);
190 lcd.print("ID: ");
191 lcd.print(IDtag);
192 lcd.setCursor(0, 1);
193 lcd.print("Jam: ");
194 lcd.print(Jam);
195 delay(3000);
196 lcd.clear();
197 startdisplay();
198 }
199
200 //double tap in
201 else if(STAT == "double tap in") {
202 mp3_play(6);
203 lcd.clear();
204 lcd.setCursor(0, 0);
205 lcd.print("Tap Masuk Telah");
206 lcd.setCursor(0, 1);
207 lcd.print("diterima!!!");
208 delay(3000);
209 lcd.clear();
210 startdisplay();
211 }
212
213 //pulang cepat
214 else if(STAT == "pulang cepat") {
215 mp3_play(7);
216 lcd.clear();
217 lcd.setCursor(0, 0);
218 lcd.print("Tap Pulang");
219 lcd.setCursor(0, 1);
220 lcd.print("diterima");
221 delay(2000);
222 lcd.clear();
223 lcd.setCursor(0, 0);
224 lcd.print("Anda Pulang");
225 lcd.setCursor(0, 1);
226 lcd.print("Lebih Awal");
227 delay(2000);
228 lcd.clear();
229 lcd.setCursor(0, 0);
230 lcd.print("ID: ");
231 lcd.print(IDtag);
232 lcd.setCursor(0, 1);
233 lcd.print("Jam: ");
234 lcd.print(Jam);
235 delay(3000);
236 lcd.clear();
237 startdisplay();
238 }
239
240 //pulang
241 else if(STAT == "pulang") {
242 mp3_play(8);
243 lcd.clear();
244 lcd.setCursor(0, 0);
245 lcd.print("Tap Pulang");
246 lcd.setCursor(0, 1);
247 lcd.print("diterima");;
248 delay(2000);
249 lcd.clear();
250 lcd.setCursor(0, 0);
251 lcd.print("ID: ");
252 lcd.print(IDtag);
253 lcd.setCursor(0, 1);
254 lcd.print("Jam: ");
255 lcd.print(Jam);
256 delay(3000);
257 lcd.clear();
258 startdisplay();
259 }
260
261 //bolos
262 else if(STAT == "bolos") {
263 mp3_play(9);
264 lcd.clear();
265 lcd.setCursor(0, 0);
266 lcd.print("ID: ");
267 lcd.print(IDtag);
268 lcd.setCursor(0, 1);
269 lcd.print("dinyatakan Bolos");
270 delay(3000);
271 lcd.clear();
272 startdisplay();
273 }
274
275 //alfa
276 else if(STAT == "alfa") {
277 mp3_play(10);
278 lcd.clear();
279 lcd.setCursor(0, 0);
280 lcd.print("ID: ");
281 lcd.print(IDtag);
282 lcd.setCursor(0, 1);
283 lcd.print("dinyatakan Alfa");
284 delay(3000);
285 lcd.clear();
286 startdisplay();
287 }
288
289 //locked
290 else if(STAT == "locked") {
291 mp3_play(11);
292 lcd.clear();
293 lcd.setCursor(0, 0);
294 lcd.print("Sistem Telah");
295 lcd.setCursor(0, 1);
296 lcd.print("Terkunci!!!");
297 delay(3000);
298 lcd.clear();
299 startdisplay();
300 }
301
302 //libur
303 else if(STAT == "libur") {
304 mp3_play(12);
305 lcd.clear();
306 lcd.setCursor(0, 0);
307 lcd.print("Hari Ini Libur");
308 lcd.setCursor(0, 1);
309 lcd.print("Apa Anda Lupa?");
310 delay(3000);
311 lcd.clear();
312 startdisplay();
313 }
314
315 else if(Auth == "Auth Rejected!!!") {
316 mp3_play(13);
317 Serial.print("WARNING...");
318 Serial.println(Auth);
319 lcd.clear();
320 lcd.setCursor(0, 0);
321 lcd.print(Auth);
322 lcd.setCursor(0, 1);
323 lcd.print("Key API invalid!");
324 delay(3000);
325 lcd.clear();
326 startdisplay();
327 }
328
329 //ID tidak terdaftar
330 else {
331 mp3_play(14);
332 Serial.println("ID Tidak Terdaftar!!!");
333 lcd.clear();
334 lcd.setCursor(0, 0);
335 lcd.print("ID: ");
336 lcd.print(ID);
337 lcd.setCursor(0, 1);
338 lcd.print("Tidak Terdaftar!!!");
339 delay(3000);
340 lcd.clear();
341 startdisplay();
342 }
343
344 }
345 else{
346 Serial.println("Koneksi ke Server Gagal!!!");
347 Serial.println(http.errorToString(httpCode));
348 Serial.println("");
349 mp3_play(15);
350 lcd.clear();
351 lcd.setCursor(0, 0);
352 lcd.print("Koneksi ke Server");
353 lcd.setCursor(0, 1);
354 lcd.print("Gagal!!!");
355 delay(2000);
356 lcd.clear();
357 lcd.print(http.errorToString(httpCode));
358 delay(3000);
359 lcd.clear();
360 startdisplay();
361 }
362
363 http.end();
364
365 }
366 else {
367 Serial.println("Disconnected!!!");
368 mp3_play(16);
369 lcd.clear();
370 lcd.setCursor(0, 0);
371 lcd.print("Cek Koneksi");
372 lcd.setCursor(0, 1);
373 lcd.print("Internet !!!");
374 delay(2000);
375 lcd.clear();
376 lcd.setCursor(0, 0);
377 lcd.print("ABSENSI RFID-WEB");
378 lcd.setCursor(0, 1);
379 lcd.print("Stat: Disconnect");
380 }
381
382}