#include <WiFi.h>
#include <PubSubClient.h>
#define PPM_PIN_1 4 // Sensor MQ-135 pertama
#define PPM_PIN_2 34 // Sensor MQ-135 kedua
// Konfigurasi WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Konfigurasi MQTT
const char* mqtt_server = "b816166856034438bea88292bd05250e.s1.eu.hivemq.cloud";
const int mqtt_port = 8883; // Port default MQTT
const char* mqtt_username = "hivemq.webclient.1739493434095"; // Tambahkan username MQTT
const char* mqtt_password = "3lKSpx2BIP8j5&?a<,Le"; // Tambahkan password MQTT
const char* mqtt_topic = "sensor/mq135";
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
Serial.println("Menghubungkan ke WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi terhubung!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
void reconnect_mqtt() {
while (!client.connected()) {
Serial.print("Menghubungkan ke MQTT...");
if (client.connect("ESP32_MQTT_Client", mqtt_username, mqtt_password)) {
Serial.println(" Terhubung!");
} else {
Serial.print(" Gagal, kode: ");
Serial.print(client.state());
Serial.println(" Coba lagi dalam 5 detik...");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
Serial.println("ESP32 dengan dua sensor MQ-135 siap!");
}
void loop() {
if (!client.connected()) {
reconnect_mqtt();
}
client.loop();
// Baca data dari sensor
int16_t raw1 = analogRead(PPM_PIN_1);
int16_t raw2 = analogRead(PPM_PIN_2);
// Konversi ke PPM
int ppm1 = raw1 / 4.095;
int ppm2 = raw2 / 4.095;
int avgPPM = (ppm1 + ppm2) / 2;
// Kirim data ke MQTT dalam format JSON
char payload[100];
snprintf(payload, sizeof(payload), "{\"ppm1\": %d, \"ppm2\": %d, \"avgPPM\": %d}", ppm1, ppm2, avgPPM);
client.publish(mqtt_topic, payload);
Serial.print("Data MQTT: ");
Serial.println(payload);
delay(2000); // Kirim data setiap 2 detik
}