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
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:
- LED
- NodeMCU ESP8266
- Breadboard
- Jumper
- Ultrasonic Sensor
Litar
Ultrasonic sensor
- VCC → pin Vin ESP8266
- TRIG → pin D7 ESP8266
- ECHO → pin D8 ESP8266
- GND → GND ESP8266
LED
- +ve terminal → pin D4 ESP8266
- -ve terminal → GND ESP8266
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.
- https://app.bdxtronix.com/blog/publish-jarak-dari-ultrasonic-sensor-ke-node-red-dan-hivemq-menggunakan-esp8266
- https://app.bdxtronix.com/blog/tutorial-install-node-red
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!