/* ABE 80 Exercise 8
Introduction to Internet of Things (IoT) Projects
Submitted by: Krizanrea Videl P. Batin
November 20, 2023
*/
#include <DHTesp.h> // REF: https://wokwi.com/projects/322410731508073042
#include <ESP32Servo.h> // REF: https://wokwi.com/projects/323706614646309460
#include <LiquidCrystal_I2C.h> // For wiring: https://www.esp32.com/viewtopic.php?t=23659
#include <WiFi.h> // REF: https://wokwi.com/projects/305569599398609473
#include <ThingSpeak.h>
const int DHT_PIN = 15;
const int servoPIN = 2;
DHTesp dhtSensor;
Servo myservo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
WiFiClient client; // REF: https://www.arduino.cc/reference/en/libraries/wifi/wificlient/
const char* ssid = "Wokwi-GUEST";
const char* pass = ""; // REF: https://www.arduino.cc/reference/en/libraries/wifi/wifi.begin/
unsigned long myChannelNumber = 2342614;
const char* myWriteAPIKey = "78IO9HQQT8GKU71P";
const char* server = "api.thingspeak.com";
int temp;
int hum;
int pos = 0;
void setup() {
Serial.begin(9600);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
myservo.attach(servoPIN, 500, 2400);
lcd.init();
lcd.backlight();
WiFi.begin(ssid, pass);
while(WiFi.status() != WL_CONNECTED){ // REF: https://www.arduino.cc/reference/en/libraries/wifi/wifi.status/
Serial.print(".");
delay (100);
}
Serial.println("WiFi Connected!");
Serial.println("");
WiFi.mode(WIFI_STA); // REF: https://randomnerdtutorials.com/esp32-useful-wi-fi-functions-arduino/
ThingSpeak.begin(client);
}
void loop() {
lcd.setCursor(0,0);
lcd.print("ABE80");
lcd.setCursor(0,1);
lcd.print("EXER8");
temp = dhtSensor.getTemperature();
Serial.print("Temperature, C = ");
Serial.println(temp);
lcd.setCursor(8,0);
lcd.print("T,C = ");
lcd.print(temp);
hum = dhtSensor.getHumidity();
Serial.print("Humidity, % = ");
Serial.println(hum);
lcd.setCursor(8,1);
lcd.print("H,% = ");
lcd.print(hum);
if(WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to reconnect.");
while (WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid, pass);
Serial.print(". ");
delay (100);
}
Serial.println("Connected.");
}
if(temp >= 35 && hum >= 85){
for (pos = 0; pos <= 180; pos += 1) {
myservo.write(pos);
delay (15);
}
for (pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay (15);
}
}
ThingSpeak.setField (1, temp);
ThingSpeak.setField (2, hum);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (x == 200) {
Serial.println("Channel update successful.");
}
else {
Serial.println(("Problem updating channel. HTTP error code ") + String (x));
}
Serial.println();
delay(20000);
lcd.clear();
}