#include <WiFi.h>
#include <MQTT.h>
#include <DHTesp.h>
#include <NusabotSimpleTimer.h>
DHTesp dhtSensor;
WiFiClient net;
MQTTClient client;
NusabotSimpleTimer timer;
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
// Variabel Pin GPIO
const int pinMerah = 25;
const int pinHijau = 26;
const int pinBiru = 27;
const int pinLED = 12;
const int DHT_PIN = 33;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(pinMerah, OUTPUT);
pinMode(pinHijau, OUTPUT);
pinMode(pinBiru, OUTPUT);
pinMode(pinLED, OUTPUT);
WiFi.begin(ssid, pass);
client.begin("broker.emqx.io",net);
client.onMessage(subscribe);
timer.setInterval(2000, publish);
connect();
}
void connect(){
Serial.print("Menghubungkan ke WiFi");
rgb(1,0,0);
while(WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(500);
}
Serial.println("Berhasil Terhubung ke WiFi");
rgb(0,1,0);
while(!client.connect("wokwi-device")){
delay(500);
}
rgb(0,0,1);
client.subscribe("nusabot/#", 1);
}
void rgb(bool red, bool green, bool blue){
digitalWrite(pinMerah, red);
digitalWrite(pinHijau, green);
digitalWrite(pinBiru, blue);
}
void publish() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
client.publish("nusabot/suhu", String(data.temperature, 2), false, 1);
client.publish("nusabot/kelembapan", String(data.humidity, 1), false, 1);
}
void subscribe(String &topic, String &data) {
if(topic == "nusabot/led"){
if(data == "nyala"){
digitalWrite(pinLED, 1);
} else {
digitalWrite(pinLED, 0);
}
}
}
void loop() {
client.loop();
timer.run();
//Fitur Reconnect
if(!client.connected()) {
connect();
}
delay(10); // this speeds up the simulation
}