#include <Wire.h>
#include <RTClib.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
// ========== Konstanta dan Pin Setup ==========
#define DHT_PIN 15
#define DHT_TYPE DHT22
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASS ""
#define MQTT_BROKER "test.mosquitto.org"
#define MQTT_PORT 1883
DHT dht(DHT_PIN, DHT_TYPE);
RTC_DS1307 rtc;
// ========== Identitas ==========
String nama = "akhsan";
// ========== MQTT Setup ==========
WiFiClient esp_client;
PubSubClient mqtt_client(esp_client);
void setupWifi() {
Serial.print("Connecting to WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi!");
}
void reconnectMqtt() {
while (!mqtt_client.connected()) {
Serial.print("Connecting to MQTT...");
String client_id = "ESP32Client-" + String(random(0xffff), HEX);
if (mqtt_client.connect(client_id.c_str())) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(mqtt_client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
// ========== Setup ==========
void setup() {
Serial.begin(115200);
Wire.begin(8, 9); // SDA, SCL
if (!rtc.begin()) {
Serial.println("RTC tidak ditemukan!");
while (1);
}
if (!rtc.isrunning()) {
Serial.println("RTC belum berjalan, set waktu ke waktu kompilasi");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
dht.begin();
setupWifi();
mqtt_client.setServer(MQTT_BROKER, MQTT_PORT);
}
// ========== Tambah Offset +7 jam ==========
DateTime addHours(DateTime dt, int hours) {
uint32_t timestamp = dt.unixtime();
timestamp += hours * 3600;
return DateTime(timestamp);
}
// ========== Loop ==========
void loop() {
DateTime now = rtc.now();
DateTime now_gmt7 = addHours(now, 7);
char timestamp[20];
sprintf(timestamp, "%04d-%02d-%02d %02d:%02d:%02d",
now_gmt7.year(), now_gmt7.month(), now_gmt7.day(),
now_gmt7.hour(), now_gmt7.minute(), now_gmt7.second());
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (!mqtt_client.connected()) {
reconnectMqtt();
}
mqtt_client.loop();
String topic = "mqtt/" + nama + "/data";
String payload =
"{\"nama\":\"" + nama + "\","
"\"data\":{"
"\"temperature\":\"" + String(temperature) + "\","
"\"humidity\":\"" + String(humidity) + "\""
"},"
"\"timestamp\":\"" + String(timestamp) + "\""
"}";
bool result = mqtt_client.publish(topic.c_str(), payload.c_str());
Serial.println("Datetime : " + String(timestamp));
Serial.println("Temperature : " + String(temperature));
Serial.println("Humidity : " + String(humidity));
Serial.println("Data Pack : " + payload);
Serial.println("Publish Result: " + String(result ? "Success" : "Failed"));
Serial.println();
delay(5000);
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1