#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "broker.emqx.io";
const char* mqtt_topic = "water";
WiFiClient espClient;
PubSubClient client(espClient);
long A;
int duration;
#define trigger 15
#define echo 2
#define ledBlue 19
#define ledRed 18
#define ledYellow 5
#define ledGreen 4
#define buzzer 22
#define LCD_I2C_ADDR 0x27
LiquidCrystal_I2C lcd(LCD_I2C_ADDR, 16, 2);
void setup_wifi();
void reconnect();
void send_mqtt_data();
void display_lcd();
void sensor();
void logic();
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(ledBlue, OUTPUT);
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(buzzer, OUTPUT);
lcd.begin(16, 2);
setup_wifi();
client.setServer(mqtt_server, 1883);
}
void loop() {
sensor();
logic();
delay(1000);
Serial.println("Jarak: " + String(A));
if (!client.connected()) {
reconnect();
}
client.loop();
send_mqtt_data();
display_lcd();
}
void display_lcd() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
lcd.print(A);
}
void sensor() {
digitalWrite(trigger, LOW);
delayMicroseconds(2);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
duration = pulseIn(echo, HIGH);
A = duration / 29.41 / 2;
}
void logic() {
if (A > 50 && A < 100) {
digitalWrite(ledBlue, HIGH);
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
digitalWrite(buzzer, LOW);
} else if (A > 100 && A < 200) {
digitalWrite(ledBlue, HIGH);
digitalWrite(ledRed, HIGH);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
digitalWrite(buzzer, LOW);
} else if (A > 200 && A < 300) {
digitalWrite(ledBlue, HIGH);
digitalWrite(ledRed, HIGH);
digitalWrite(ledYellow, HIGH);
digitalWrite(ledGreen, LOW);
digitalWrite(buzzer, LOW);
} else if (A > 300) {
digitalWrite(ledBlue, HIGH);
digitalWrite(ledRed, HIGH);
digitalWrite(ledYellow, HIGH);
digitalWrite(ledGreen, HIGH);
digitalWrite(buzzer, HIGH);
}
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("WiFi connected - IP address: ");
Serial.println(WiFi.localIP()); // Your setup_wifi function here
}
void reconnect() {
// Your reconnect function here
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ArduinoClient")) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void send_mqtt_data() {
// Your send_mqtt_data function here
String payload = "Jarak: " + String(A);
client.publish(mqtt_topic, payload.c_str());
}