/***********************************************************************
SMART GORA
Created by: Muhammad Zulfikri, M.T
**********************************************************************/
#include <WiFi.h>
#include <WiFiClient.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASS ""
#define MQTT_SERV "io.adafruit.com"
#define MQTT_PORT 1883
#define MQTT_NAME "smartgora"
#define MQTT_PASS "aio_oUbK833LrzfhKidMCx56s5q1WF1r"
//Relays for switching appliances
#define Relay 17 //Pin Number for Light
#define DHTPIN 13 // Set the pin connected to the DHT22 data pin
#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C dan ukuran LCD (16x2)
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS);
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, MQTT_NAME "/feeds/Temperature");
Adafruit_MQTT_Subscribe Light = Adafruit_MQTT_Subscribe(&mqtt, MQTT_NAME "/feeds/Light");
void setup() {
// 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);
// Initialize the dht22
dht.begin();
// Inisialisasi LCD I2C
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Praktikum");
lcd.setCursor(0, 1);
lcd.print("Pemr. Sistem");
delay(2000);
}
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() {
MQTT_connect();
float temp = dht.readTemperature();
Serial.print("nilai temp : ");
Serial.print(temp, 1);
Serial.println("°C ");
delay(2000);
lcd_show();
if (temp>30) { // Jika suhu lebih dari 30°C
digitalWrite(Relay, HIGH);
} else {
digitalWrite(Relay, LOW);
}
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);
}
}
}
temperature.publish (temp, 1);
delay(500);
}
void lcd_show()
{
float temp = dht.readTemperature();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp, 1);
lcd.print("C ");
delay(500);
}