#include <Wire.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <DHT.h>
#include <RTClib.h>
void connectWifi();
void reconnect();
void publishData();
const char* ssid = "Redmi 10 2022";
const char* password = "Kocakgeming";
const char* broker = "test.mosquitto.org";
const char* nama_user = "Vicky";
String topic = "mqtt/" + String(nama_user) + "/data";
WiFiClient espClient;
PubSubClient client(espClient);
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 rtc;
void setup()
{
Serial.begin(115200);
dht.begin();
Wire.begin(8, 9);
rtc.begin();
connectWifi();
client.setServer(broker, 1883);
}
void loop()
{
if (!client.connected()) reconnect();
client.loop();
publishData();
delay(5000);
}
void connectWifi()
{
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
}
void reconnect()
{
while (!client.connected())
{
String clientId = "ESP32Client-" + String(random(0xffff), HEX);
if (!client.connect(clientId.c_str())) delay(5000);
}
}
void publishData()
{
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
DateTime now = rtc.now();
char timestamp_utc[20];
snprintf(timestamp_utc, sizeof(timestamp_utc),
"%04d-%02d-%02d %02d:%02d:%02d",
now.year(), now.month(), now.day(),
now.hour(), now.minute(), now.second());
DateTime now_gmt7 = now + TimeSpan(7 * 3600);
char timestamp_gmt7[20];
snprintf(timestamp_gmt7, sizeof(timestamp_gmt7),
"%04d-%02d-%02d %02d:%02d:%02d",
now_gmt7.year(), now_gmt7.month(), now_gmt7.day(),
now_gmt7.hour(), now_gmt7.minute(), now_gmt7.second());
StaticJsonDocument<200> jsonDoc;
jsonDoc["nama"] = nama_user;
JsonObject data = jsonDoc.createNestedObject("data");
data["temperature"] = temperature;
data["humidity"] = humidity;
jsonDoc["timestamp"] = timestamp_utc;
char jsonBuffer[256];
serializeJson(jsonDoc, jsonBuffer);
bool publishStatus = client.publish(topic.c_str(), jsonBuffer);
String resultPublish = publishStatus ? "Success" : "Failed";
Serial.println("Datetime : ", timestamp_gmt7);
Serial.println("Temperature : ", temperature);
Serial.println("Humidity : ", humidity);
Serial.println("Data Pack : ", jsonBuffer);
Serial.println()("Result Publish : ", resultPublish);
}