// PUBLISH SUBSCRIBE
#include <WiFi.h>
#include <MQTT.h>
#include "DHT.h"
const char ssid[] = "Wokwi-GUEST";
const char pass[] = "";
#define POT1 32
#define POT2 35
#define LED1 4
#define LED2 5
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
WiFiClient net;
MQTTClient client;
unsigned long lastMillis = 0;
int pot1; // meyimpan data pot
int pot2; // meyimpan data pot
void connect() {
Serial.print("checking wifi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.print("\nconnecting...");
while (!client.connect("qwerty-1234")) { // client id, bebas apapun
Serial.print(".");
delay(1000);
}
Serial.println("\nconnected!");
client.subscribe("mqtt/sensor/pot1");
client.subscribe("mqtt/sensor/pot2");
client.subscribe("mqtt/sensor/led1");
client.subscribe("mqtt/sensor/led2");
client.subscribe("mqtt/sensor/temp");
client.subscribe("mqtt/sensor/humi");
}
void messageReceived(String &topic, String &payload) {
Serial.println("incoming: " + topic + " - " + payload);
if(topic == "mqtt/sensor/led1" ){
// digitalWrite(4, payload.toInt()); => bisa pakai ini tapi data harus 1/0
if(payload == "1"){
digitalWrite(4, HIGH);
Serial.println("ON");
} else {
digitalWrite(4, LOW);
Serial.println("OFF");
}
}
if(topic == "mqtt/sensor/led2" ){
if(payload == "1"){
digitalWrite(5, HIGH);
Serial.println("ON");
} else {
digitalWrite(5, LOW);
Serial.println("OFF");
}
}
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, pass); // terhubung ke WiFi dulu
client.begin("broker.emqx.io", net); // terhubung ke broker kemudian
client.onMessage(messageReceived);
connect();
pinMode(POT1, INPUT);
pinMode(POT2, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
dht.begin();
}
void loop() {
client.loop(); // digunakan untuk eksekusi kode program mqtt secara terus menerus
delay(10); // fixes beberapa isu terkait stabilitas WiFi
if (!client.connected()) {
connect();
}
float temp = dht.readTemperature();
float humi = dht.readHumidity();
if (isnan(temp) || isnan(humi) ) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Serial.print(("kelembaban: "));
// Serial.print(kelembaban);
// Serial.print(F("% Suhu: "));
// Serial.print(suhu);
// Serial.println(F("C "));
pot1 = analogRead(32);
pot2 = analogRead(35);
// Serial.println(pot);
// publish a message roughly every second.
if (millis() - lastMillis > 2000) {
lastMillis = millis();
client.publish("mqtt/sensor/pot1", String(pot1));
client.publish("mqtt/sensor/pot2", String(pot2));
client.publish("mqtt/sensor/temp", String(temp));
client.publish("mqtt/sensor/humi", String(humi));
}
}