#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
#include <PubSubClient.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int DHT_PIN = 15;
DHTesp dht;
float suhu = 0;
float kelembaban = 0;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "iotpintar.net";
const char* mqtt_user = "Intan Adilla";
const char* mqtt_password = "";
const char* mqtt_topic = "polines/IK2B/33422110";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.setup(DHT_PIN, DHTesp::DHT22);
connectWiFi();
client.setServer(mqtt_server, 1883);
lcd.init();
lcd.backlight();
lcd.setCursor(6, 0);
lcd.print("Deteksi");
lcd.setCursor(1, 1);
lcd.print("Suhu & kelembapan");
lcd.setCursor(0, 2);
lcd.print("Dibuat oleh Intan");
lcd.setCursor(3, 3);
lcd.print("3.34.22.1.10");
delay(3000);
lcd.clear();
}
void loop() {
TempAndHumidity data = dht.getTempAndHumidity();
suhu = data.temperature;
kelembaban = data.humidity;
if (!client.connected()) {
reconnect();
}
Serial.println("Temperatur: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
publishData();
delay(2000);
// print LCD
lcd.backlight();
lcd.setCursor(5, 0);
lcd.print("Monitoring ");
lcd.setCursor(1, 1);
lcd.print("Suhu & Kelembapan");
// print suhu di lcd
lcd.setCursor(0, 2);
lcd.print("Suhu: " + String(data.temperature, 2) + " C");
// print kelembaban di lcd
lcd.setCursor(0, 3);
lcd.print("Kelembaban: " + String(data.humidity, 1) + "%");
delay(4000);
lcd.clear();
}
void connectWiFi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
}
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP32Client", mqtt_user, mqtt_password)) {
Serial.println("Connected to MQTT Broker");
} else {
delay(5000);
}
}
}
void publishData() {
char tempStr[10];
char humStr[10];
dtostrf(suhu, 6, 2, tempStr);
dtostrf(kelembaban, 6, 2, humStr);
String topic_humidity = "polines/IK2B/33422110/RH";
String topic_temperature = "polines/IK2B/33422110/RT";
client.publish(topic_humidity.c_str(), String(humStr).c_str());
client.publish(topic_temperature.c_str(), String(tempStr).c_str());
}