Loading...
OUR BLOG

Publish jarak dan kawal LED pada Node-RED menggunakan LED, Ultrasonic Sensor dan NodeMCU ESP8266

Hi BDx-ian!

 

Tutorial yang lepas kita telah belajar cara nak publish jarak pada Node-RED dengan menggunakan broker HiveMQ dan ESP8266. Jika anda sudah mencuba menggunakan Node-RED, untuk tutorial kali ini saya akan kongsikan bagaimana nak kawal LED dengan button “on” dan “off” dan publish jarak pada Node-RED menggunakan broker HiveMQ dan ESP8266. 

 

Node-RED

Install palette UI LED pada Node-RED. 

Pergi ke Manage Palette ->buat carian (node-red-contrib-ui-led)-> tekan Install. 

 

 

Flow Node-RED 

Bina Node-RED flow anda seperti dalam rajah berikut. 

 

 

1. Node MQTT in

Drag dan drop node MQTT ke dalam Flow dan edit node.

 

MQTT Broker

MQTT Broker

 

MQTT 

 

2. Node text 

Drag dan drop node text ke dalam Flow dan edit node.

 

Edit group

 

Text node

 

3. Node button 

Drag dan drop 2 node button untuk ON dan OFF ke dalam Flow dan edit node.

 

Button ON

 

Button OFF

 

4. Node debug

Drag dan drop 2 node debug ke dalam Flow.

 

Debug 1

 

Debug 2

 

5. Node LED

Drag dan drop node LED ke dalam Flow dan edit node.

 

 

6. Node MQTT out

Drag dan drop node MQTT ke dalam Flow dan edit node.

 

Broker MQTT

 

MQTT out Node

 

7. Sambungkan Node dan tekan Deploy.

 

Sambungkan node ke node seperti dalam rajah.

 

8. Dashboard Node-RED

Tekan arrow dan tekan Dashboard seperti dalam rajah di bawah. Anda akan terus pergi ke dashboard anda.

 

 

Komponen

Komponen yang diperlukan untuk tutorial ini:

  1. LED
  2. NodeMCU ESP8266
  3. Breadboard
  4. Jumper
  5. Ultrasonic Sensor

 

Litar

 

Ultrasonic sensor

 

LED

 

Code 

#include <ESP8266WiFi.h>

#include <PubSubClient.h>

 

#define triggerPin 13

#define echoPin 15

 

const char* ssid = "Nama WIFI anada";

const char* password = "Nama Password WIFI anda";

const char* mqtt_server = "broker.hivemq.com";

 

WiFiClient espClient;

PubSubClient client(espClient);

unsigned long lastMsg = 0;

#define MSG_BUFFER_SIZE  (50)

char msg[MSG_BUFFER_SIZE];

int value = 0;

int LED = 2;

 

void setup_wifi() {

 

  delay(10);

  // We start by connecting to a WiFi network

  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("]");

  

  

  if (strcmp(topic,"esp8266/led")==0){

  

  for (int i = 0; i < length; i++) {

    Serial.print((char)payload[i]);

    Serial.println();

 

    if ((char)payload[0] == '0'){

      digitalWrite(LED, HIGH);

      Serial.print("LED menyala");}

    else if ((char)payload[0] == '1'){

      digitalWrite(LED, LOW);

      Serial.print("LED tidak menyala");

    }      

  }  

  }

   Serial.println();

}

 

void reconnect() {

  // Loop until we're reconnected

  while (!client.connected()) {

    Serial.print("Attempting MQTT connection...");

    // Create a random client ID

    String clientId = "ESP8266Client";

    clientId += String(random(0xffff), HEX);

    // Attempt to connect

    if (client.connect(clientId.c_str())) {

      Serial.println("connected");

      client.publish("esp8266/distance", "Connected!");

      client.subscribe("esp8266/led");

      client.subscribe("esp8266/distance");

    } else {

      Serial.print("failed, rc=");

      Serial.print(client.state());

      Serial.println(" try again in 5 seconds");

      // Wait 5 seconds before retrying

      delay(5000);

    }

  }

}

 

void setup() {

  pinMode(triggerPin, OUTPUT);

  pinMode(echoPin, INPUT);

  pinMode(LED, OUTPUT);     // Initialize the LED pin as an output

  Serial.begin(115200);

  setup_wifi();

  client.setServer(mqtt_server, 1883);

  client.setCallback(callback);

}

 

void loop() {

 

  if (!client.connected()) {

    reconnect();

  }

  client.loop();

 

  unsigned long now = millis();

  if (now - lastMsg > 5000) {

    lastMsg = now;

    int duration, distance;

    digitalWrite(triggerPin, HIGH);

    delayMicroseconds(10);

    digitalWrite(triggerPin, LOW);

    duration = pulseIn(echoPin, HIGH);

    distance = (duration/2)/29.1;

    

    client.publish("esp8266/distance", String(distance).c_str());

    Serial.println("");

    Serial.print("Distance: ");

    Serial.println(distance);

  }

}

 

 

 

Output 

Apabila sudah code sudah diupload, output pada Dashboard memaparkan button LED dan jarak.

Jika klik pada button Node LED, komponen LED dan LED pada dashboard akan menyala. Jarak juga dipaparkan pada dashboard. 

 

Output Serial Monitor memaparkan LED sedang menyala dan jarak. 

 

Terdapat beberapa tutorial untuk anda memahami lebih lanjut berkaitan dengan Node-RED dan MQTT yang boleh didapati pada posting sebelum ini, jika anda terlepas anda boleh layari link dibawah.

 

Jika anda suka dengan perkongsian tutorial dalam blog kami ni, jangan lupa untuk follow Facebook dan Instagram kami, kat situ ada bermacam info dan update terkini yang akan kami kongsikan kepada anda. Itu sahaja untuk tutorial kami. Stay update dan selamat mencuba!

 

 

 

 

Unsure Whether You Need Our Help?

Have you got an awesome new idea or project that you want to talk about? We're here to talk you through it. Flick us an email or give us a call to get started.