#include <WiFi.h>
#include <MQTT.h>
#include "DHTesp.h"
#include <Wire.h>
#include <RTClib.h>
#include <NusabotSimpleTimer.h>
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
const char* mqtt_server = "test.mosquitto.org";
const char* mqtt_topic = "mqtt/affan_yuhady/data";
DHTesp dht;
RTC_DS1307 rtc;
WiFiClient net;
MQTTClient client;
#define DHTPIN 15
NusabotSimpleTimer timer;
const long interval = 5000;
void connectToWiFi() {
WiFi.begin(ssid, pass);
Serial.print("Menghubungkan ke WiFi");
while(WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(1000);
}
Serial.println("");
Serial.println("Berhasil Terhubung ke WiFi");
}
void connectToMQTT() {
Serial.print("Menghubungkan ke Broker");
while(!client.connect("98howeb")){
Serial.print(".");
delay(1000);
}
Serial.println("");
Serial.println("Berhasil Terhubung ke Server");
}
void sendData() {
float temp = dht.getTemperature();
float humi = dht.getHumidity();
if (isnan(temp) || isnan(humi)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
DateTime nowRTC = rtc.now();
char timestampUTC[20];
sprintf(timestampUTC, "%04d-%02d-%02d %02d:%02d:%02d", nowRTC.year(), nowRTC.month(), nowRTC.day(), nowRTC.hour(), nowRTC.minute(), nowRTC.second());
DateTime nowGMT7 = nowRTC + TimeSpan(7 * 3600);
char timestampGMT7[20];
sprintf(timestampGMT7, "%04d-%02d-%02d %02d:%02d:%02d", nowGMT7.year(), nowGMT7.month(), nowGMT7.day(), nowGMT7.hour(), nowGMT7.minute(), nowGMT7.second());
String payload = "{\"nama\":\"affan_yuhady\", \"data\":{\"temperature\":\"" + String(temp) + "\",\"humidity\":\"" + String(humi) + "\"}, \"timestamp\":\"" + String(timestampUTC) + "\"}";
boolean success = client.publish(mqtt_topic, payload);
Serial.println("Datetime : " + String(timestampGMT7));
Serial.println("Temperature : " + String(temp));
Serial.println("Humidity : " + String(humi));
Serial.println("Data Pack : " + payload);
Serial.println("Result Publish : " + String(success ? "Sukses" : "Gagal"));
}
void setup() {
Serial.begin(115200);
connectToWiFi();
client.begin(mqtt_server, net);
connectToMQTT();
dht.setup(DHTPIN, DHTesp::DHT22);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
timer.setInterval(interval, sendData);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
connectToWiFi();
}
if (!client.connected()){
connectToMQTT();
}
client.loop();
timer.run();
}