#include <WiFi.h>
#include <HTTPClient.h>
const char ssid[] = "Wokwi-GUEST";
const char password[] = "";
HTTPClient http;
WiFiClient client;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <ESP32Servo.h>
Servo servohum, servotemp;
const int servohumPin = 13;
const int servotempPin = 12;
#include "ThingSpeak.h"
unsigned long myChannelNumber = 2024376; //Nomor channel Thingspeak
const char * myReadAPIKey = "K8Y7DJREJ64DU5T9"; //kode ReadAPIKey
int statusCode = 0;
unsigned int HumidityFieldNumber = 2;
unsigned int TemperatureFieldNumber = 3;
float hum=0;
float temp=0;
void print_lcd(){
lcd.setCursor(0, 0);
lcd.print("Humidity: ");
lcd.print(hum);
lcd.print("%");
lcd.setCursor(0, 1);
lcd.print("Temperature: ");
lcd.print(temp);
lcd.print("%");
}
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
servohum.attach(servohumPin, 500, 2400);
servotemp.attach(servotempPin, 500, 2400);
servohum.write(0);
servohum.write(0);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected");
ThingSpeak.begin(client);
}
void loop() {
int statusCode = 0;
hum = ThingSpeak.readFloatField(myChannelNumber, HumidityFieldNumber, myReadAPIKey);
temp = ThingSpeak.readFloatField(myChannelNumber, TemperatureFieldNumber, myReadAPIKey);
statusCode = ThingSpeak.getLastReadStatus();
if(statusCode == 200){
Serial.println("Humidity: " + String(hum));
Serial.println("Temperature: " + String(temp));
}
else{
Serial.println("Problem reading channel. HTTP error code " + String(statusCode));
}
print_lcd();
int maks = hum;
if(maks < temp){
maks = temp;
}
for(int i = 1;i<=maks ;i++){
if(i<=hum){
servohum.write(i);
}
if(i<=temp){
servotemp.write(i);
}
}
delay(15000); // No need to read the counter too often.
}