#include <WiFi.h>
#include <WiFiClient.h>
// #include <BlynkSimpleEsp32.h>
#include <PubSubClient.h>
#include "DHTesp.h"
#include <string>
#include <ArduinoJson.h>
#define MAX_CHARACTER 50
#define MQTT_SERVER "0.tcp.ap.ngrok.io"
// deklarasi pin-pin sensor
#define DHT 26
// DEKLARASI Lampu
#define LED_PIN1 2
#define LED_PIN2 4
// Deklarasi Lampu
String lampu1;
String lampu2;
// Batas LED Menyala
int batast = 30; // Batas suhu
int batasmoist = 30; // Batas Moisture
// Deklarasi WIFI
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Deklarasi Server
char mqtt_topic[] = "AMIKOM";
int mqtt_port = 17825;
WiFiClient espClient;
PubSubClient client(espClient);
// Inisialisasi object
DHTesp dht;
int temp;
int hum;
// Deklarasi Wifi
void setupWifi(){
Serial.print("Connecting [ ");
Serial.print(ssid);
Serial.println(" ]");
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("");
}
// Cek Mqtt Server
void setupMqtt(){
while (!client.connected()){
Serial.println("Loading 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("Gagal: ");
Serial.print(client.state());
Serial.println(" Mencoba lagi...");
delay(5000);
}
}
}
// Deklarasi Setup Data
void setup() {
Serial.begin(9600);
setupWifi();
client.setServer(MQTT_SERVER, mqtt_port);
if (!client.connected()){
setupMqtt();
}
// inisiasi DHT
dht.setup(DHT, DHTesp::DHT22);
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
Serial.begin(9600);
}
// Deklarasi Rak3
void amikom(){
// DHT
TempAndHumidity data = dht.getTempAndHumidity();
// ekstrak data temperature
temp = data.temperature;
// ekstrak data humidity
hum = data.humidity;
// display data ke serial monitor
Serial.print("Keadaan di AMIKOM: ");
Serial.print("Suhu: ");
Serial.print(temp);
Serial.print(" Kelembaban: ");
Serial.print(hum);
//
if(temp > batast){
digitalWrite(LED_PIN1, HIGH);
Serial.print(" Lampu Biru Tua Menyala,");
lampu1 = "NYALA";
}
else {
digitalWrite(LED_PIN1, LOW);
Serial.print(" Lampu Biru Tua Mati,");
lampu1 = "MATI";
}
// LED Moisture
if(hum > batasmoist){
digitalWrite(LED_PIN2, HIGH);
Serial.println(" Lampu Biru Muda Menyala.");
lampu2 = "NYALA";
}
else{
digitalWrite(LED_PIN2, LOW);
Serial.println(" Lampu Biru Muda Mati.");
lampu2 = "MATI";
}
}
void loop() {
client.loop();
amikom();
Serial.println("--------------------------------------------------------------");
StaticJsonDocument<300> doc;
doc["suhu"] = temp;
doc["kelembaban"] = hum;
doc["lampu_biru_tua"] = lampu1;
doc["lampu_biru_muda"] = lampu2;
String out;
serializeJson(doc, out);
char json[out.length() + 1];
out.toCharArray(json, out.length() + 1);
//client publish
client.publish(mqtt_topic, out.c_str());
client.publish(mqtt_topic, "---------------");
delay(5000);
}