#include <DHT.h> // library sensor
#include <WiFi.h> // library wifi
#include <LiquidCrystal_I2C.h> // library LCD I2C
#include <HTTPClient.h> // library httpclient
#include <Wire.h> // library wire
#define TEMPERATURE_THRESHOLD_ON 15 // Threshold suhu untuk menyalakan relay ke-1
#define TEMPERATURE_THRESHOLD_OFF 35 // Threshold suhu untuk menyalakan relay ke-1
#define DHT_PIN 27 // Pin untuk sensor dht22
#define RELAY_PIN 18 // Pin untuk relay 1 heater
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C dan ukuran LCD
DHT dht(DHT_PIN, DHT22);
const char* server = "api.thingspeak.com";
const char* apiKey = "RPOHGSZW9YQDWJ2M";
const char* ssid = "Wokwi-GUEST";
const char* password = "";
void setup() {
// Setup awal sensor
dht.begin();
// Setup pin relay sebagai output ppada serial monitor
pinMode(RELAY_PIN, OUTPUT);
Serial.begin(115200);
// setup Connect ke WiFi
connectToWiFi();
// Setup tampilan lcd
lcd.init();
lcd.setCursor(0, 0);
lcd.print("suhu: ");
lcd.setCursor(0, 1);
lcd.print("kelmbpn: ");
lcd.setCursor(0, 2);
}
void connectToWiFi() { //fungsi connect ke wifi
Serial.println("menghubungkan ke WiFi...");
WiFi.begin(ssid, password);
int retryCount = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
retryCount++;
if (retryCount > 10) {
Serial.println();
Serial.println("gagal terhubung ke WiFi");
return;
}
}
Serial.println();
Serial.println("terhubung ke WiFi...!");
}
void loop() {
// membaca suhu dan kelembapan
float temp = dht.readTemperature();
float humidity = dht.readHumidity();
// menampilkan suhu dan kelembapan di LCD I2C
lcd.setCursor(6, 0);
lcd.print(temp);
lcd.print("C ");
lcd.setCursor(10, 1);
lcd.print(humidity);
lcd.print("% ");
// menampilkan suhu dan kelembapan di Serial Monitor
Serial.print("suhu: ");
Serial.print(temp);
Serial.print(" °C ");
Serial.print("kelembapan udara: ");
Serial.print(humidity);
Serial.println(" % ");
// kontrol relay berdasarkan suhu
if (temp <= TEMPERATURE_THRESHOLD_ON) {
digitalWrite(RELAY_PIN, HIGH); // relay akan hidup
} else if (temp >= TEMPERATURE_THRESHOLD_OFF){
digitalWrite(RELAY_PIN, LOW); // relay akan mati
}
// transfer data ke Thingspeak
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://";
url += server;
url += "/update?api_key=";
url += apiKey;
url += "&field1=";
url += String(temp);
url += "&field2=";
url += String(humidity);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.println("Data terkirim");
} else {
Serial.println("gagal mengirim data");
}
http.end();
} else {
Serial.println("WiFi tidak tersambung, menghubungkan kembali...");
connectToWiFi();
}
delay(3000);
}