#include <WiFi.h>
#include "DHTesp.h"
#include "ThingSpeak.h"
#include <LiquidCrystal_I2C.h>
const int DHT_PIN = 15;
const int LEDGREEN_PIN = 18; // LED Merah
const int LEDRED_PIN = 19; // LED Hijau
const int BUZZER_PIN = 2;
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2722669;
const char* myWriteApiKey = "HSARF4YPJNGOAWZH";
const char* server = "api.thingspeak.com";
// Inisialisasi objek untuk sensor dan LCD
DHTesp dhtSensor;
WiFiClient client;
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define MAX_DATA 6
String id[MAX_DATA][2] = {
{"E280689401A9", "NINUN"},
{"E2000019060C", "ARMEN"},
{"G46RD9V40F3A", "PUTA"},
{"B71001B76894", "EGOL"},
{"1C81159073FD", "ABIN"},
{"B710D0186022", "LALA"},
};
int field = 0;
bool state = 0;
String card = " ";
String name = " ";
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(LEDGREEN_PIN, OUTPUT);
pinMode(LEDRED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
lcd.init();
lcd.backlight();
// Setup koneksi WiFi
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
Serial.print("Wifi Connecting.");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("Wifi connected!");
Serial.println("Local IP: " + String(WiFi.localIP()));
ThingSpeak.begin(client);
lcd.setCursor(0,0);
lcd.print("Wifi connected !");
lcd.setCursor(0,2);
lcd.print("Local IP: " + String(WiFi.localIP()));
ThingSpeak.begin(client);
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tap Code Card Patien");
Serial.println("input your id card");
}
void loop(){
static uint32_t lastTime = millis();
TempAndHumidity data = dhtSensor.getTempAndHumidity();
if(Serial.available()){
String _data = Serial.readString();
_data.trim();
Serial.println(_data);
card = "INVALID";
name = "UNKNOWN";
for(int i = 0; i < MAX_DATA; i++){
if (_data.equals(id[i][0])){
state = 1;
card = "VALID";
name = id[i][1];
field = i;
Serial.println("succes");
break;
}
}
if(state){
digitalWrite(LEDGREEN_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
digitalWrite(LEDGREEN_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
else {
digitalWrite(LEDRED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
digitalWrite(LEDRED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
lastTime = millis();
}
if(state){
state = sendData(field, data.temperature);
}
lcd.setCursor(0,1);
lcd.print("Suhu: " + String(data.temperature) + " ");
lcd.setCursor(0,2);
lcd.print("CARD: " + String(card) + " ");
lcd.setCursor(0,3);
lcd.print("NAME: " + String(name) + " ");
}
bool sendData(int _field, float _tmp){
static uint32_t _lastTime = millis();
if(millis() - _lastTime >= 10000){
_lastTime = millis();
ThingSpeak.setField(_field, _tmp);
int x = ThingSpeak.writeFields(myChannelNumber,myWriteApiKey);
Serial.println("field: " + String(_field));
Serial.println("temperature: " + String(_tmp));
if(x == 200){
Serial.println("Data pushed successfull");
}else{
Serial.println("Push error" + String(x));
}
Serial.println("---");
return 0;
}
return 1;
}