Hi BDx-ian!
Dalam tutorial sebelum ini, kita telah belajar cara nak install Node.js dan Node-RED pada Windows. Jadi, tutorial kita kali ini akan belajar cara nak publish jarak dari Ultrasonic Sensor melalui HiveMQ Public MQTT dengan menggunakan NodeMCU ESP8266 kepada platform yang menyokong MQTT client iaitu Node-RED dan HiveMQ.
Apa itu MQTT?
MQTT atau Message Queuing Telemetry Transport adalah protokol messaging yang dibentuk dengan TCP/IP berdasarkan model messaging (Publish dan Subscribe). Selain itu, untuk menggunakan MQTT ini, device akan berhubung dengan sebuah Broker dan mempunyai suatu Topic tertentu. Publisher dan subscriber adalah client MQTT yang hanya berkomunikasi dengan broker MQTT. Client MQTT boleh digunakan dalam pelbagai jenis tidak kira aplikasi atau device; dari microcontroller seperti Arduino sehingga aplikasi yang menggunakan Cloud Hosting.
Apa itu Broker, Publish, Subscribe?
Broker dalam MQTT berfungsi untuk mengawal mesej publisher dan subscriber dari pelbagai device. Ia juga menerima mesej, menapis mesej, menentukan subscriber pada setiap mesej dan menghantar mesej. Beberapa contoh dari Broker yang ada seperti Mosquitto, HiveMQ dan Mosca.
Publish adalah cara device menghantar datanya ke subscribers. Biasanya publisher ini adalah sebuah device yang bersambung dengan sensor.
Subscribe adalah cara suatu device untuk menerima berbagai data daripada broker.
1. HiveMQ Public MQTT
Sebelum memulakan tutorial ini, kita belajar cara nak setup HiveMQ Public MQTT dengan menggunakan NodeMCU ESP8266 terlebih dahulu.
Sign Up Client HiveMQ.
Pergi ke link http://www.hivemq.com/demos/websocket-client/. Kemudian, cipta username dan password dan connect kepada Broker. HiveMQ akan memberi unik ClientID dan catat ClientID untuk connect NodeMCU ESP8266 ke HiveMQ dengan memasukkan ke dalam code.
Masukkan nama Host dan Last-Will Topic seperti dalam rajah berikut. Kemudian, tekan Connect.
Masukkan Topic pada Publish dan Subscripitions seperti dalam rajah berikut.
Pergi ke link http://www.mqtt-dashboard.com/ dan catat Host dan TCP Port untuk connect ke platform Node-RED.
2. Install PubSubClient library
Pergi ke link https://github.com/knolleary/pubsubclient/ untuk install PubSubClient. Selepas download selesai, buka Arduino IDE dan pergi ke Sketch -> Include Library -> Add .ZIP Library dan pilih zip file yang baru download tadi, dan click OK.
3. Node-RED
Bagi yang belum pernah cuba projek pada platform Node-RED, anda perlu pergi ke https://app.bdxtronix.com/blog/tutorial-install-node-red terlebih dahulu untuk meneruskan langkah dibawah.
A. Install Pallete Nodes
Buka dashboard Node-RED pada web browser, pergi ke Menu pada atas kanan dan klik Manage Palletes. Buat carian “node-red dashboard” dan tekan Install seperti dalam rajah dibawah.
B. MQTT in node, debug node dan text node
Drag dan drop MQTT in node, debug node dan text node pada dashboard untuk membentuk satu Flow seperti rajah dibawah.
C. Edit MQTT in node
Double klik MQTT in Node -> Masukkan server MQTT, Port dan Topik.
D. Edit Text node
Double klik Text node -> Masukkan ultrasonic sensor dengan tekan Add new dashboard group-> tekan Add new dashboard tab-> Taip Ultrasonic sensor pada Name -> Tekan Add-> Tekan Done.
E. Deploy
Tekan Deploy pada kanan atas.
Komponen
Komponen yang diperlukan
- Ultrasonic Sensor
- NodeMCU ESP8266 dan USB
- Breadboard
- Jumper wire
Litar
Ultrasonic sensor
- VCC → pin Vin ESP8266
- TRIG → pin D7 ESP8266
- ECHO → pin D8 ESP8266
- GND → GND ESP8266
Code
#include <PubSubClient.h> #include <stdlib.h> #include <ESP8266WiFi.h>
#define triggerPin 13 #define echoPin 15
const char* ssid = "Nama Wifi Anda"; const char* password = "Password Wifi Anda"; const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient; PubSubClient client(espClient); void setup_wifi() {
delay(10);
Serial.print("connecting to"); Serial.println(ssid); WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("-"); }
Serial.println(); Serial.println("WiFi Connected"); Serial.println("WiFi got IP"); Serial.println(); Serial.println(WiFi.localIP()); }
void reconnect() {
while(!client.connected()){ Serial.println("Attempting MQTT connection");
if(client.connect("ClientID anda")) //Masukkan ClientID anda daripada HiveMQ Client { Serial.println("Connected"); client.publish("esp8266/distance","Connected!"); client.subscribe("esp8266/distance"); Serial.print("subscribed!"); } else { Serial.print("Failed, rc = "); Serial.print(client.state()); Serial.println("Waiting for 5 seconds to try again"); delay(5000); } } }
void setup() { Serial.begin(115200); pinMode(triggerPin, OUTPUT); pinMode(echoPin, INPUT); setup_wifi(); client.setServer(mqtt_server, 1883);
reconnect(); }
void loop() {
if(!client.connected()) { reconnect(); Serial.print("disconnected"); } client.loop(); int duration, distance; digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2)/29.1;
Serial.println(distance);
client.publish("esp8266/distance", String(distance).c_str()); delay(1000);
client.loop(); } |
Output
HiveMQ
-Pergi ke http://www.hivemq.com/demos/websocket-client/ dan connect dengan username dan password yang sama (Rujuk langkah 1).
Distance dipaparkan pada HiveMQ.
Node-RED
-Pergi ke platform Node-RED (Rujuk langkah 3).
Distance dipaparkan pada dashboard 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!