#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <PubSubClient.h>
#include "DHTesp.h"
#include <string>
#include <ArduinoJson.h>
// #define BLYNK_PRINT Serial
// #define BLYNK_TEMPLATE_ID "TMPLNyE-Cfn_"
// #define BLYNK_DEVICE_NAME "DHT22 DAN BLYNK AMANDA KRISTANTI MENDROFA"
// #define BLYNK_AUTH_TOKEN "eRx1-jUHkWckEfHRPiL7zKq_DgQ5ig6_"
#define LED1 2
#define LED2 4
#define MAX_CHARACTER 50
#define MQTT_SERVER "0.tcp.ap.ngrok.io"
const int DHT_PIN = 15;
DHTesp dhtSensor;
int temp = 0;
int hum = 0;
String status;
// char auth[] = "mqsebScTjvVF3-f1siEPZVL3Y6kMWJve";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
char mqtt_topic[] = "/MUSIRA";
int mqtt_port = 10312;
WiFiClient espClient;
PubSubClient client(espClient);
// BlynkTimer timer;
// BLYNK_WRITE(V1)
// {
// int pinValue = param.asInt();
// digitalWrite(LED1,pinValue);
// digitalWrite(LED2,pinValue);
// digitalWrite(LED3,pinValue);
// }
void setupWifi(){
Serial.print("Menghubungkan ke ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED){
delay(5000);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.print("Terhubung ke ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("");
}
void setupMqtt(){
while (!client.connected()){
Serial.println("Menghubungkan ke MQTT...");
String idClient = "client-";
idClient += String(random(0xffff), HEX);
if (client.connect(idClient.c_str())){
Serial.println("MQTT terhubung");
Serial.println();
client.publish(mqtt_topic, "Perangkat terhubung...");
client.publish(mqtt_topic, " ");
}
else{
Serial.print("Error: ");
Serial.print(client.state());
Serial.println("Mencoba lagi...");
delay(5000);
}
}
}
void sendSensor()
{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
Blynk.virtualWrite(V0, data.temperature); //mengirimkan data ke Virtual pin di Blynk Cloud
}
void setup()
{
Serial.begin(9600);
setupWifi();
client.setServer(MQTT_SERVER, mqtt_port);
if (!client.connected()){
setupMqtt();
}
//Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
//timer.setInterval(2000L, sendSensor);
}
void loop()
{
client.loop();
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// ekstrak data temperature
temp = data.temperature;
// ekstrak data humidity
hum = data.humidity;
Serial.print("Suhu: ");
Serial.println(temp);
Serial.print("Kelembaban: ");
Serial.println(hum);
Serial.println("===================");
if(temp > 30){
digitalWrite(LED1, HIGH);
digitalWrite(LED2, HIGH);
Serial.println("AC is activated");
status = "ON";
}
else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
Serial.println("AC is deactivated");
status = "OFF";
}
StaticJsonDocument<200> doc;
doc["parameters"]["temp"] = temp;
doc["parameters"]["hum"] = hum;
doc["ket"]["ac1"] = status;
doc["ket"]["ac2"] = status;
String message;
serializeJson(doc, message);
//client publish
client.publish(mqtt_topic, message.c_str());
client.publish(mqtt_topic, "---------------");
// Blynk.run();
// timer.run();
delay(2000);
}