#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <ArduinoJson.h>
// Konfigurasi Wi-Fi
const char* ssid = "babu";
const char* password = "12345678";
// Konfigurasi MQTT
const char* MQTT_CLIENT_ID = "weatherstation123";
const char* MQTT_BROKER = "broker.hivemq.com";
const char* MQTT_USER = "";
const char* MQTT_PASSWORD = "";
const char* MQTT_TOPIC = "Gasss/bayu/datasensor";
// Inisialisasi sensor DHT22
#define DHTPIN1 15
#define DHTPIN2 2
#define DHTTYPE DHT22
DHT dht1(DHTPIN1, DHTTYPE);
DHT dht2(DHTPIN2, DHTTYPE);
// Inisialisasi LDR
#define LDR_PIN 34
WiFiClient espClient;
PubSubClient client(espClient);
String prevWeather = "";
// Fungsi untuk menghubungkan ke Wi-Fi
void setupWiFi() {
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
}
// Fungsi untuk menghubungkan ke MQTT
void reconnectMQTT() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PASSWORD)) {
Serial.println(" Connected!");
} else {
Serial.print("Failed, rc=");
Serial.print(client.state());
Serial.println(" Retrying in 5 seconds");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
// Inisialisasi sensor
dht1.begin();
dht2.begin();
// Koneksi Wi-Fi
setupWiFi();
// Konfigurasi MQTT
client.setServer(MQTT_BROKER, 1883);
}
void loop() {
if (!client.connected()) {
reconnectMQTT();
}
client.loop();
// Membaca sensor DHT22 pertama
float temp1 = dht1.readTemperature();
float humidity1 = dht1.readHumidity();
// Membaca sensor DHT22 kedua
float temp2 = dht2.readTemperature();
float humidity2 = dht2.readHumidity();
// Validasi pembacaan sensor
if (isnan(temp1) || isnan(humidity1) || isnan(temp2) || isnan(humidity2)) {
Serial.println("Failed to read from DHT sensors! Retrying...");
delay(2000); // Tunggu beberapa detik dan coba lagi
return;
}
// Membaca nilai LDR dan mengonversi ke persentase
int lightValue = analogRead(LDR_PIN);
int lightPercentage = map(lightValue, 0, 4095, 0, 100);
// Membuat payload JSON
StaticJsonDocument<256> doc;
doc["sensor1"]["temperature"] = temp1;
doc["sensor1"]["humidity"] = humidity1;
doc["sensor2"]["temperature"] = temp2;
doc["sensor2"]["humidity"] = humidity2;
doc["light"]["intensity"] = lightPercentage;
doc["light"]["raw_value"] = lightValue;
String message;
serializeJson(doc, message);
// Mengirim data jika ada perubahan
if (message != prevWeather) {
Serial.print("Publishing to MQTT topic ");
Serial.print(MQTT_TOPIC);
Serial.print(": ");
Serial.println(message);
client.publish(MQTT_TOPIC, message.c_str());
prevWeather = message;
} else {
Serial.println("No change in values");
}
delay(2000); // Delay 2 detik
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4