//==================================================
#include <WiFi.h>
#include <WiFiClient.h>
#include <PubSubClient.h>
String wifiSSID = "Wokwi-GUEST";
String wifiPassword = "";
String mqttBroker = "test.mosquitto.org";
WiFiClient client;
PubSubClient mqtt(client);
void connectWifi();
void connect_mqtt();
void mqttReceivedMessage(char *topic, byte *msg, unsigned int msgLength);
String data_L1;
unsigned long interval = 100;
unsigned long previousMillis = 0;
//==================================================
#define ldrPin 11
const float gama = 0.7;
const float rl10 = 50;
const int Lamp_Teras = 37;
const int Lamp_Rtamu = 36;
const int Lamp_Km = 35;
const int Lamp_Dapur = 34;
float kecerahan, resistansi, voltase;
int nilaiLDR;
//===============================================
void mqttReceivedMessage(char *topic, byte *msg, unsigned int msgLength)
{
String perintah = "";
Serial.print("Pesan Diterima dg Topik: ");
Serial.println(topic);
for (int i = 0; i < msgLength; i++)
{
// Serial.print(char(msg[i]));
perintah += String(char(msg[i]));
}
if (String(topic) == "smart/home")
{
Serial.println(perintah);
if (perintah == "ON")
{
digitalWrite(Lamp_Teras, 1);
Serial.println("LED1-ON");
}
else if (perintah == "OFF")
{
digitalWrite(Lamp_Teras, 0);
Serial.println("LED1-OFF");
}
}
}
//================================================
void baca_sensor()
{
nilaiLDR = analogRead(ldrPin);
nilaiLDR = map(nilaiLDR, 4095, 0, 1024, 0); //mengubah nilai pembacaan sensor LDR dari nilai ADC arduino menjadi nilai ADC ESP32
voltase = nilaiLDR / 1024.*5;
resistansi = 2000 * voltase / (1-voltase/5);
kecerahan = pow(rl10*1e3*pow(10,gama)/resistansi,(1/gama));
Serial.print("Kecerahan = ");
Serial.println(kecerahan);
}
void setup()
{
Serial.begin(115200);
pinMode(Lamp_Teras, OUTPUT);
pinMode(Lamp_Rtamu, OUTPUT);
pinMode(Lamp_Km, OUTPUT);
pinMode(Lamp_Dapur, OUTPUT);
//================================================
connectWifi();
mqtt.setServer(mqttBroker.c_str(), 1883);
//================================================
}
void loop()
{
//================================================
if (!mqtt.connected())
{
connect_mqtt();
Serial.println("MQTT Connected");
}
mqtt.loop();
unsigned long currentMillis = millis();
if ((unsigned long)(currentMillis - previousMillis) >= interval)
{
baca_sensor();
previousMillis = millis();
}
//================================================
if(kecerahan >= 200)
{
digitalWrite(Lamp_Teras, HIGH);
}
else
{
digitalWrite(Lamp_Teras, LOW);
}
}
void connect_mqtt()
{
while(!mqtt.connected())
{
Serial.println("Connecting MQTT...");
if (mqtt.connect("Ilham"))
{
mqtt.subscribe("smart/home");
}
}
}
void connectWifi()
{
Serial.println("Connecting To Wifi");
WiFi.begin(wifiSSID.c_str(), wifiPassword.c_str());
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.println("Wifi Connected");
Serial.println(WiFi.SSID());
Serial.println(WiFi.RSSI());
Serial.println(WiFi.macAddress());
Serial.println(WiFi.localIP());
Serial.println(WiFi.gatewayIP());
Serial.println(WiFi.dnsIP());
}