#include <WiFi.h> // library untuk mengakses WiFi
#include <DHTesp.h> // library untuk mengakses Sensor DHT
#include <ThingSpeak.h> // library untuk akses ke aplikasi ThingSpeak
#include <Wire.h> // library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // library untuk mengakses LCD melalui I2C
const int DHT_PIN = 15; // Inisialisasi sensor suhu
// Inisialisasi pin LED
const int RED_LED_PIN = 18;
const int GREEN_LED_PIN = 19;
const int BLUE_LED_PIN = 2;
const int YELLOW_LED_PIN = 23;
// Inisialisasi LCD menggunakan I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C dan jumlah kolom dan baris pada LCD
// Inisialisasi Wifi
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
WiFiClient client;
// Inisialisasi ThingSpeak
unsigned long myChannelNumber = 2;
const char* myWriteAPIKey = "CXAN3HWQAMWO8ET6";
const char* server = "api.thingspeak.com";
unsigned long lastTime = 0;
unsigned long timerDelay = 30000; // atur interval update ke ThingSpeak
float temperatureC;
float humidity;
DHTesp dhtSensor;
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
dhtSensor.getPin();
delay(10);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(BLUE_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi Tersambung!");
Serial.println(WiFi.localIP());
WiFi.mode(WIFI_STA);
// Nyalakan LED Kuning sebagai indikator data masuk
digitalWrite(YELLOW_LED_PIN, HIGH);
delay(2000);
digitalWrite(YELLOW_LED_PIN, LOW);
ThingSpeak.begin(client);
// Inisialisasi I2C
Wire.begin();
// Inisialisasi LCD melalui I2C
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
lcd.begin(16, 2); // Mengatur jumlah kolom dan baris pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperature:");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
}
void loop() {
temperatureC = dhtSensor.getTemperature();
Serial.print("Temperature (°C): ");
Serial.println(temperatureC);
humidity = dhtSensor.getHumidity();
Serial.print("Humidity (%): ");
Serial.println(humidity);
ThingSpeak.setField(1, String(temperatureC, 1)); // Mengonversi float ke String dengan 1 digit desimal
ThingSpeak.setField(2, String(humidity, 1)); // Mengonversi float ke String dengan 1 digit desimal
// Menampilkan data suhu dan kelembaban pada LCD
lcd.setCursor(10, 0); // Mengatur posisi cursor LCD
lcd.print(temperatureC, 1); // Menampilkan 1 digit desimal
lcd.print(" C");
lcd.setCursor(10, 1); // Mengatur posisi cursor LCD
lcd.print(humidity, 1); // Menampilkan 1 digit desimal
lcd.print(" %");
if (temperatureC > 29) {
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);
}
else if (temperatureC < 21) {
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, HIGH);
}
else {
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(BLUE_LED_PIN, LOW);
}
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) {
Serial.println("Update berhasil!.");
}
else {
Serial.println("Ada Masalah Saat Update. HTTP Kode Error " + String(x));
}
delay(timerDelay);
}