#include <WiFi.h>
#include <PubSubClient.h>
// --- KONFIGURASI JARINGAN & MQTT (ANONIM) ---
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
// Topik MQTT Harus sesuai dengan konfigurasi Node-RED
const char* temp_topic = "wokwi/iot/suhu";
const char* distance_topic = "wokwi/iot/jarak";
// Variabel
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
const long interval = 1000;
// --- FUNGSI JARINGAN DAN MQTT ---
void setup_wifi() {
WiFi.begin("Wokwi-GUEST", "");
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nWiFi connected.");
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Koneksi Anonim (tanpa user/pass)
String clientId = "ESP32Anon-" + String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" Retrying...");
delay(1000);
}
}
}
// --- FUNGSI UTAMA ---
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
if (millis() - lastMsg > interval) {
lastMsg = millis();
// 1. SIMULASI SUHU (20.00 hingga 35.00 C)
long randomTempInt = random(2000, 3501);
float temperature = (float)randomTempInt / 100.0;
char tempBuffer[6];
dtostrf(temperature, 4, 2, tempBuffer);
// 2. SIMULASI JARAK (10.00 hingga 80.00 cm)
long randomDistInt = random(1000, 8001);
float distance = (float)randomDistInt / 100.0;
char distBuffer[6];
dtostrf(distance, 4, 2, distBuffer);
// 3. KIRIM DATA KE TOPIC MASING-MASING
// Kirim Suhu
Serial.print("Publishing Temp: ");
Serial.println(tempBuffer);
client.publish(temp_topic, tempBuffer);
// Kirim Jarak
Serial.print("Publishing Distance: ");
Serial.println(distBuffer);
client.publish(distance_topic, distBuffer);
}
}