Loading...
OUR BLOG

Publish Suhu dan Kelembapan dari DHT11 ke Digital Ocean, Node-RED dan Blynk

Hi BDx-ian!

 

Dalam tutorial kali ini kita akan belajar macam mana nak publish suhu dan kelembapan dari DHT11 ke Node-RED dan Blynk menggunakan ESP32S . 

 

Apa Itu DigitalOcean?

 

DigitalOcean adalah satu Cloud Service Provider yang melengkapkan developers, startups dan pelajar untuk membolehkan penggunaan platform cloud infrastructure-as-a-service. Menggunakan DigitalOcean sebagai pelajar, anda berpeluang untuk mempelajari asas penggunaan Virtual Machine, Droplet, Database dan membina aplikasi dengan Node.Js sebagai contoh. 

 

DigitalOcean yang diaplikasi dalam tutorial minggu ini membolehkan kita belajar cara untuk menggunakan DigitalOcean sebagai host bagi membolehkan penggunaan Node-RED untuk menghubungkan ESP32S dengan cloud. Kita juga akan menggunakan Blynk sebagai dashboard dan memantau result yang diperolehi iaitu suhu dan kelembapan serta dapat ON dan OFF LED.

 

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


#define BLYNK_TEMPLATE_ID "ID Template Blynk Anda"

#define BLYNK_TEMPLATE_NAME "Nama Template Blynk Anda"

#include <BlynkSimpleEsp32.h>

#define BLYNK_AUTH_TOKEN "Authorization Token Blynk Anda"


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;

int value = 0;

DHT dht(DHTPIN, DHTTYPE);

float temperature = 0;

float humidity = 0;

BlynkTimer timer;


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);

    }

  }

}


BLYNK_WRITE(V0) {

  int value = param.asInt();

  if(value == 1) {

    client.publish("esp32/output", "on");

  } else {

    client.publish("esp32/output", "off");

  }

  Blynk.virtualWrite(V1, value);

}


void myTimerEvent() {

  Blynk.virtualWrite(V2, millis() / 1000);

}


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);

  

  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);

  timer.setInterval(1000L, myTimerEvent);

}


void loop() {

  Blynk.run();

  timer.run();


  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);

    client.publish("esp32/temperature", tempString);

    Blynk.virtualWrite(V3, temperature);


    char humString[8];

    dtostrf(humidity, 1, 2, humString);

    Serial.print("Humidity: ");

    Serial.println(humString);

    client.publish("esp32/humidity", humString);

    Blynk.virtualWrite(V4, humidity);


    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/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.

 

 

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. 

 

1. Setelah Blynk anda sudah tersedia, kembali ke Node-RED untuk membuat sedikit modifikasi iaitu anda harus menambah pallete. Tekan Manage Palette.

 

 

2. Pada bahagian Manage Palette, tekan Install dan search untuk node-red-contrib-blynk-iot dan tekan Install.

 

 

3. Setelah Blynk IoT hadir pada Palette sebelah kiri anda, drag masuk node Write ke dalam projek anda lalu double-click pada node tersebut dan ubah setting seperti berikut.

 

 

4. Setelah itu tekan pencil di tepi Connection, masukkan url seperti gambar di bawah dan masukkan Authorization Token dan Template ID yang diperoleh dari Blynk anda.

 

 

5. Setelah selesai tekan Deploy dan hasilnya Blynk Dashboard anda akan menerima informasi dari Node-RED yang telah disambungkan dengan ESP32. Ini adalah contoh output yang dapat diperolehi dari Blynk untuk tutorial ini.

 

 

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.