#include "UbidotsEsp32Mqtt.h"
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
const char* UBIDOTS_TOKEN = "BBUS-9kZaFEPVMPe8VnnHGKIAjG4oByRo2a"; // Masukkan token Ubidots
const char* WIFI_SSID = "Wokwi-GUEST"; // Masukkan SSID Wi-Fi
const char* WIFI_PASS = ""; // Masukkan password Wi-Fi
const char *DEVICE_LABEL = "esp32"; // Label perangkat di Ubidots
const char *VARIABLE_LABEL = "suhu"; // Label variabel suhu di Ubidots
const char *VARIABLE_LABEL2 = "humidity"; // Label variabel kelembaban di Ubidots
const int PUBLISH_FREQUENCY = 5000; // Frekuensi update dalam milidetik
unsigned long lastPublishTime = 0;
Ubidots ubidots(UBIDOTS_TOKEN);
// void callback(char *topic, byte *payload, unsigned int length) {
// Serial.print("Pesan diterima [");
// // Serial.print(topic);
// Serial.print("] ");
// for (int i = 0; i < length; i++) {
// Serial.print((char)payload[i]);
// }
// Serial.println();
// }
void setup() {
Serial.begin(115200);
dht.begin();
// Hubungkan ke Wi-Fi
Serial.print("Menghubungkan ke Wi-Fi");
ubidots.connectToWifi(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nWi-Fi Terhubung!");
ubidots.setCallback(callback);
ubidots.setup();
ubidots.reconnect();
}
void loop() {
// Periksa koneksi ke Ubidots MQTT
if (!ubidots.connected()) {
Serial.println("Koneksi MQTT terputus, mencoba menghubungkan kembali...");
ubidots.reconnect();
}
// Baca data dari sensor DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Gagal membaca data dari sensor DHT!");
return;
}
// Tampilkan data di Serial Monitor
Serial.print("Kelembaban: ");
Serial.print(h);
Serial.print("% Suhu: ");
Serial.print(t);
Serial.println("°C");
// Publikasikan data ke Ubidots setiap 5 detik
if (millis() - lastPublishTime >= PUBLISH_FREQUENCY) {
ubidots.add(VARIABLE_LABEL, t); // Tambahkan suhu
ubidots.add(VARIABLE_LABEL2, h); // Tambahkan kelembaban
if (ubidots.publish(DEVICE_LABEL)) {
Serial.println("Data berhasil dikirim ke Ubidots!");
} else {
Serial.println("Gagal mengirim data ke Ubidots.");
}
lastPublishTime = millis();
}
// Perbarui loop Ubidots
ubidots.loop();
}