#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h> // Library untuk koneksi MQTT
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <Keypad.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define THINGSBOARD_SERVER "demo.thingsboard.io" // Ubah dengan alamat server ThingsBoard Anda
#define TOKEN "dwR97X6hwQqkJUJhqSI1" // Ubah dengan token akses akun Anda di ThingsBoard
#define DHTPIN 13 // Pin dimana sensor DHT terhubung
#define DHTTYPE DHT22 // Jenis sensor DHT (DHT22)
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dimensi layar LCD 16x2
float temperature, humidity;
WiFiClient wifiClient;
PubSubClient client(wifiClient);
const uint8_t x=4;
const uint8_t y=4;
uint8_t pinBaris [x]={19,18,5,17};
uint8_t pinKolom [y]={16,4,0,2};
char keys [x][y] = { {'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
Keypad k= Keypad(makeKeymap(keys),pinBaris,pinKolom,x,y);
String PINTersimpan = "1234";
String PINTerinput = "";
bool kesesuaianPIN = false;
void greetings() {
lcd.setCursor(0, 0);
lcd.print("Welcome");
lcd.setCursor(0, 1);
lcd.print("PIN :");
}
void setup() {
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
client.setServer(THINGSBOARD_SERVER, 1883);
dht.begin();
lcd.init();
lcd.backlight();
lcd.print("INITIALIZING");
delay(4000);
lcd.clear();
dht.begin();
greetings();
while (!kesesuaianPIN) {
char bacaKey = k.getKey();
if (bacaKey !=NO_KEY){
if (bacaKey == '*'){
if(PINTersimpan == PINTerinput){
kesesuaianPIN =true;
}
PINTerinput = "";
greetings();
} else {
PINTerinput = PINTerinput+bacaKey;
Serial.print(bacaKey);
lcd.print(bacaKey);
}
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
sendSensor();
delay(2000);
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP32Client", TOKEN, NULL)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void sendSensor() {
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.println("Temperature: " + String(temperature, 1) + "C");
Serial.println("Humidity: " + String(humidity, 1) + "%");
char attributes[100];
sprintf(attributes, "{\"temperature\":%.1f,\"humidity\":%.1f}", temperature, humidity);
client.publish("v1/devices/me/telemetry", attributes);
}