#include <WiFi.h>
#include <EEPROM.h>
#include <PubSubClient.h>
const char* ssid = "Bro"; // Nama WiFi
const char* password = ""; // Password WiFi
WiFiClient espClient;
PubSubClient client(espClient);
char mqtt_server[] = "broker.mqtt-dashboard.com";
#define lamp1 5
#define lamp2 4
#define lamp3 14
#define addrLamp1 0
#define addrLamp2 1
#define addrLamp3 2
void setup() {
Serial.begin(115200);
EEPROM.begin(512);
pinMode(lamp1, OUTPUT);
pinMode(lamp2, OUTPUT);
pinMode(lamp3, OUTPUT);
digitalWrite(lamp1, EEPROM.read(addrLamp1));
digitalWrite(lamp2, EEPROM.read(addrLamp2));
digitalWrite(lamp3, EEPROM.read(addrLamp3));
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
while (!client.connected()) {
if (client.connect("hcix")) {
client.subscribe("hcix/lm3control");
} else {
delay(5000);
}
}
}
void loop() {
if (!client.connected()) {
recon();
}
client.loop();
}
void recon() {
while (!client.connected()) {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
if (client.connect("hcix")) {
client.subscribe("hcix/lm3control");
} else {
delay(1000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
String tmpValue = "";
String msg = "";
String in = "";
int val;
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
char mychar = (char)payload[i];
tmpValue += mychar;
}
if (tmpValue != "") {
in = tmpValue.charAt(0);
if (in == "1") {
val = EEPROM.read(addrLamp1) == 0 ? 1 : 0;
EEPROM.write(addrLamp1, val);
digitalWrite(lamp1, val);
} else if (in == "2") {
val = EEPROM.read(addrLamp2) == 0 ? 1 : 0;
EEPROM.write(addrLamp2, val);
digitalWrite(lamp2, val);
} else if (in == "3") {
val = EEPROM.read(addrLamp3) == 0 ? 1 : 0;
EEPROM.write(addrLamp3, val);
digitalWrite(lamp3, val);
}
EEPROM.commit();
msg = in;
msg += String(val == 0 ? 1 : 0);
Serial.print("data : ");
Serial.println(msg);
client.publish("hcix/lm3data", msg.c_str());
}
}