#include <WiFi.h>
#include <MQTT.h>
#include "DHT.h"
#define led1Pin 19
#define led2Pin 18
#define led3Pin 5
#define led4Pin 17
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
WiFiClient net;
MQTTClient client;
unsigned long lastMillis = 0;
// Pin GPIO untuk 4 LED
const int ledPins[] = {19, 18, 5, 17};
const int ledCount = 4; // Jumlah LED
int leddisco = 0;
void connect() {
Serial.print("checking wifi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.print("\nconnecting...");
while (!client.connect("wemos32", "alatsena", "aUlAPnAPteOEGJ7m")) {
Serial.print(".");
delay(1000);
}
Serial.println("\nconnected!");
client.subscribe("smarthome/lampu1");
client.subscribe("smarthome/lampu2");
client.subscribe("smarthome/lampu3");
client.subscribe("smarthome/lampu4");
client.subscribe("smarthome/disco");
//client.unsubscribe("smarthome/lampu1");
//client.unsubscribe("smarthome/lampu2");
//client.unsubscribe("smarthome/lampu3");
//client.unsubscribe("smarthome/lampu4");
}
// Kontrol
void messageReceived(String &topic, String &payload) {
if (topic == "smarthome/lampu1") {
if (payload == "1") {
digitalWrite(led1Pin, HIGH);
Serial.println("Lampu 1 Nyala");
} else {
digitalWrite(led1Pin, LOW);
Serial.println("Lampu 1 Mati");
}
}
if (topic == "smarthome/lampu2") {
if (payload == "1") {
digitalWrite(led2Pin, HIGH);
Serial.println("Lampu 2 Nyala");
} else {
digitalWrite(led2Pin, LOW);
Serial.println("Lampu 2 Mati");
}
}
if (topic == "smarthome/lampu3") {
if (payload == "1") {
digitalWrite(led3Pin, HIGH);
Serial.println("Lampu 3 Nyala");
} else {
digitalWrite(led3Pin, LOW);
Serial.println("Lampu 3 Mati");
}
}
if (topic == "smarthome/lampu4") {
if (payload == "1") {
digitalWrite(led4Pin, HIGH);
Serial.println("Lampu 4 Nyala");
} else {
digitalWrite(led4Pin, LOW);
Serial.println("Lampu 4 Mati");
}
}
if (topic == "smarthome/disco") {
if (payload == "1") {
leddisco = 1;
Serial.println("Lampu disco Nyala");
} else {
leddisco = 0;
for (int i = 0; i < ledCount; i++) {
digitalWrite(ledPins[i], LOW); // Matikan semua LED
}
Serial.println("Lampu disco Mati");
}
}
Serial.println(topic + ": " + payload);
}
String readDHT22Temperature() {
float t = dht.readTemperature();
if (isnan(t)) {
Serial.println("Failed to read from DHT22 sensor!");
return "";
} else {
return String(t);
}
}
String readDHT22Humidity() {
float h = dht.readHumidity();
if (isnan(h)) {
Serial.println("Failed to read from DHT22 sensor!");
return "";
} else {
return String(h);
}
}
// Fungsi untuk membuat LED berkedip bergantian selama 5 detik
void blinkLEDs(int durationMs) {
unsigned long startTime = millis(); // Waktu awal siklus
while (millis() - startTime < durationMs) { // Ulangi selama durasi yang diberikan
for (int i = 0; i < ledCount; i++) {
digitalWrite(ledPins[i], HIGH); // Nyalakan LED
delay(250); // Tunggu 250 ms
digitalWrite(ledPins[i], LOW); // Matikan LED
}
}
}
void setup() {
Serial.begin(115200);
// Set semua pin LED sebagai output
for (int i = 0; i < ledCount; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // Matikan semua LED saat awal
}
// Initialize DHT sensor
dht.begin();
// start wifi and mqtt
WiFi.begin(ssid, pass);
client.begin("alatsena.cloud.shiftr.io", net);
client.onMessage(messageReceived);
connect();
}
void loop() {
client.loop();
delay(10);
// check if connected
if (!client.connected()) {
connect();
}
// Pemantauan
// publish a message roughly every second.
if (millis() - lastMillis > 3000) {
lastMillis = millis();
// client.publish("smarthome/testsensor", "world");
client.publish("smarthome/suhu", readDHT22Temperature());
client.publish("smarthome/lembab", readDHT22Humidity());
}
if (leddisco == 1){
blinkLEDs(5000);
}
}