#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <WiFi.h>
#include <ThingSpeak.h>
#define DHTPIN 4 // Pin tempat sensor DHT22 terhubung
#define DHTTYPE DHT22 // Tipe sensor DHT (DHT22)
#define LED_RED_PIN 15 // Pin untuk LED merah pada ESP32
#define LED_GREEN_PIN 14 // Pin untuk LED hijau pada ESP32
#define BUZZER_PIN 27 // Pin untuk buzzer pada ESP32
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2521477;
const char* myWriteApiKey ="UG3NOE1HJHS8RMC3";
const char* myReadApiKey = "5M5OHIO87SA60HKC";
const char* server = "api.thingspeak.com";
DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD (perhatikan alamat yang benar untuk LCD Anda)
const int VALID_CARD_COUNT = 6;
const int INVALID_CARD_COUNT = 4;
const int CARD_LENGTH = 12;
struct Card {
char number[CARD_LENGTH + 1];
char name[20];
int thingspeak_field; // Field ThingSpeak untuk setiap kartu
};
Card valid_cards[VALID_CARD_COUNT] = {
{"E280689401A9", "Arhan", 1}, // Field ThingSpeak untuk Card A adalah 1
{"E2000019060C", "Lionel Messi", 2}, // Field ThingSpeak untuk Card B adalah 2
{"G46RD9V40F3A", "Suarez", 3}, // Field ThingSpeak untuk Card C adalah 3
{"B71001B76894", "Neymar Jr", 4}, // Field ThingSpeak untuk Card D adalah 4
{"1C81159073FD", "Coch Justin", 5}, // Field ThingSpeak untuk Card E adalah 5
{"B710D0186022", "Decul", 6} // Field ThingSpeak untuk Card F adalah 6
};
Card invalid_cards[INVALID_CARD_COUNT] = {
{"3FD659840001", "Invalid Card "},
{"8115907B710E", "Invalid Card "},
{"66D9V45E6E77", "Invalid Card "},
{"E291450A556D", "Invalid Card "}
};
bool isValidCard(const char* cardNumber) {
for (int i = 0; i < VALID_CARD_COUNT; ++i) {
if (strcmp(valid_cards[i].number, cardNumber) == 0) {
return true;
}
}
return false;
}
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
dht.begin();
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Setup koneksi WiFi
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
ThingSpeak.begin(client); // Inisialisasi ThingSpeak
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tap RFID Card Patient");
lcd.setCursor(0, 1);
lcd.print("Suhu:");
lcd.setCursor(0, 2);
lcd.print("CARD:");
lcd.setCursor(0, 3);
lcd.print("NAME:");
while (!Serial.available()) {
delay(100);
}
char cardNumber[CARD_LENGTH + 1];
Serial.readBytesUntil('\n', cardNumber, CARD_LENGTH + 1);
cardNumber[CARD_LENGTH] = '\0';
lcd.clear();
if (strlen(cardNumber) == CARD_LENGTH) {
for (int i = 0; i < VALID_CARD_COUNT; ++i) {
if (strcmp(valid_cards[i].number, cardNumber) == 0) {
// Aktifkan LED hijau dan bunyikan buzzer selama 3 detik
digitalWrite(LED_GREEN_PIN, HIGH);
tone(BUZZER_PIN, 1000);// Frekuensi buzzer
delay(2000);
noTone(BUZZER_PIN); // Matikan suara buzzer
// Baca suhu dari sensor DHT
float temperature = dht.readTemperature();
// Kirim data suhu ke ThingSpeak
ThingSpeak.writeField(myChannelNumber, valid_cards[i].thingspeak_field, temperature, myWriteApiKey);
// Menampilkan data pembacaan suhu
lcd.setCursor(4, 0);
lcd.print("SUKSES ");
lcd.setCursor(0, 1);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
// Menampilkan nama kartu yang valid
lcd.setCursor(0, 2);
lcd.print("CARD: ");
lcd.print(valid_cards[i].number);
// Menampilkan nomor kartu yang valid
lcd.setCursor(0, 3);
lcd.print("NAME: ");
lcd.print(valid_cards[i].name);
delay(15000);
digitalWrite(LED_GREEN_PIN,LOW);
return; // Keluar dari loop setelah menemukan kartu yang valid
}
}
for (int i = 0; i < INVALID_CARD_COUNT; ++i) {
if (strcmp(invalid_cards[i].number, cardNumber) == 0) {
lcd.print("Kartu INVALID");
// Aktifkan LED merah dan bunyikan buzzer selama 3 detik
digitalWrite(LED_RED_PIN, HIGH);
tone(BUZZER_PIN, 500); // Frekuensi buzzer
delay(3000);
digitalWrite(LED_RED_PIN, LOW);
noTone(BUZZER_PIN); // Matikan suara buzzer
return; // Keluar dari loop setelah menemukan kartu yang tidak valid
}
}
lcd.print("Kartu Tidak Dikenali");
} else {
lcd.print("Format Salah");
delay(7000);
}
}