Advertisement
hwthinker

ESP-12F Relay 30A 8 Channel-mqtt

Sep 20th, 2023 (edited)
1,111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 4.60 KB | Source Code | 0 0
  1. // mosquitto_sub -h broker.mqtt-dashboard.com -t /myrelay/status
  2. //mosquitto_sub -h broker.mqtt-dashboard.com -t /myrelay/cnt
  3. //control
  4. //mosquitto_pub -h broker.mqtt-dashboard.com -t /myrelay/control -m 7
  5. // again untuk mematikan
  6. // mosquitto_pub -h broker.mqtt-dashboard.com -t /myrelay/control -m 7
  7.  
  8.  
  9. #include <ESP8266WiFi.h>
  10. #include <PubSubClient.h>
  11.  
  12. const char* ssid = "mywifi";
  13. const char* password = "mypassword";
  14.  
  15. // Definisikan informasi broker MQTT
  16. const char* mqtt_server = "broker.mqtt-dashboard.com";
  17. //broker.emqx.io
  18. //broker.hivemq.com
  19.  
  20.  
  21. const int mqtt_port = 1883;
  22. const char* mqtt_username = ""; // Biarkan kosong jika tidak ada
  23. const char* mqtt_password = ""; // Biarkan kosong jika tidak ada
  24.  
  25. // Inisialisasi koneksi WiFi
  26. WiFiClient espClient;
  27.  
  28. // Inisialisasi koneksi MQTT
  29. PubSubClient client(espClient);
  30.  
  31. // Daftar status relay (0 = OFF, 1 = ON)
  32. int relayStatus[8] = {0, 0, 0, 0, 0, 0, 0, 0};
  33.  
  34. int rly1 = 16;
  35. int rly2 = 14;
  36. int rly3 = 12;
  37. int rly4 = 13;
  38. int rly5 = 15;
  39. int rly6 = 0;
  40. int rly7 = 4;
  41. int rly8 = 5;
  42. int relayPins[8] = {rly1, rly2, rly3, rly4, rly5, rly6, rly7, rly8};
  43.  
  44. unsigned long lastMsg = 0;
  45. #define MSG_BUFFER_SIZE (50)
  46. char msg[MSG_BUFFER_SIZE];
  47. int value = 0;
  48.  
  49. void setup() {
  50.   // Mulai Serial
  51.   Serial.begin(115200);
  52.  
  53.     // Inisialisasi pin relay sebagai OUTPUT
  54.   for (int i = 0; i < 8; i++) {
  55.     pinMode(relayPins[i], OUTPUT);
  56.     digitalWrite(relayPins[i], LOW);
  57.   }
  58.  
  59.   // Sambungkan ke WiFi
  60.   WiFi.begin(ssid, password);
  61.   while (WiFi.status() != WL_CONNECTED) {
  62.     delay(1000);
  63.     Serial.println("Menghubungkan ke WiFi...");
  64.   }
  65.   Serial.println("Terhubung ke WiFi");
  66.  
  67.   // Tampilkan alamat IP yang diperoleh dari router/hotspot
  68.   Serial.print("Alamat IP: ");
  69.   Serial.println(WiFi.localIP());
  70.  
  71.   // Sambungkan ke broker MQTT
  72.   client.setServer(mqtt_server, mqtt_port);
  73.   // Gunakan ini jika broker MQTT memerlukan otentikasi
  74.   // client.setCredentials(mqtt_username, mqtt_password);
  75.  
  76.   // Langsung subscribe ke topik yang Anda inginkan
  77.   client.setCallback(callback);
  78.   client.subscribe("/myrelay/control");
  79. }
  80.  
  81. void loop() {
  82.   if (!client.connected()) {
  83.     reconnect();
  84.   }
  85.   client.loop();
  86.  
  87.   unsigned long now = millis();
  88.   if (now - lastMsg > 2000) {
  89.     lastMsg = now;
  90.     ++value;
  91.     snprintf (msg, MSG_BUFFER_SIZE, "send data #%ld", value);
  92.     Serial.print("Publish message: ");
  93.     Serial.println(msg);
  94.     client.publish("/myrelay/cnt", msg);
  95.   }
  96.  
  97.   // Periksa status relay dan kendalikan relay di sini sesuai kebutuhan
  98.   for (int i = 0; i < 8; i++) {
  99.     // Contoh: Mengaktifkan relay jika status adalah 1, mematikan jika status adalah 0
  100.     int rlystat=relayStatus[i] == (1 ? HIGH : LOW);
  101.     digitalWrite(relayPins[i], rlystat);
  102.     // Serial.printf("status relay callback'%d': \n\r", rlystat);
  103.   }
  104. }
  105.  
  106. void callback(char* topic, byte* payload, unsigned int length) {
  107.   // Serial.print("Pesan yang diterima pada topik '");
  108.   // Serial.print(topic);
  109.   // Serial.print("': ");
  110.   Serial.printf("Pesan yang diterima pada topik '%s': \n\r", topic);
  111.  
  112.     String message = "";
  113.   for (int i = 0; i < length; i++) {
  114.     message += (char)payload[i];
  115.   }
  116.   Serial.print("isi payload: ");
  117.   Serial.println(message);
  118.  
  119.   // Periksa pesan dan ubah status relay sesuai kebutuhan
  120.   if (strcmp(topic, "/myrelay/control") == 0) {
  121.     int relayNumber = message.toInt();
  122.     if (relayNumber >= 0 && relayNumber < 8) {
  123.       relayStatus[relayNumber] = 1 - relayStatus[relayNumber]; // Toggle relay status
  124.       Serial.printf("status relay %d:   arrayRLY %d: \n\r", relayNumber, relayStatus[relayNumber]);
  125.       publishRelayStatus(relayNumber);
  126.     }
  127.   }
  128. }
  129.  
  130. void publishRelayStatus(int relayNumber) {
  131.   String topic = "/relay/status/" + String(relayNumber);
  132.   String payload = String(relayStatus[relayNumber]);
  133.   client.publish(topic.c_str(), payload.c_str());
  134. }
  135.  
  136. void reconnect() {
  137.   // Loop until we're reconnected
  138.   while (!client.connected()) {
  139.     Serial.print("Attempting MQTT connection...");
  140.     // Create a random client ID
  141.     String clientId = "ESP8266Client-";
  142.     clientId += String(random(0xffff), HEX);
  143.     // Attempt to connect
  144.     if (client.connect(clientId.c_str())) {
  145.       Serial.println("connected");
  146.       // Once connected, publish an announcement...
  147.       client.publish("/myrelay/status", "Reconnect");
  148.       // ... and resubscribe
  149.       client.subscribe("/myrelay/control");
  150.     } else {
  151.       Serial.print("failed, rc=");
  152.       Serial.print(client.state());
  153.       Serial.println(" try again in 5 seconds");
  154.       // Wait 5 seconds before retrying
  155.       delay(5000);
  156.     }
  157.   }
  158. }
  159.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement