159 lines
3.9 KiB
Arduino
159 lines
3.9 KiB
Arduino
|
|
#include <WiFi.h>
|
||
|
|
#include <PubSubClient.h>
|
||
|
|
|
||
|
|
const char* wifiName = "Pasca LAB TI";
|
||
|
|
const char* wifiPass = "nakamsenjem";
|
||
|
|
|
||
|
|
const char* brokerUser = "obyskxhx:obyskxhx";
|
||
|
|
const char* brokerPass = "Fe_3_tBuwmc8vMMqT2hYiboTsBlBmPz1";
|
||
|
|
const char* brokerHost = "armadillo.rmq.cloudamqp.com"; // broker
|
||
|
|
|
||
|
|
const char* TopicAll = "farm/all"; // TOPIC
|
||
|
|
|
||
|
|
const char* topicRelay1 = "relay1";
|
||
|
|
const char* topicRelay2 = "relay2";
|
||
|
|
const char* topicRelay3 = "relay3";
|
||
|
|
const char* topicRelay4 = "relay4";
|
||
|
|
const char* topicRelay5 = "relay5";
|
||
|
|
const char* topicRelay6 = "relay6";
|
||
|
|
|
||
|
|
// Deklarasi client wifi
|
||
|
|
WiFiClient espClient;
|
||
|
|
// Deklarasi MQTT Client
|
||
|
|
PubSubClient client(espClient);
|
||
|
|
|
||
|
|
// GPIO pins for relays
|
||
|
|
#define RELAY1 32
|
||
|
|
#define RELAY2 33
|
||
|
|
#define RELAY3 25
|
||
|
|
#define RELAY4 26
|
||
|
|
#define RELAY5 27
|
||
|
|
#define RELAY6 14
|
||
|
|
|
||
|
|
void setup() {
|
||
|
|
Serial.begin(9600); //115200
|
||
|
|
|
||
|
|
// Setup relay pins as OUTPUT
|
||
|
|
pinMode(RELAY1, OUTPUT);
|
||
|
|
pinMode(RELAY2, OUTPUT);
|
||
|
|
pinMode(RELAY3, OUTPUT);
|
||
|
|
pinMode(RELAY4, OUTPUT);
|
||
|
|
pinMode(RELAY5, OUTPUT);
|
||
|
|
pinMode(RELAY6, OUTPUT);
|
||
|
|
|
||
|
|
// Ensure all relays are OFF initially
|
||
|
|
digitalWrite(RELAY1, LOW);
|
||
|
|
digitalWrite(RELAY2, LOW);
|
||
|
|
digitalWrite(RELAY3, LOW);
|
||
|
|
digitalWrite(RELAY4, LOW);
|
||
|
|
digitalWrite(RELAY5, LOW);
|
||
|
|
digitalWrite(RELAY6, LOW);
|
||
|
|
|
||
|
|
KoneksiWIFI();
|
||
|
|
client.setServer(brokerHost, 1883);
|
||
|
|
client.setCallback(callback);
|
||
|
|
}
|
||
|
|
|
||
|
|
void loop() {
|
||
|
|
if (!client.connected()) {
|
||
|
|
reconnect();
|
||
|
|
}
|
||
|
|
client.loop();
|
||
|
|
}
|
||
|
|
|
||
|
|
void KoneksiWIFI() {
|
||
|
|
Serial.print("Konek ke: ");
|
||
|
|
Serial.println(wifiName);
|
||
|
|
|
||
|
|
// Memposisikan MCU sebagai station
|
||
|
|
// MCU dihubungkan ke Router Access Point
|
||
|
|
WiFi.mode(WIFI_STA);
|
||
|
|
WiFi.begin(wifiName, wifiPass);
|
||
|
|
while (WiFi.status() != WL_CONNECTED) {
|
||
|
|
delay(500);
|
||
|
|
Serial.print(".");
|
||
|
|
}
|
||
|
|
|
||
|
|
// NodeMCU telah terhubung ke Access Point
|
||
|
|
Serial.println();
|
||
|
|
Serial.println("WiFi connected");
|
||
|
|
Serial.print("IP address: ");
|
||
|
|
Serial.println(WiFi.localIP());
|
||
|
|
}
|
||
|
|
|
||
|
|
void reconnect() {
|
||
|
|
// Membentuk koneksi dengan Message Broker
|
||
|
|
// dalam hal ini ke server RabbitMQ
|
||
|
|
|
||
|
|
while (!client.connected()) {
|
||
|
|
Serial.print("Attempting MQTT connection...");
|
||
|
|
|
||
|
|
// Membangkitkan ID client acak ke Message Broker
|
||
|
|
String clientId = "DSPTECH-";
|
||
|
|
clientId += String(random(0xffff), HEX);
|
||
|
|
|
||
|
|
if (client.connect(clientId.c_str(), brokerUser, brokerPass)) {
|
||
|
|
Serial.println("connected");
|
||
|
|
client.subscribe(topicRelay1);
|
||
|
|
client.subscribe(topicRelay2);
|
||
|
|
client.subscribe(topicRelay3);
|
||
|
|
client.subscribe(topicRelay4);
|
||
|
|
client.subscribe(topicRelay5);
|
||
|
|
client.subscribe(topicRelay6);
|
||
|
|
} else {
|
||
|
|
Serial.print("failed, rc=");
|
||
|
|
Serial.print(client.state());
|
||
|
|
Serial.println(" try again in 5 seconds");
|
||
|
|
delay(5000);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
void callback(char* topic, byte* payload, unsigned int length) {
|
||
|
|
String message;
|
||
|
|
for (int i = 0; i < length; i++) {
|
||
|
|
message += (char)payload[i];
|
||
|
|
}
|
||
|
|
|
||
|
|
Serial.print("Message received: ");
|
||
|
|
Serial.println(message);
|
||
|
|
|
||
|
|
if (strcmp(topic, topicRelay1) == 0) {
|
||
|
|
if (message == "ON") {
|
||
|
|
digitalWrite(RELAY1, HIGH);
|
||
|
|
} else if (message == "OFF") {
|
||
|
|
digitalWrite(RELAY1, LOW);
|
||
|
|
}
|
||
|
|
} else if (strcmp(topic, topicRelay2) == 0) {
|
||
|
|
if (message == "ON") {
|
||
|
|
digitalWrite(RELAY2, HIGH);
|
||
|
|
} else if (message == "OFF") {
|
||
|
|
digitalWrite(RELAY2, LOW);
|
||
|
|
}
|
||
|
|
} else if (strcmp(topic, topicRelay3) == 0) {
|
||
|
|
if (message == "ON") {
|
||
|
|
digitalWrite(RELAY3, HIGH);
|
||
|
|
} else if (message == "OFF") {
|
||
|
|
digitalWrite(RELAY3, LOW);
|
||
|
|
}
|
||
|
|
} else if (strcmp(topic, topicRelay4) == 0) {
|
||
|
|
if (message == "ON") {
|
||
|
|
digitalWrite(RELAY4, HIGH);
|
||
|
|
} else if (message == "OFF") {
|
||
|
|
digitalWrite(RELAY4, LOW);
|
||
|
|
}
|
||
|
|
} else if (strcmp(topic, topicRelay5) == 0) {
|
||
|
|
if (message == "ON") {
|
||
|
|
digitalWrite(RELAY5, HIGH);
|
||
|
|
} else if (message == "OFF") {
|
||
|
|
digitalWrite(RELAY5, LOW);
|
||
|
|
}
|
||
|
|
} else if (strcmp(topic, topicRelay6) == 0) {
|
||
|
|
if (message == "ON") {
|
||
|
|
digitalWrite(RELAY6, HIGH);
|
||
|
|
} else if (message == "OFF") {
|
||
|
|
digitalWrite(RELAY6, LOW);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|