Contents
Untuk project IoT (Internet of Things) kali ini, kita akan coba memonitor suhu ruang dan kelembaban udara melalui sensor DHT11. Untuk controller-nya kita akan menggunakan board NodeMCU dan untuk tampilan data di web-nya kita akan menggunakan turnkey dashboard, yakni Thingsboard versi Community Edition alias open source alias gratis :). Thingsboard ini adalah semacam layanan IOT dashboard yang menyediakan core service juga untuk broker IoT-nya. Jadi selain mendapatkan rapid drag and drop web development, Anda juga dapat mendefinisikan sendiri broker IoT untuk melayani paket-paket IoT Anda. Untuk lebih jelasnya tentang Thingsboard dapat Anda baca artikel sebelumnya.
Material dan Bahan Project Suhu IoT – Thingsboard
Baiklah, agar project sederhana ini dapat terlaksana dengan baik, siapkanlah bahan-bahan sebagai berikut:
– sensor DHT11, bisa dibeli di sini
– NodeMCU (dan kabel data), bisa dibeli di sini
– protoboard dan kabel jumper secukupnya
Jika sudah, rangkai semua komponen di atas seperti gambar di bawah
Software untuk Project Suhu IoT – Thingsboard
Untuk project IoT kita kali ini, saya akan menggunakan protokol MQTT (Message Queuing Telemetry Transport ). Udah pada tau kan MQTT? Kalo belum silahkan googling dulu :). Intinya MQTT adalah salah satu protokol IoT yang lightweight, sangat ringan. Jadi cocok digunakan pada device IoT yang kecil resource-nya (RAM, ROM, dsb) dan kecepatan internet yang rendah. Di Arduino kita bisa menggunakan library ‘PubSubClient’ (dari kata Publish and Subcribe Client). Jadi di MQTT itu ada dua macam method, yakni ‘Publish’ untuk mengirim data dan ‘Subscribe’ untuk menerima data. Untuk lebih detailnya bisa googling dulu :). Ohya, nanti kita set NodeMCU kita supaya dapat diprogram dalam environment Arduino IDE. Udah pada bisa kan? Jika belum, bisa membaca artikel berikut untuk persiapannya.
[AdSense-A]
Ok, sebagai resume, agar dapat menjalankan contoh sketch Arduino untuk NodeMCU berikut, beberapa library yang harus Anda instal adalah:
– PubSubClient
– Adafruit DHT sensor library
– Adafuit Unified sensor library (dependency library Adafruit)
Untuk mudahnya Anda dapat menginstal semua library di atas menggunakan menu Tools-Manage Libraries, kemudian ketikkan di kotak search library yang ingin Anda instal. Jika library sudah terinstal semua, seharusnya tidak akan ada message error yang Anda temui ketika Anda compile
Sebelum upload script ke NodeMCU, sementara kita beralih ke dashboard Thingsboard dulu. karena kita akan membutuhkan token untuk device IoT kita (nodeMCU). Silahkan login ke Thingsboard terlebih dahulu di demo.thingsboard.io/login kemudian masuk ke menu ‘Devices’. Di pojok sebelah kanan ada lingkaran dengan tanda ‘+’, klik lingkaran tersebut kemudian klik ‘Add new device’ (lihat gambar di bawah)
Tuliskan nama device Anda (contoh: NodeMCU-1), sedangkan untuk ‘Device Type’ bisa isikan dengan pilihan ‘default’. Setelah itu tekan tombol ‘Add’
Setelah device baru muncul di menu ‘Devices’, klik device baru tersebut (case di atas adalah device ‘NodeMCU-1), kemudian klik tombol ‘Copy Token Access’. Token inilah yang kita butuhkan untuk sketch NodeMCU kita nantinya.
Sketch NodeMCU untuk DHT11 – IoT – Thingsboard
Berikut sketch NodeMCU untuk mengirim data sensor DHT11 ke dashboard Thingsboard menggunakan protokol MQTT. Sesuaikan konstanta ‘ssid’, ‘password’ dan ‘token’ sesuai dengan settingan WIFI access point dan device Anda.
#include "DHT.h"
#include "PubSubClient.h"
#include "ESP8266WiFi.h"
const char* ssid = "ssid_wifi_anda";
const char* password = "password_anda";
#define TOKEN "token_anda" //Ambil dari device thingsboard di atas
char ThingsboardHost[] = "demo.thingsboard.io";
#define DHTPIN D5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
WiFiClient wifiClient;
PubSubClient client(wifiClient);
int status = WL_IDLE_STATUS;
unsigned long lastSend;
void setup()
{
lastSend = 0;
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(200);
Serial.print(".");
}
Serial.println("");
Serial.print("connected to");
Serial.println(ssid);
client.setServer( ThingsboardHost, 1883 );
}
void loop()
{
if ( !client.connected() )
{
reconnect();
}
if ( millis() - lastSend > 5000 ) { // kirim data suhu tiap 1 detik
getAndSendTemperatureAndHumidityData();
lastSend = millis();
}
}
void getAndSendTemperatureAndHumidityData()
{
Serial.println("Collecting temperature data.");
// baca suhu dan kelembaban
float humidity = dht.readHumidity();
// Read temperature as Celsius (the default)
float temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.println("Sending data to ThingsBoard:");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C ");
// Prepare a JSON payload string
String payload = "{";
payload += "\"humidity\":";
payload += String(humidity);
payload += ",";
payload += "\"temperature\":";
payload += String(temperature);
payload += "}";
char attributes[1000];
payload.toCharArray( attributes, 1000 );
client.publish( "v1/devices/me/telemetry",attributes);
Serial.println( attributes );
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
status = WiFi.status();
if ( status != WL_CONNECTED) {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
Serial.print("Connecting to ThingsBoard node ...");
// Attempt to connect (clientId, username, password)
if ( client.connect("Esp8266", TOKEN, NULL) ) {
Serial.println( "[DONE]" );
} else {
Serial.print( "[FAILED] [ rc = " );
Serial.println( " : retrying in 5 seconds]" );
delay( 500 );
}
}
}
Jika sudah Anda upload sketch di atas ke NodeMCU Anda, kita coba cek datanya di Thingsboard melalui menu ‘Latest Telemetry’ di device Anda tadi (NodeMCU-1). Simak gambar di bawah untuk lebih jelasnya
Jika sudah muncul angka-angka di situ berarti data suhu dan kelembaban dari NodeMCU-DHT11 sudah berhasil masuk ke server Thingsboard. Jika belum cek wiring NodeMCU Anda atau mungkin koneksi internetnya. Anda juga bisa melihat output dari Serial Monitor untuk bahan analisa/troubleshoot
[AdSense-B]
Langkah terakhir, kita akan mencoba menampilkan data suhu dan kelembaban tadi dalam sebuah chart di dashboard Thingsboard kita. Caranya dengan mengklik ‘key’ yang muncul di menu ‘Latest Telemetry’ tadi kemudian klik tombol ‘Show on Widget’
Kemudian pilih widget ‘Chart’ dan tekan tombol ‘Add to Dashboard’
Anda bisa memilih ‘Select existing dashboard’ jika Anda sudah pernah membuatnya atau ‘Create new dasboard’ jika akan membuat dashboard baru, kemudian tekan tombol ‘Add’
Selamat, dashboard Thingsboard Anda sudah jadi :). Dapat Anda lihat pergerakan suhu dan kelembaban yang dikirim dari device Anda
Dashboard yng Anda buat tadi hanya dapat dilihat oleh Anda saja. Bagaimana supaya dapat dilihat oeh orang lain? Anda perlu membuatnya jadi ‘public’ dulu. Ada dua hal yang perlu dijadikan ‘public’ yakni ‘device’ dan ‘dashboard’. Untuk device, masuk ke menu ‘Device’, kemudian klik tanda ‘share’ seperti gambar di bawah. Untuk dashboard caranya juga sama.
Dan begitu dashboard Anda sudah public, maka Anda akan mendapatkan sebuah URL yang dapat Anda (dan orang lain) akses untuk melihat dashboard project IoT Anda melalui web browser
Sekian untuk tutorial pengiriman data suhu dan kelembaban sensor DHT11 menggunakan NodeMCU ke server Thingsboard. Semoga ada manfaatnya. Untuk next tutorial akan coba saya bahas bagaimana mengontrol device dari Thingsboard.
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com
Terima kasih mas Ajie untuk artikelnya yang sangat membantu sekali.
Nah… Kalau mas adjie sempat, tolong donk testing dan ulas juga produk Dashboard karya saya, karya anak Indonesia, namanya HINET Live Panel..
Dan file filenya itu bisa di download di Google Drive di https://drive.google.com/drive/folders/1IA4XQGIuq0rvvLXkBkPkQBCVaY4JwY?usp=sharing
atau videonya, bisa dlihat di Youtube di alamat ini
https://www.youtube.com/watch?v=sWCZohIsEB8
Terima kasih sebelumnya untuk support dan dukungannya.
siap mas, ASAP ya