#include <WiFi.h>
#include <MQTT.h>
#include "DHT.h"
const char ssid[]="Wokwi-GUEST";
const char pass[]="";
WiFiClient net;
MQTTClient client;
#define dhtLuar 5
#define dhtDalam 4
#define ruangTamu 27
#define kamar 26
#define dapur 25
DHT dht1 (dhtLuar, DHT22);
DHT dht2 (dhtDalam, DHT22);
const int trigPin = 23;
const int echoPin = 22;
long duration;
int distance,levelAir;
unsigned long lastMillis = 0;
void connect(){
//Menghubungkan ke WiFi
Serial.print("Checking Wifi");
while(WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(1000);
}
Serial.println("");
Serial.println("Sukses Terhubung ke WiFi");
// Menghubungkan ke Broker
Serial.print("Checking Broker");
while (!client.connect("")){
Serial.print(".");
delay(1000);
}
Serial.println("");
Serial.println("Sukses Terhubung ke Server MQTT");
client.subscribe("labsman/iot/202413/#", 1);
}
void tamuON(){
client.publish("labsman/iot/202413/ruangTamu/status", "1", true, 1);
}
void kamarON(){
client.publish("labsman/iot/202413/kamar/status", "1", true, 1);
}
void dapurON(){
client.publish("labsman/iot/202413/dapur/status", "1", true, 1);
}
void tamuOFF(){
client.publish("labsman/iot/202413/ruangTamu/status", "0", true, 1);
}
void kamarOFF(){
client.publish("labsman/iot/202413/kamar/status", "0", true, 1);
}
void dapurOFF(){
client.publish("labsman/iot/202413/dapur/status", "0", true, 1);
}
void subscribeData(String &topic, String &data){
Serial.print("Topic: ");
Serial.println(topic);
Serial.print("Data: ");
Serial.println(data);
if(topic == "labsman/iot/202413/ruangTamu"){
digitalWrite(ruangTamu, data.toInt());
if (data == "1"){
tamuON();
}
if (data == "0"){
tamuOFF();
}
}
if(topic == "labsman/iot/202413/kamar"){
digitalWrite(kamar, data.toInt());
if (data == "1"){
kamarON();
}
if (data == "0"){
kamarOFF();
}
}
if(topic == "labsman/iot/202413/dapur"){
digitalWrite(dapur, data.toInt());
if (data == "1"){
dapurON();
}
if (data == "0"){
dapurOFF();
}
}
}
void greenON(){
client.publish("labsman/iot/202413/levelAir","green on", true, 1);
client.publish("labsman/iot/202413/levelAir","yellow off", true, 1);
client.publish("labsman/iot/202413/levelAir","red off", true, 1);
}
void yellowON(){
client.publish("labsman/iot/202413/levelAir","green off", true, 1);
client.publish("labsman/iot/202413/levelAir","yellow on", true, 1);
client.publish("labsman/iot/202413/levelAir","red off", true, 1);
}
void redON(){
client.publish("labsman/iot/202413/levelAir","green off", true, 1);
client.publish("labsman/iot/202413/levelAir","yellow off", true, 1);
client.publish("labsman/iot/202413/levelAir","red on", true, 1);
}
void publish(){
//Suhu Dalam Rumah
float hum1 = dht1.readHumidity();
float temp1 = dht1.readTemperature();
//Suhu Luar Rumah
float hum2 = dht2.readHumidity();
float temp2 = dht2.readTemperature();
Serial.print("Suhu Ruangan: ");
Serial.print(temp1);
Serial.println(" C ");
Serial.print("Suhu Luar: ");
Serial.print(temp2);
Serial.println(" C ");
ultrasonic();
client.publish("labsman/iot/202413/dht1/temp", String(temp1), true, 1);
client.publish("labsman/iot/202413/dht1/humi", String(hum1), true, 1);
client.publish("labsman/iot/202413/dht2/temp", String(temp2), true, 1);
client.publish("labsman/iot/202413/dht2/humi", String(hum2), true, 1);
client.publish("labsman/iot/202413/monitor/cm", String(levelAir), true, 1);
if (levelAir >= 150){
greenON();
} else if (levelAir >= 50 && levelAir < 150){
yellowON();
} else if(levelAir < 50){
redON();
}
}
void ultrasonic(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034/2;
levelAir = 200 - distance;
Serial.print("Level Air: ");
Serial.println(levelAir);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
WiFi.begin(ssid, pass);
Serial.println("Kelas IOT-TUGAS AKHIR - Smarthome dengan MQTT Panel");
pinMode(ruangTamu,OUTPUT);
pinMode(kamar,OUTPUT);
pinMode(dapur, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
dht1.begin();
dht2.begin();
client.begin("141.11.160.14", net);
client.onMessage(subscribeData);
connect();
}
void loop() {
client.loop();
if (millis()- lastMillis > 5000){
lastMillis = millis();
publish();
}
delay(10); // this speeds up the simulation
}