#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <ThingSpeak.h>
#include <ESP32Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const char ssid[] = "Wokwi-GUEST";
const char password[] = "";
WiFiClient client;
unsigned long myChannelNumber = 2024323; //Nomor channel Thingspeak
const char * myReadAPIKey = "ZW1318XCJ2NIXZV5"; //kode ReadAPIKey
#define LED 13
const int servoPin = 32;
int pos = 0;
Servo servo;
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
servo.attach(servoPin, 500, 2400);
pinMode (LED, OUTPUT);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.print("Connected to ");
Serial.print(ssid);
ThingSpeak.begin(client);
}
void loop() {
int statusCode = 0; //membuat statusCode bernilai nol kembali
long count = ThingSpeak.readLongField(myChannelNumber, 1, myReadAPIKey); //pembacaan nilai pada thingspeak di field motion
statusCode = ThingSpeak.getLastReadStatus();
if(statusCode == 200){
for (pos = 0; pos <= 180; pos += 1) {
servo.write(pos);
delay(15);
}
lcd.clear();
lcd.setCursor (0, 0);
lcd.print ("Lid Opened.");
delay(2000);
for (pos = 180; pos >= 0; pos -= 1) {
servo.write(pos);
delay(15);
}
lcd.setCursor (0, 0);
lcd.print ("Lid Closed.");
}
else{ //jika bukan 200 artinya mengalami error
Serial.println("Problem reading channel. HTTP error code " + String(statusCode));
}
int statusCodeLED = 0; //membuat statusCode bernilai nol kembali
float countHum = ThingSpeak.readFloatField(myChannelNumber, 2, myReadAPIKey); //pembacaan nilai pada thingspeak di field hum
statusCodeLED = ThingSpeak.getLastReadStatus();
if(statusCodeLED == 200){ //200 adalah kode status dari thingspeak
digitalWrite(LED,1);
lcd.setCursor (0, 1);
lcd.print ("Humidity High");
delay(2000);
digitalWrite(LED,0);
lcd.clear();
lcd.setCursor (0, 1);
lcd.print ("Humidity Low");
}
else{ //jika bukan 200 artinya mengalami error
Serial.println("Problem reading channel. HTTP error code " + String(statusCodeLED));
}
delay(1000);
}