Loading...
OUR BLOG

Publish Data ke Blynk Melalui Node-RED

Hi BDx-ian!

 

Dalam tutorial kali ini kita akan belajar macam mana nak publish data ke Blynk melalui Node-RED menggunakan ESP32S . 

 

Integrasi Node-RED ke Blynk

 

Menggunakan Node-RED, kita dapat menggunakan beberapa ESP32 dalam 1 dashboard yang sama dengan adanya MQTT node. Node ini berfungsi untuk membaca “topic” yang telah kita “Publish” pada Arduino IDE dalam tutorial ini sebagai contoh. Input MQTT ini pula akan menghantar data ke komponen - komponen yang diperlukan contohnya msg.payload sebagai debugging tools dan UI Dashboard komponen untuk melihat sama ada data kita berjaya diterima oleh Node-RED ataupun tidak. 

 

Setelah selesai, pengguna haruslah meletakkan node “Blynk Write” untuk menghantar data ke Blynk Dashboard melalui Node-RED. Proses ini mengurangkan keserabutan yang harus dilakukan di dalam coding anda kerana  dengan meletakkan node ini, pengguna dapat terus mengakses data dari dashboard Blynk sama ada di website ataupun aplikasi Blynk di telefon pengguna. 

 

Mari kita belajar cara untuk menghubungkan Node-RED dan ESP32S dengan Blynk supaya data dari sensor DHT11 dapat dihantar ke Blynk.

 

 

Peralatan yang diperlukan:

 

Litar:

 

 

DHT11 Sensor

 

LED light

 

DC Motor

 

Code

Setelah selesai memasang komponen seperti gambar rajah di atas, anda boleh upload code yang disediakan seperti berikut ke dalam Arduino IDE anda.

 

#include <WiFi.h>

#include <WiFiClient.h>

#include <PubSubClient.h>

#include <DHT.h>


// Constants

#define DHTPIN 23

#define DHTTYPE DHT11  // DHT 11

#define MOTOR_RELAY_PIN 21


const char* ssid = "Nama WiFi Anda";

const char* password = "Password WiFi Anda";

const char* mqtt_server = "IP Address Server Anda";

const int ledPin = 13;


// Global variables

WiFiClient espClient;

PubSubClient client(espClient);

long lastMsg = 0;

DHT dht(DHTPIN, DHTTYPE);

float temperature = 0;

float humidity = 0;


void setup_wifi() {

  delay(10);

  Serial.println();

  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("IP address: ");

  Serial.println(WiFi.localIP());

}


void callback(char* topic, byte* message, unsigned int length) {

  Serial.print("Message arrived on topic: ");

  Serial.print(topic);

  Serial.print(". Message: ");

  String messageTemp;

  

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

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

    messageTemp += (char)message[i];

  }

  Serial.println();


  if (String(topic) == "esp32/output") {

    Serial.print("Changing output to ");

    if(messageTemp == "on") {

      Serial.println("on");

      digitalWrite(ledPin, HIGH);

    }

    else if(messageTemp == "off") {

      Serial.println("off");

      digitalWrite(ledPin, LOW);

    }

  }

}


void reconnect() {

  while (!client.connected()) {

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

    if (client.connect("ESP32Client")) {

      Serial.println("connected");

      client.subscribe("esp32/output");

    } else {

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

      Serial.print(client.state());

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

      delay(5000);

    }

  }

}


void setup() {

  Serial.begin(115200);


  dht.begin();  // initialize DHT

  setup_wifi();

  client.setServer(mqtt_server, 1883);

  client.setCallback(callback);

  

  pinMode(ledPin, OUTPUT);

  pinMode(MOTOR_RELAY_PIN, OUTPUT);

  digitalWrite(MOTOR_RELAY_PIN, LOW);

}


void loop() {

  if (!client.connected()) {

    reconnect();

  }

  client.loop();


  long now = millis();

  if (now - lastMsg > 5000) {

    lastMsg = now;

    

    temperature = dht.readTemperature();

    humidity = dht.readHumidity();

    

    char tempString[8];

    dtostrf(temperature, 1, 2, tempString);

    Serial.print("Temperature: ");

    Serial.println(tempString);


    char humString[8];

    dtostrf(humidity, 1, 2, humString);

    Serial.print("Humidity: ");

    Serial.println(humString);


    if (humidity < 90) {

      Serial.println("Humidity is below 90%. Activating the motor.");

      digitalWrite(MOTOR_RELAY_PIN, HIGH);

    } else {

      Serial.println("Humidity is 90% or above. Deactivating the motor.");

      digitalWrite(MOTOR_RELAY_PIN, LOW);

    }

  }

}

 

