Cara menggunakan nodemcu esp8266 dengan protocol mqtt B24

Light monitoring in real-time and displaying the data in the form of a c++ page that can be accessed via Wi-Fi

BeginnerWork in progress2 hours46
Cara menggunakan nodemcu esp8266 dengan protocol mqtt B24

Things used in this project

Hardware components

4-CHANNEL RELAY CONTROLLER FOR I2C
ControlEverything.com 4-CHANNEL RELAY CONTROLLER FOR I2C
×1
ESP8266 ESP-01
Espressif ESP8266 ESP-01
×1
Micro-USB to USB Cable (Generic)
Micro-USB to USB Cable (Generic)
×1
Breadboard (generic)
Breadboard (generic)
×1
Jumper wires (generic)
Jumper wires (generic)
×1

Story

Read more

Schematics

schematics

Code

program code

Arduino
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

#define relay1 D3
#define relay2 D4
#define relay3 D6
#define relay4 D7

const char* ssid = "Sahrul";
const char* password = "Amar123";
const char* mqtt_server = "broker.mqtt-dashboard.com";

WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;

String publish = "idrusproject/msg";
String subscribe = "idrusproject/relays";

void setup() {
  Serial.begin(115200);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  digitalWrite(relay1, 1);
  digitalWrite(relay2, 1);
  digitalWrite(relay3, 1);
  digitalWrite(relay4, 1);

  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  delay(100);
}

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");

  // Create a String to hold the payload
  String payloadString = "";
  for (int i = 0; i < length; i++) {
    payloadString += (char)payload[i];
  }
  Serial.println(payloadString);

  if (payloadString == "relay1_on") {
    digitalWrite(relay1, LOW);
    Serial.println("Relay 1 ON");
  } else if (payloadString == "relay1_off") {
    digitalWrite(relay1, HIGH);
    Serial.println("Relay 1 OFF");
  } else if (payloadString == "relay2_on") {
    digitalWrite(relay2, LOW);
    Serial.println("Relay 2 ON");
  } else if (payloadString == "relay2_off") {
    digitalWrite(relay2, HIGH);
    Serial.println("Relay 2 OFF");
  } else if (payloadString == "relay3_on") {
    digitalWrite(relay3, LOW);
    Serial.println("Relay 3 ON");
  } else if (payloadString == "relay3_off") {
    digitalWrite(relay3, HIGH);
    Serial.println("Relay 3 OFF");
  } else if (payloadString == "relay4_on") {
    digitalWrite(relay4, LOW);
    Serial.println("Relay 4 ON");
  } else if (payloadString == "relay4_off") {
    digitalWrite(relay4, HIGH);
    Serial.println("Relay 4 OFF");
  }
}


void pubMessage() {
  lastMsg = millis();
  ++value;
  snprintf(msg, MSG_BUFFER_SIZE, "hello world #%ld", value);
  Serial.print("Publish message: ");
  Serial.println(msg);
  client.publish("outTopic", msg);
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
      Serial.println("connected");
      client.publish(publish.c_str(), "ONLINE !");
      client.subscribe(subscribe.c_str());
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

program code

Arduino
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

#define relay1 D3
#define relay2 D4
#define relay3 D6
#define relay4 D7

const char* ssid = "Sahrul";
const char* password = "Amar123";
const char* mqtt_server = "broker.mqtt-dashboard.com";

WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
int value = 0;

String publish = "idrusproject/msg";
String subscribe = "idrusproject/relays";

void setup() {
  Serial.begin(115200);
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  digitalWrite(relay1, 1);
  digitalWrite(relay2, 1);
  digitalWrite(relay3, 1);
  digitalWrite(relay4, 1);

  setup_wifi();
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  delay(100);
}

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  randomSeed(micros());

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");

  // Create a String to hold the payload
  String payloadString = "";
  for (int i = 0; i < length; i++) {
    payloadString += (char)payload[i];
  }
  Serial.println(payloadString);

  if (payloadString == "relay1_on") {
    digitalWrite(relay1, LOW);
    Serial.println("Relay 1 ON");
  } else if (payloadString == "relay1_off") {
    digitalWrite(relay1, HIGH);
    Serial.println("Relay 1 OFF");
  } else if (payloadString == "relay2_on") {
    digitalWrite(relay2, LOW);
    Serial.println("Relay 2 ON");
  } else if (payloadString == "relay2_off") {
    digitalWrite(relay2, HIGH);
    Serial.println("Relay 2 OFF");
  } else if (payloadString == "relay3_on") {
    digitalWrite(relay3, LOW);
    Serial.println("Relay 3 ON");
  } else if (payloadString == "relay3_off") {
    digitalWrite(relay3, HIGH);
    Serial.println("Relay 3 OFF");
  } else if (payloadString == "relay4_on") {
    digitalWrite(relay4, LOW);
    Serial.println("Relay 4 ON");
  } else if (payloadString == "relay4_off") {
    digitalWrite(relay4, HIGH);
    Serial.println("Relay 4 OFF");
  }
}


void pubMessage() {
  lastMsg = millis();
  ++value;
  snprintf(msg, MSG_BUFFER_SIZE, "hello world #%ld", value);
  Serial.print("Publish message: ");
  Serial.println(msg);
  client.publish("outTopic", msg);
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
      Serial.println("connected");
      client.publish(publish.c_str(), "ONLINE !");
      client.subscribe(subscribe.c_str());
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

Credits

23106050098 23106050098
1 project • 0 followers
Contact
dirakit community
23 projects • 109 followers
Indonesia IoT Community by Informatics UIN Sunan Kalijaga Yogyakarta
Contact

Comments

Please log in or sign up to comment.