#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <WiFiUdp.h>
#include "time.h"
#define DHTPIN 4 // Pin data sensor DHT22 terhubung ke pin 4
#define DHTTYPE DHT22 // Tipe sensor DHT (DHT22)
#define BUZZER_PIN 19 // Pin untuk Buzzer
#define GREEN_LED_PIN 18 // Pin untuk LED Hijau
#define RED_LED_PIN 17 // Pin untuk LED Merah
DHT dht(DHTPIN, DHTTYPE); // Inisialisasi sensor DHT22
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD 20x4 (0x27)
const char *ssid = "Wokwi-GUEST"; // Ganti dengan SSID WiFi Anda
const char *password = ""; // Ganti dengan password WiFi Anda
const char *host = "api.thingspeak.com"; // Host Thingspeak
const char *apiKey = "YourAPIKey"; // Ganti dengan API key Thingspeak Anda
// Struktur untuk menyimpan ID kartu dan nama pasien
struct Patient {
String cardID;
String name;
};
// Daftar pasien
Patient patients[] = {
{"E280689401A9", "fahmi"},
{"E2000019060C", "Rifat"},
{"G46RD9V40F3A", "Angga"},
{"B71001B76894", "Bilal"},
{"1C81159073FD", "Zulia"},
{"B710D0186022", "Razaq"}
};
int numPatients = 6;
WiFiUDP ntpUDP;
const long utcOffsetInSeconds = 3600 * 7; // Offset zona waktu Anda dalam detik
void setup() {
Serial.begin(115200);
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
dht.begin(); // Inisialisasi sensor DHT22
pinMode(BUZZER_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
WiFi.begin(ssid, password); // Mulai koneksi WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to WiFi");
lcd.setCursor(0, 1);
lcd.print("IP Address:");
lcd.setCursor(0, 2);
lcd.print(WiFi.localIP());
configTime(utcOffsetInSeconds, 0, "pool.ntp.org", "time.nist.gov");
while (!time(nullptr)) {
Serial.print(".");
delay(1000);
}
Serial.println("\nTime synchronized");
delay(2000);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 0);
lcd.print("Tap ID card");
Serial.println("Masukkan No ID:");
while (Serial.available() == 0) {
delay(100);
}
String input = Serial.readStringUntil('\n');
input.trim();
float temperature = dht.readTemperature();
String name = "";
bool isValid = false;
for (int i = 0; i < numPatients; i++) {
if (input == patients[i].cardID) {
name = patients[i].name;
isValid = true;
break;
}
}
// lcd.clear();
// lcd.setCursor(0, 0);
// lcd.print("ID: " + input);
// lcd.setCursor(0, 1);
// lcd.print("Suhu: ");
// lcd.print(temperature);
// lcd.print(" C");
if (isValid) {
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
tone(BUZZER_PIN, 1000, 1000);
delay(2000);
noTone(BUZZER_PIN);
Serial.println("Valid");
lcd.setCursor(0, 2);
lcd.print("Nama: " + name);
lcd.setCursor(0, 3);
lcd.print("Waktu: " + getTimeStamp());
sendToThingspeak(input);
} else {
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
noTone(BUZZER_PIN);
Serial.println("Invalid");
lcd.setCursor(0, 2);
lcd.print("Status: Invalid");
}
delay(2000);
lcd.clear();
}
String getTimeStamp() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return "No Time";
}
char buffer[20];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &timeinfo);
return String(buffer);
}
bool sendToThingspeak(String data) {
for (int i = 0; i < numPatients; i++) {
if (data == patients[i].cardID) {
WiFiClient client;
if (client.connect(host, 80)) {
String url = "/update";
String postData = "api_key=" + String(apiKey) + "&field1=" + patients[i].name;
client.println("POST " + url + " HTTP/1.1");
client.println("Host: " + String(host));
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(postData.length());
client.println();
client.print(postData);
Serial.println("Sending data to Thingspeak...");
while (client.connected()) {
if (client.available()) {
String line = client.readStringUntil('\r');
Serial.println(line);
}
}
client.stop();
Serial.println("Data sent successfully");
return true; // Return true if the submission was successful
} else {
Serial.println("Failed to connect to Thingspeak");
return false; // Return false if the connection failed
}
}
}
Serial.println("Invalid card ID");
return false; // Return false if the card ID is not valid
}