#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// Ganti dengan kredensial WiFi Anda
const char* ssid = "kutynidx";
const char* password = "kuznetsov";
// Ganti dengan alamat broker MQTT Anda
const char* mqtt_server = "192.168.1.100"; // IP Gateway / Broker lokal
const int mqtt_port = 1883;
const char* mqtt_topic = "node/data";
// Pin Sensor
const int trigPin = 18;
const int echoPin = 5;
const int ldrPin = 12;
// MQTT & WiFi
WiFiClient espClient;
PubSubClient client(espClient);
// Variabel non-blocking
unsigned long lastSendTime = 0;
const unsigned long interval = 1000; // 1 detik
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Menghubungkan ke ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi terkoneksi");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Loop sampai terkoneksi ke broker
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT...");
String clientId = "ESP32Node-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("terhubung");
} else {
Serial.print("gagal, rc=");
Serial.print(client.state());
Serial.println(" mencoba lagi dalam 5 detik");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long currentMillis = millis();
if (currentMillis - lastSendTime >= interval) {
lastSendTime = currentMillis;
// Baca LDR
int ldrValue = analogRead(ldrPin);
// Baca Ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float duration_us = pulseIn(echoPin, HIGH, 30000); // Timeout 30ms
float distance_cm = duration_us * 0.034 / 2;
// Buat JSON string
StaticJsonDocument<128> doc;
doc["ldr"] = ldrValue;
doc["distance"] = distance_cm;
char buffer[128];
serializeJson(doc, buffer);
// Kirim ke MQTT
client.publish(mqtt_topic, buffer);
Serial.println(buffer);
}
}
// #include <Wire.h>
// const int trigPin = 18;
// const int echoPin = 5;
// const int ldrPin = 12;
// float adcValue = 0;
// float duration_us, distance_cm;
// void setup() {
// // put your setup code here, to run once:
// Serial.begin(9600);
// pinMode(trigPin, OUTPUT);
// pinMode(echoPin, INPUT);
// }
// void loop() {
// adcValue = analogRead(ldrPin);
// digitalWrite(trigPin, HIGH);
// delay(10); // this speeds up the simulation
// digitalWrite(trigPin, LOW);
// duration_us = pulseIn(echoPin, HIGH);
// distance_cm = 0.017 * duration_us;
// Serial.print("Nilai ADC: ");
// Serial.println(adcValue);
// Serial.println("Distance: ");
// Serial.print(distance_cm);
// Serial.print(" cm");
// delay(1000);
// }