#include <WiFi.h>
#include <MQTT.h>
#include "DHTesp.h"
#include <NusabotSimpleTimer.h>
const int pin_red = 25;
const int pin_green = 26;
const int pin_blue = 27;
const int pin_dht = 15;
const int pin_lampu = 14;
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
// const char* mqtt_username = "devims";
// const char* mqtt_pass = "devims-c0b4";
WiFiClient net;
MQTTClient client;
DHTesp dhtSensor;
NusabotSimpleTimer timer;
void publishDHT() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
String temp = String(data.temperature);
String humid = String(data.humidity);
client.publish("unknown/smarthome/temp", temp, true, 1);
client.publish("unknown/smarthome/humi", humid, true, 1);
}
void subscribe(String &topic, String &data) {
if (topic == "unknown/smarthome/lampu") {
digitalWrite(pin_lampu, data == "on" ? HIGH : LOW);
}
}
void rgb(bool red, bool green, bool blue) {
digitalWrite(pin_red, red);
digitalWrite(pin_green, green);
digitalWrite(pin_blue, blue);
}
void connect() {
rgb(1, 0, 0);
Serial.print("Connecting to WiFi");
int timeout = 0;
while (WiFi.status() != WL_CONNECTED && timeout < 30) {
Serial.print(".");
delay(500);
timeout++;
}
if (WiFi.status() == WL_CONNECTED) {
rgb(0, 1, 0);
Serial.println("\nSuccessfully connected to Wi-Fi");
} else {
Serial.println("\nWi-Fi connection failed");
return;
}
Serial.print("Connecting to Broker");
timeout = 0;
while (!client.connect("Testing588DE0CA") && timeout < 30) {
Serial.print(".");
delay(500);
timeout++;
}
if (client.connected()) {
Serial.println("\nSuccessfully Connected to Broker");
rgb(0, 0, 1);
client.subscribe("unknown/smarthome/#");
client.publish("unknown/smarthome/588DECA", "Connected", true, 1);
} else {
Serial.println("\nFailed to Connect to Broker");
}
}
void setup() {
Serial.begin(115200);
pinMode(pin_red, OUTPUT);
pinMode(pin_green, OUTPUT);
pinMode(pin_blue, OUTPUT);
pinMode(pin_lampu, OUTPUT);
dhtSensor.setup(pin_dht, DHTesp::DHT22);
timer.setInterval(2000, publishDHT);
client.onMessage(subscribe);
WiFi.begin(ssid, pass);
client.begin("broker.emqx.io", net);
client.setWill("unknown/smarthome/588DECA", "Disconnected", true, 1);
connect();
}
void loop() {
timer.run();
client.loop();
if (!client.connected()) {
connect();
}
}