//Ayu Sukma Pertiwi 20220801471
//Bimo ali prakoso fakhrudin irawan 20220801238
//Jesen candra 20220801075
//Johta sansanda suntana 20220801016
//M. Rafly faturrahman 20220801080
#define BLYNK_TEMPLATE_ID "TMPL6x7uMToqb"
#define BLYNK_TEMPLATE_NAME "ESP"
#define BLYNK_AUTH_TOKEN "c7_D43EM10Oos2X7oGj1-KyvywHFr2gY"
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <BlynkSimpleEsp32.h> // tambahkan library Blynk
// Header Guards
#ifndef MY_SENSOR_H
#define MY_SENSOR_H
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "test.mosquitto.org";
const char* mqtt_topic_suhu = "ayu/suhu";
const char* mqtt_topic_kelembapan = "ayu/kelembapan";
const int port = 1883;
const int ledPin1 = 14;
const int ledPin2 = 27;
const int ledPin3 = 26;// Pin untuk LED indikator
char auth[] = BLYNK_AUTH_TOKEN; // Menggunakan token otentikasi Blynk
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(2, DHT22);
void setup_wifi();
void reconnect();
void sendSensorData();
BLYNK_WRITE(V2); // Mendeklarasikan fungsi Blynk_WRITE untuk switch
void setup() {
Serial.begin(115200);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);// Mengatur pin LED sebagai output
dht.begin();
setup_wifi();
client.setServer(mqtt_server, port); // Menggunakan variabel port
Blynk.begin(auth, ssid, password); // Inisialisasi Blynk
}
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
Blynk.run(); // Menjalankan Blynk
sendSensorData(); // Mengirim data sensor ke Blynk
delay(5000); // delay 5 detik
}
void sendSensorData() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity(); // Membaca kelembapan
if (!isnan(temperature) && !isnan(humidity)) {
// Publish suhu
String tempPayload = String(temperature);
Serial.print("Sending temperature: ");
Serial.println(tempPayload);
client.publish(mqtt_topic_suhu, tempPayload.c_str());
// Publish kelembapan
String humPayload = String(humidity);
Serial.print("Sending humidity: ");
Serial.println(humPayload);
client.publish(mqtt_topic_kelembapan, humPayload.c_str());
// Mengirim data ke Blynk
Blynk.virtualWrite(V0, temperature); // Menulis suhu ke pin V0 di aplikasi Blynk
Blynk.virtualWrite(V1, humidity); // Menulis kelembapan ke pin V1 di aplikasi Blynk
} else {
Serial.println("Failed to read data from DHT sensor");
}
}
// Fungsi untuk menangani perubahan nilai pada switch (pin virtual V2 di aplikasi Blynk)
BLYNK_WRITE(V2) {
int switchState = param.asInt(); // Membaca status switch dari aplikasi Blynk
if (switchState == 1) {
digitalWrite(ledPin1, HIGH);// Menghidupkan LED ketika switch dinyalakan
} else {
digitalWrite(ledPin1, LOW);// Mematikan LED ketika switch dimatikan
}
}
// Fungsi untuk menangani perubahan nilai pada switch (pin virtual V2 di aplikasi Blynk)
BLYNK_WRITE(V3) {
int switchState = param.asInt(); // Membaca status switch dari aplikasi Blynk
if (switchState == 1) {
digitalWrite(ledPin2, HIGH);// Menghidupkan LED ketika switch dinyalakan
} else {
digitalWrite(ledPin2, LOW);// Mematikan LED ketika switch dimatikan
}
}
// Fungsi untuk menangani perubahan nilai pada switch (pin virtual V2 di aplikasi Blynk)
BLYNK_WRITE(V4) {
int switchState = param.asInt(); // Membaca status switch dari aplikasi Blynk
if (switchState == 1) {
digitalWrite(ledPin3, HIGH);// Menghidupkan LED ketika switch dinyalakan
} else {
digitalWrite(ledPin3, LOW);// Mematikan LED ketika switch dimatikan
}
}
#endif // MY_SENSOR_H