#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include "DHT.h"
// Konfigurasi DHT22
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Konfigurasi LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Konfigurasi WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Server HTTP
WiFiServer server(80);
void setup() {
Serial.begin(115200);
// Memulai LCD
lcd.init();
lcd.backlight();
lcd.print("Init...");
// Memulai DHT22
dht.begin();
// Koneksi WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
Serial.println(WiFi.localIP()); // IP ESP32
lcd.clear();
lcd.print("WiFi Ready");
// Memulai server
server.begin();
}
void loop() {
// Membaca data sensor
float t = dht.readTemperature();
float h = dht.readHumidity();
// Cek apakah pembacaan sensor berhasil
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT sensor!");
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
} else {
// Menampilkan suhu dan kelembaban ke LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(h);
lcd.print(" %");
}
// Menangani koneksi klien
WiFiClient client = server.available();
if (client) {
Serial.println("Client Connected");
String request = client.readStringUntil('\r');
client.flush();
// Periksa endpoint
if (request.indexOf("GET /data") != -1) {
String jsonData = "{\"temperature\": " + String(t) + ", \"humidity\": " + String(h) + "}";
client.print("HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n");
client.print(jsonData);
Serial.println("Data Sent: " + jsonData);
}
client.stop();
Serial.println("Client Disconnected");
}
delay(2000); // Interval pembacaan
}