#include <WiFi.h>
#include "PubSubClient.h"
#include <ArduinoJson.h>
// Setting Awal MQTT
char *mqttServer = "broker.emqx.io";
int mqttPort = 1883;
String myClientID = "001";
String Topic = "iqbal/iot/jarak";
//Membuat Object MQTT Client dan Jenis Koneksi
WiFiClient wifi;
PubSubClient mqttClient(wifi);
// Sensor DHT
#define DHTPIN 4 // Pin data DHT
#define DHTTYPE DHT22 // Tipe sensor DHT (DHT11 atau DHT22 atau DHT21)
DHT dht(DHTPIN, DHTTYPE);
//jarak
//pinsensor jarak
#define PIN_TRIG 33
#define PIN_ECHO 32
char* ssid = "Wokwi-GUEST";
char* pass = "";
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
WiFi.mode(WIFI_STA); // Agar ESP32 menjadi mode Station
WiFi.begin(ssid,pass); // Meminta ESP untuk connect
while(WiFi.status() != WL_CONNECTED){
delay(100);
Serial.println("*");
}
Serial.println(" ESP 32 telah berhasil Connect");
// Memerintahkan EPS untuk tahu alamat broker
init_to_broker(mqttServer, mqttPort);
//Memerintahkan untuk Connect ke Broker
connect_to_broker(myClientID);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
//menghitung jarak
int duration = pulseIn(PIN_ECHO, HIGH);
int jarak = (duration / 58);
sendDataSensor(jarak);
delay(1000); // this speeds up the simulation
}
//Membuat Json Banyak Data untuk di Publish
void sendDataSensor(String topic, int jarak) {
StaticJsonDocument<100> doc;
char jsonBuffer[100];
serializeJson(doc, jsonBuffer);
mqttClient.publish(topic.c_str(), jsonBuffer);
}
//Fungsi untuk tahu alamat server dan port Broker
void init_to_broker(char* myMqttServer, int myMqttPort) {
mqttClient.setServer(myMqttServer, myMqttPort); // Mengatur detail broker target yang digunakan
}
//Fungsi untuk connect ke Broker
void connect_to_broker(String clientName) {
Serial.println("Connecting to MQTT Broker...");
String clientId = "ESP32Client-" + clientName;
mqttClient.connect(clientId.c_str()); // Connecting to Broker
while (!mqttClient.connected()) {
Serial.print("failed, rc=");
Serial.println(mqttClient.state());
Serial.println("Reconnecting to MQTT Broker..");
delay(1000);
}
Serial.print(clientId);
Serial.println(" Device to Broker Connected.");
}