#include <WiFi.h>
#include <PubSubClient.h>
#include <ESP32Servo.h>
const char *ssid = "Wokwi-GUEST";
const char *password = "";
const char *mqttServer = "maqiatto.com";
const int mqttPort = 1883;
const char *mqttUser = "[email protected]";
const char *mqttPassword = "dickybayu";
WiFiClient espClient;
PubSubClient client(espClient);
const int trigPin1 = 4;
const int echoPin1 = 2;
const int trigPin2 = 18;
const int echoPin2 = 5;
const int trigPin3 = 21;
const int echoPin3 = 19;
const int trigPin4 = 13;
const int echoPin4 = 12;
const int trigPin5 = 14;
const int echoPin5 = 27;
const int trigPin6 = 26;
const int echoPin6 = 25;
const int pirPin1 = 33;
const int pirPin2 = 15;
const int servoPin1 = 23;
const int servoPin2 = 22;
Servo gerbang_masuk;
Servo gerbang_keluar;
int pirStatus1 = 0;
int pirStatus2 = 0;
void Parkir(int trigPin, int echoPin, const char *namaAreaParkir) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long durasi = pulseIn(echoPin, HIGH);
int jarak = durasi * 0.034 / 2;
String payload = String(namaAreaParkir);
if (jarak < 30) {
payload += " Terisi";
} else {
payload += " Kosong";
}
client.publish((mqttUser + String("/Lantai_1")).c_str(), payload.c_str());
}
void aturWiFi() {
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 terhubung");
Serial.println("Alamat IP: ");
Serial.println(WiFi.localIP());
}
void mulaiUlang() {
while (!client.connected()) {
Serial.print("Mencoba koneksi MQTT...");
if (client.connect("esp32Client", mqttUser, mqttPassword)) {
Serial.println("terhubung");
} else {
Serial.print("gagal, rc=");
Serial.print(client.state());
Serial.println(" coba lagi dalam 5 detik");
delay(5000);
}
}
}
void setup() {
Serial.begin(9600);
aturWiFi();
client.setServer(mqttServer, mqttPort);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
pinMode(trigPin4, OUTPUT);
pinMode(echoPin4, INPUT);
pinMode(trigPin5, OUTPUT);
pinMode(echoPin5, INPUT);
pinMode(trigPin6, OUTPUT);
pinMode(echoPin6, INPUT);
gerbang_masuk.attach(servoPin1);
gerbang_masuk.write(0);
gerbang_keluar.attach(servoPin2);
gerbang_keluar.write(0);
pinMode(pirPin1, INPUT);
pinMode(pirPin2, INPUT);
}
void loop() {
if (!client.connected()) {
mulaiUlang();
}
client.loop();
pirStatus1 = digitalRead(pirPin1);
pirStatus2 = digitalRead(pirPin2);
if (pirStatus1 == HIGH) {
gerbang_masuk.write(90);
delay(1000);
Serial.println("111");
} else {
gerbang_masuk.write(0);
delay(1000);
}
if (pirStatus2 == HIGH) {
gerbang_keluar.write(90);
delay(1000);
} else {
gerbang_keluar.write(0);
delay(1000);
}
Parkir(trigPin1, echoPin1, "A1");
Parkir(trigPin2, echoPin2, "A2");
Parkir(trigPin3, echoPin3, "A3");
Parkir(trigPin4, echoPin4, "B1");
Parkir(trigPin5, echoPin5, "B2");
Parkir(trigPin6, echoPin6, "B3");
}