/*************************
SMART GORA
Created by: Muhammad Zulfikri, M.T
************************/
#include <WiFi.h>
#include <WiFiClient.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
// menambahkan library lcd i2c dan DHT22
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// PEMBATAS!!!!!!! //
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASS ""
#define MQTT_SERV "io.adafruit.com"
#define MQTT_PORT 1883
#define MQTT_NAME "aristavonbarin777"
#define MQTT_PASS "aio_YGZh77OIJiE9VWwkws29dLyjkOUw"
// dhtpin dan lcd 16x2
#define DHTPIN 23
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// PEMBATAS atau PENANDA!!!!!!!!//
//Relays for switching appliances
#define Relay 17 //Pin Number for Light
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS);
Adafruit_MQTT_Subscribe Light = Adafruit_MQTT_Subscribe(&mqtt, MQTT_NAME "/feeds/arista-von-barin");
Adafruit_MQTT_Publish LightPublish = Adafruit_MQTT_Publish(&mqtt, MQTT_NAME "/feeds/arista-von-barin");
Adafruit_MQTT_Publish Suhu = Adafruit_MQTT_publish(&mqtt, MQTT_NAME "/feeds/arista-von-barin")
Adafruit_MQTT_Publish Kelembapan = Adafruit_MQTT_publish(&mqtt, MQTT_NAME "/feeds/arista-von-barin")
// variabel suhu dan kelembapan untuk dht22//
float suhu;
float kelembapan;
// PENANDA!!!!!!!!!!!!//
void setup() {
lcd.init();
lcd.backlight();
lcd.print("UTS Syahrul");
lcd.setCursor(0, 1);
lcd.print("Univ Bumigora");
delay(3000); // delay 3 detik = 3000ms
lcd.clear(); // lcd di clear terlebih dahulu
lcd.setCursor(0, 0);
lcd.print("S:");
lcd.setCursor(0, 1);
lcd.print("K:");
dht.begin(); // Mulai DHT sensor
// put your setup code here, to run once:
Serial.begin(9600);
//Connect to WiFi
Serial.print("\n\nConnecting Wifi... ");
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
}
Serial.println("OK!");
// initialize the LED pin as an output
pinMode(Relay, OUTPUT);
// Setup MQTT subscription for time feed.
mqtt.subscribe(&Light);
}
void MQTT_connect()
{
int8_t ret;
if (mqtt.connected())
{
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) // connect will return 0 for connected
{
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0)
{
while (1);
}
}
Serial.println("MQTT Connected!");
}
void loop() {
// variabel suhu dan kelembapan dibaca
suhu = dht.readTemperature();
kelembapan = dht.readHumidity();
lcd.setCursor(3, 0);
lcd.print(suhu);
lcd.print("C ");
lcd.setCursor(3, 1);
lcd.print(kelembapan);
lcd.print("% ");
// Kondisi untuk suhu atau kelembapan yang melebihi batas
if (suhu > 50 || kelembapan > 60) {
// Menyalakan lampu di perangkat dan mengirim status "ON" ke Adafruit IO
digitalWrite(Relay, HIGH); // Lampu menyala
if (!LightPublish.publish("ON")) { // Mengirim data ke Adafruit IO
Serial.println(F("Gagal mengirim status lampu ON ke Adafruit IO"));
} else {
Serial.println(F("Berhasil mengirim status lampu ON ke Adafruit IO"));
}
} else {
// Mematikan lampu di perangkat dan mengirim status "OFF" ke Adafruit IO
digitalWrite(Relay, LOW); // Lampu mati
if (!LightPublish.publish("OFF")) { // Mengirim data ke Adafruit IO
Serial.println(F("Gagal mengirim status lampu OFF ke Adafruit IO"));
} else {
Serial.println(F("Berhasil mengirim status lampu OFF ke Adafruit IO"));
}
}
// PEMBATAS!!!!!!!!!!! //
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000)))
{
if (subscription == &Light)
{
Serial.print("Light: ");
Serial.println((char*) Light.lastread);
if (!strcmp((char*) Light.lastread, "ON"))
{
digitalWrite(Relay, HIGH);
delay(2000);
}
else
{
digitalWrite(Relay, LOW);
delay(2000);
}
}
}
}