#include <ThingSpeak.h>
#include <WiFi.h>
#include <ESP32Servo.h>
#include <Stepper.h>
#include <LiquidCrystal_I2C.h>
const int stepsPerRevolution = 600;
const char ssid[] = "Wokwi-GUEST";
const char password[] = "";
char server [] = "api.thingspeak.com";
unsigned long channelID = 2143207;
char readAPIKey[] = "AI3DDZBWW6J1FJ61";
unsigned int field_suhu = 1;
unsigned int field_kelembaban = 2;
unsigned int field_tinggi = 3;
unsigned int field_cahaya = 4;
unsigned int field_PIR = 5;
const int led_lampu = 18;
const int led_alarm = 19;
const int buzzer = 23;
const int servoPin = 32;
Stepper stepper_tirai(stepsPerRevolution, 14, 27, 26, 25);
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
int suhu;
int kelembaban;
int tinggi;
int cahaya;
int PIR;
int pos = 0;
WiFiClient client;
Servo servo_pakan;
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(led_lampu, OUTPUT);
pinMode(led_alarm, OUTPUT);
pinMode(buzzer, INPUT);
servo_pakan.attach(servoPin, 500, 2400);
stepper_tirai.setSpeed(80);
lcd.init();
lcd.backlight();
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print("-");
}
Serial.println("Connected");
ThingSpeak.begin(client);
delay(1000);
}
void loop() {
delay(20000);
Serial.println("Waiting...");
suhu = readTSData(channelID, field_suhu);
kelembaban = readTSData(channelID, field_kelembaban);
tinggi = readTSData(channelID, field_tinggi);
cahaya = readTSData(channelID, field_cahaya);
PIR = readTSData(channelID, field_PIR);
lcd.setCursor(0,0);
lcd.print("Suhu: ");
lcd.print(suhu);
lcd.setCursor(0,1);
lcd.print("Kelembaban: ");
lcd.print(kelembaban);
lcd.setCursor(0,2);
lcd.print("T Pakan: ");
lcd.print(suhu);
lcd.setCursor(0,3);
lcd.print("Cahaya: ");
lcd.print(cahaya);
lcd.setCursor(12,3);
lcd.print("Detec: ");
lcd.print(PIR);
if(suhu < 18){
digitalWrite(led_lampu, HIGH);
}else{
digitalWrite(led_lampu, LOW);
}
if(tinggi >= 200){
servo_pakan.write(180);
delay(15);
}else{
servo_pakan.write(90);
delay(15);
}
if(cahaya >= 500 && pos == 0){
stepper_tirai.step(stepsPerRevolution);
pos = 1;
delay(500);
}else if(cahaya < 500 && pos == 1){
stepper_tirai.step(-stepsPerRevolution);
pos = 0;
delay(500);
}else if(cahaya >= 500 && pos == 1){
delay(500);
}else if(cahaya < 500 && pos == 0){
delay(500);
}
if(PIR == 1){
digitalWrite(buzzer, HIGH);
digitalWrite(led_alarm, HIGH);
}else{
digitalWrite(buzzer, LOW);
digitalWrite(led_alarm, LOW);
}
}
float readTSData(long TSChannel, unsigned int TSField){
int data = ThingSpeak.readFloatField(TSChannel, TSField, readAPIKey);
Serial.println("Data read from Thingspeak : " + String(data));
return data;
}