Url coding di GitHub : 

https://github.com/bdxtronix-tutorial/combinational-esp32-nodeRED-blynk

 

1. NODE-RED

 

Bagi tutorial in, kita akan menggunakan Node-RED sebagai medium untuk membolehkan data diperolehi dan dihantar dari ESP32S ke Telegram Bot. Bagi anda yang terlepas untuk tutorial sebelum ini boleh rujuk di Tutorial Install Node-RED untuk membolehkan anda mengimplementasi Node-RED dalam project anda yang akan datang. Untuk tutorial ini, kita menghubungkan Node-RED dengan Digital Ocean. Bagi anda yang terlepas untuk tutorial sebelum ini boleh rujuk di Tutorial Setup Digital Ocean. Mari kita sambung setup console dari Digital Ocean ini kepada Node-RED.

 

 

1. Ini adalah paparan setelah Node-RED telah berjaya memula.

 

 

2. Untuk mengakses ke Node-RED, taipkan Digital Ocean Droplet IP address anda diikuti dengan port number iaitu 1880.

 

http://IP-Address-Digital-Ocean-Anda:1880

 

3. Paparan kosong untuk anda memulakan projek anda adalah seperti ini. 

 

 

4. Ini adalah flow untuk projek kali ni. Kali ini kita akan menggunakan dua ESP32 yang bersamaan dengan adanya dua node MQTT Input. Untuk memudahkan pengecaman node-node yang digunakan, anda boleh letakkan ESP32One atau ESP32-1 sebagai contoh label.

 

 

2. BLYNK

 

Blynk adalah platform dengan aplikasi iOS dan Android yang membolehkan interface yang cantik dengan cepat untuk mengawal hardware dari jauh melalui Internet. Blynk berfungsi sebagai dashboard digital di mana anda boleh membina interface secara graphic untuk mana-mana sistem IoT dengan hanya menarik dan menjatuhkan widget.

 

Ia menyediakan satu set alat perisian dan blok pembinaan untuk merancang, membuat prototaip, dan melancarkan aplikasi untuk Internet of Things (IoT). Ini bermakna, dengan menggunakan Blynk, pembangun, pembuat, dan jurutera mudah menyambungkan perkakasan mereka ke aplikasi dan mengawalnya dari mana-mana sahaja di dunia melalui telefon pintar mereka.

 

Blynk menyokong pelbagai perkakasan, dari microcontrollers seperti Arduino, ESP8266, ESP32, Raspberry Pi, dan lain-lain. Ia serbaguna dan telah diterima secara meluas dalam komuniti DIY dan pembuat disebabkan oleh kesederhanaan dan kemudahan penggunaannya.

 

Jika anda terlepas cara untuk mencipta Blynk Dashboard ini, anda boleh merujuk ke Kawal LED menggunakan Blynk 2.0 Web Dashboard dan kita akan teruskan ke langkah seterusnya. 

 

Jika anda terlepas cara untuk menyambungkan Node-RED ke Blynk ini, anda boleh merujuk ke Publish Suhu dan Kelembapan dari DHT11 ke Digital Ocean, Node-RED dan Blynk dan kita akan teruskan ke langkah seterusnya. 

 

1. Setelah Blynk anda sudah tersedia, buka di bahagian Datastream dan pastikan ianya telah tersedia bagi board ESP32 pertama dan kedua.

 

 

2. Setelah selesai, tambah widget yang berkaitan dengan board kedua dan pastikan anda melabel dengan betul untuk elakkan kekeliruan. Kemudian tekan Save And Apply.

 

 

3. Paparan anda akan kelihatan sesuatu sebegini.

 

 

OUTPUT

 

 

Ini adalah paparan dari Dashboard Node-RED, untuk mengakses dashboard ini tambahkan ui selepas number port anda. Di sini anda akan dapat melihat ke semua data yang telah anda siapkan. 

 

 

Setelah di sambungkan dengan ESP32S melalui WiFi, pengguna dapat membuka serial monitor untuk melihat result di serial monitor ini. Ini memastikan data dapat terhasil dari ESP32S ini. 

 

 

Paparan ini pula adalah dari Blynk Dashboard di mana terdapat gauge untuk memantau temperature dan humidity. Terdapat juga Switch LED untuk ON dan OFF LED dari ESP32.

 

 

Setelah result telah berjaya diperolehi, DC motor akan mula berpusing sekiranya humidity kurang daripada 90%. Manakala LED pula akan menyala sekiranya anda menekan toggle di Blynk Dashboard iaitu di Switch LED dan Dashboard Node-RED iaitu di bahagian output. 

 

 

 

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.