#include <WiFi.h>
//*********DHT22, library****************************************
#include "DHTesp.h"
#define lampuM 4
#define lampuK 0
#define lampuH 2
#define pump 27
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_username = "avisha";
const char* mqtt_password = "12345678";
//*********Ultrasonics Sensor, deklarasi pin**********************************
const int trigPin = 5; //attach pin GPIO5 ESP32 to pin Trig of JSN-SR04
const int echoPin = 18; // attach pin GPIO18 to pin Echo of JSN-SR04
//define sound speed in cm/uS
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701
#define CM_TO_M 0.01
long duration;
int distanceCm,LevelCm,distanceInch,LevelInch,distanceMeter,LevelMeter;
String data_topic;
String stMessage;
void wifiConnect() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Terhubung ke WiFi");
Serial.println("Alamat IP: ");
Serial.println(WiFi.localIP());
}
WiFiClient espClient;
#include "PubSubClient.h"
PubSubClient client(espClient);
const char* mqttServer = "broker.emqx.io";
int port = 1883;
char clientId[] = "MDN_ENG_PP#00110022024adfasdsfad&&%%$$##";
char topic_distanceCM[] = "mqtt/MDN_ENG^782112321hj9179rw54rwrw2712hjshj54rwrw2712hjshjasdfgjkl/distanceCM";
char topic_distanceMeter[] = "mqtt/MDN_ENG^782112321hj9179rw54rwrw2712hjshj54rwrw2712hjshjasdfgjkl/distanceMeter";
char topic_distanceInch[] = "mqtt/MDN_ENG^782112321hj9179rw54rwrw2712hjshj54rwrw2712hjshjasdfgjkl/distanceInch";
char topic_LevelCm[] = "mqtt/MDN_ENG^782112321hj9179rw54rwrw2712hjshj54rwrw2712hjshjasdfgjkl/LevelCm";
char topic_LevelMeter[] = "mqtt/MDN_ENG^782112321hj9179rw54rwrw2712hjshj54rwrw2712hjshjasdfgjkl/LevelMeter";
char topic_LevelInch[] = "mqtt/MDN_ENG^782112321hj9179rw54rwrw2712hjshj54rwrw2712hjshjasdfgjkl/LevelInch";
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
void mqttReconnect() {
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT Server... ");
if (client.connect(clientId, mqtt_username, mqtt_password)) {
Serial.print(clientId);
Serial.println(" Terhubung");
} else {
Serial.print("Gagal Terhubung, stataus=");
Serial.print(client.state());
Serial.println(" tunggu 2 detik");
delay(2000);
}
}
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Pesan Baru, Topik: ");
Serial.print(topic);
Serial.print(" Pesan: ");
data_topic = topic;
stMessage;
for (int i = 0; i < length; i++) {
stMessage += (char)message[i];
}
Serial.print(data_topic);
Serial.println(stMessage);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
wifiConnect();
client.setServer(mqttServer, port);
client.setCallback(callback);
}
unsigned const long jeda = 1000;
unsigned long zero = 0;
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculate the distance
distanceCm = duration * SOUND_SPEED/2;
LevelCm = map(distanceCm, 2,400,400,2);
distanceInch = distanceCm * CM_TO_INCH;
LevelInch = LevelCm * CM_TO_INCH;
distanceMeter = distanceCm * CM_TO_M;
LevelMeter = LevelCm * CM_TO_M;
if (!client.connected()) {
mqttReconnect();
}
client.loop();
if(millis() - zero >= jeda){
//Serial.println("Mqtt Publish..." +String(distanceCm)+" "+String(distanceInch));
Serial.print("Mqtt Publish...");
Serial.print(distanceCm);
Serial.print(",");
Serial.print(distanceMeter);
Serial.print(",");
Serial.print(distanceInch);
Serial.print(",");
Serial.print(LevelCm);
Serial.print(",");
Serial.print(LevelMeter);
Serial.print(",");
Serial.print(LevelInch);
Serial.print("\n");
snprintf (msg, MSG_BUFFER_SIZE, "%ld", distanceCm);
client.publish(topic_distanceCM, msg);
snprintf (msg, MSG_BUFFER_SIZE, "%ld", distanceMeter);
client.publish(topic_distanceMeter, msg);
snprintf (msg, MSG_BUFFER_SIZE, "%ld", distanceInch);
client.publish(topic_distanceInch, msg);
snprintf (msg, MSG_BUFFER_SIZE, "%ld", LevelCm);
client.publish(topic_LevelCm, msg);
snprintf (msg, MSG_BUFFER_SIZE, "%ld", LevelMeter);
client.publish(topic_LevelMeter, msg);
snprintf (msg, MSG_BUFFER_SIZE, "%ld", LevelInch);
client.publish(topic_LevelInch, msg);
zero = millis();
}
}