0% menganggap dokumen ini bermanfaat (0 suara)
26 tayangan

node red, node js

dasar dasar teori

Diunggah oleh

77dr28rxb5
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
26 tayangan

node red, node js

dasar dasar teori

Diunggah oleh

77dr28rxb5
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 40

PRAKTIKUM

INTERNET OF THINGS

Disusun oleh :
FAUZI IRMAN MAULANA (21410300488)
OSCAR ABDUL HAKIM (21410300490)
ALMAS GILANG RAMADHAN (21410300489)
SAIFUL FADIL MUBAROK (21410300487)

PROGRAM STUDI TEKNIK ELEKTRO S-1


FAKULTAS TEKNIK
UNIVERSITAS WIJAYAKUSUMA PURWOKERTO
2024
PERTEMUAN KEDUA

A. TUJUAN PRAKTIKUM
1. Memahami cara menggunakan ESP8266 untuk membaca data dari sensor jarak (HC-
SR04) dan suhu (DHT11/DHT22), serta mengonfigurasinya untuk mengirim data
secara nirkabel menggunakan protokol MQTT.
2. Mempelajari penggunaan broker MQTT (seperti Mosquitto/EMQX) untuk mengelola
komunikasi publish/subscribe antara ESP8266 dan aplikasi client.
3. Membuat dashboard interaktif di Node-RED untuk memvisualisasikan data sensor
dalam bentuk grafik atau indikator dengan memanfaatkan data dari broker MQTT.
4. Merancang sistem IoT real-time yang mengintegrasikan perangkat keras (ESP8266
dan sensor) dengan perangkat lunak (MQTT dan Node-RED).
5. Menganalisis data sensor suhu dan jarak untuk memahami pola dan perubahan
lingkungan melalui visualisasi yang telah dibuat.

B. ALAT DAN BAHAN


1. ESP8266 / ESP32.
2. Sensor Suhu DHT11.
3. Sensor Ultrasonic.
4. Kabel Jumper.
5. Breadboard.
6. Komputer/Laptop.
7. Broker HiveMQ.
8. Node-RED.
C. DASAR TEORI
Dasar teori dalam pengembangan aplikasi IoT untuk sensor suhu dan jarak
melibatkan pemahaman mengenai konsep IoT, peran ESP8266, sensor suhu dan jarak,
platform IoT, protokol komunikasi, dan implementasi sistem IoT. Pengetahuan dasar ini
akan membantu dalam pengembangan sistem IoT yang andal untuk pemantauan suhu dan
jarak secara otomatis serta akses jarak jauh. MQTT adalah protokol komunikasi berbasis
publish/subscribe yang melibatkan broker sebagai komponen utama yang mengelola
komunikasi antara publisher dan subscriber. Broker menerima pesan dari publisher
berdasarkan topik tertentu dan mendistribusikannya ke subscriber yang berlangganan
topik tersebut. Contoh broker populer adalah Mosquitto, HiveMQ, dan EMQX. Publisher
bertugas mengirimkan pesan tanpa mengetahui siapa subscriber-nya, sedangkan
subscriber menerima pesan dengan berlangganan ke topik tertentu. Broker bertugas
melakukan routing pesan dari publisher ke subscriber sesuai topik, memantau manajemen
topik, mengelola keamanan (autentikasi dan otorisasi), serta mendukung Quality of
Service (QoS), yang mencakup tiga level: QoS 0 (tanpa jaminan), QoS 1 (pesan diterima
minimal sekali), dan QoS 2 (pesan diterima tepat satu kali). MQTT sangat efisien dalam
penggunaan bandwidth, ringan untuk perangkat dengan sumber daya terbatas, dan
mendukung komunikasi desentralisasi antara publisher dan subscriber. Broker juga dapat
menyimpan pesan terakhir untuk topik tertentu (retained messages). Dalam alur kerja,
publisher mengirimkan pesan berupa header dan payload ke broker, yang kemudian
memproses dan mendistribusikan pesan ke subscriber yang berlangganan pada topik yang
relevan. Subscriber menerima pesan sesuai topik yang diikutinya.

D. LANGKAH LANGKAH PRAKTIKUM


1. Persiapan Perangkat dan Software
a. Perangkat Keras
1) ESP8266 (NodeMCU).
2) Sensor DHT11 (suhu dan kelembaban).
3) Sensor Ultrasonic (HC-SR04).
4) Breadboard dan kabel jumper.
b. Software
1) Arduino IDE (untuk pemrograman ESP8266).
2) Broker MQTT (Mosquitto, dapat diinstal secara lokal atau menggunakan
layanan cloud seperti HiveMQ).
3) Node-RED (untuk visualisasi data).
2. Rangkaian Perangkat Keras
a. Pasangkan DHT11 pada breadboard.
b. Pasangkan ESP8266 pada breadboard.
c. Siapkan Breadboard.
d. Pasangkan HC-SR04 pada breadboard.
3. Pemrograman ESP8266
a. Instalasi Library di Arduino IDE
1) Install ESP8266 Board
Tambahkan URL Board Manager seperti dibawah :

2) Pilih "ESP8266 Boards" dan instal.


3) Library MQTT: Install PubSubClient.
4) Library DHT: Install DHT sensor library dari Adafruit.
b. Kode untuk ESP8266
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

#define DHT_PIN D7 // Pin GPIO untuk sensor DHT11


#define TRIGGER_PIN D5 // Pin GPIO untuk trigger HC-SR04
#define ECHO_PIN D6 // Pin GPIO untuk echo HC-SR04
#define MAX_DISTANCE 100 // Jarak maksimum yang akan diukur oleh sensor HC-SR04
#define INTERVAL 5000 // Interval pengiriman data ke server MQTT (ms)

const char* ssid = "realme C17"; // WiFi SSID


const char* password = "12345678"; // WiFi Password
const char* mqtt_server = "broker.hivemq.com";
const char* temperature_topic = "mbah_Haji_SUHU_X";
const char* level_topic = "mbah_Haji_JARAK_X";

WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHT_PIN, DHT11);
long lastMsg = 0;
float temperature = 0;
float level = 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.print("WiFi connected, IP address: ");
Serial.println(WiFi.localIP());
}

void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("clientId-xEZb7frpLH")) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}

float readDistance() {
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);

// Membaca durasi pulse dari pin ECHO


float duration = pulseIn(ECHO_PIN, HIGH, 30000); // Timeout 30ms
if (duration == 0) {
Serial.println("No pulse detected");
return -1;
}

// Menghitung jarak (dalam cm)


float distance = (duration / 2) * 0.0343;
return distance;
}

void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
dht.begin();
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}

void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
if (now - lastMsg > INTERVAL) {
lastMsg = now;

// Membaca suhu dari DHT11


temperature = dht.readTemperature();
if (isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
} else {
Serial.print("Temperature: ");
Serial.println(temperature);
client.publish(temperature_topic, String(temperature).c_str());
}

// Membaca jarak dari HC-SR04


float distance = readDistance();
if (distance >= 0 && distance <= MAX_DISTANCE) {
level = 100 - ((distance / MAX_DISTANCE) * 100);
Serial.print("Distance: ");
Serial.println(distance);
client.publish(level_topic, String(distance).c_str());
} else if (distance > MAX_DISTANCE) {
Serial.println("Out of range");
}
}
delay(100);
}

c. Pembahasan Program
1) Inisialisasi Koneksi WiFi
a) Bagian setup_wifi() digunakan untuk menghubungkan ESP8266 ke
jaringan WiFi.
b) Menggunakan SSID dan password yang didefinisikan di program (realme
C17 dan 12345678).
c) Setelah terhubung, alamat IP perangkat ditampilkan di Serial Monitor.
2) Koneksi ke Broker MQTT
a) Fungsi reconnect() memastikan ESP8266 tetap terhubung ke broker
MQTT.
b) Menggunakan broker public broker.hivemq.com pada port 1883.
c) Topik yang digunakan
 mbah_Haji_SUHU_X untuk mengirim data suhu.
 mbah_Haji_JARAK_X untuk mengirim data jarak.
3) Pengukuran Suhu (DHT11)
a) Menggunakan library DHT untuk membaca suhu.
b) Data suhu dikirimkan ke broker MQTT jika pengukuran berhasil.
c) Jika sensor gagal membaca suhu, pesan kesalahan ditampilkan di Serial
Monitor.
4) Pengukuran Jarak (HC-SR04)
a) Fungsi readDistance() mengukur jarak berdasarkan durasi pulse yang
diterima dari sensor HC-SR04.
b) Jika jarak berada dalam batas maksimal (MAX_DISTANCE), data
dikalkulasi dan dikirimkan ke broker MQTT.
c) Jarak dikonversi ke persen level (100% jika jarak 0 cm, 0% jika mencapai
jarak maksimal).
d) Jika jarak melebihi batas atau tidak terdeteksi, pesan kesalahan
ditampilkan di Serial Monitor.
5) Pengiriman Data MQTT
a) Data suhu dan jarak diterbitkan ke broker MQTT setiap 5000 ms (interval
pengiriman).
b) Data ditampilkan di Serial Monitor untuk debugging.
d. Pin yang Digunakan
1) Pin untuk DHT11
a) DHT_PIN (D7): Pin digital untuk membaca data suhu dari sensor DHT11.
2) Pin untuk HC-SR04
a) TRIGGER_PIN (D5): Pin digital untuk mengirim sinyal trigger ke sensor
HC-SR04.
b) ECHO_PIN (D6): Pin digital untuk menerima sinyal echo dari sensor HC-
SR04.
3) Pin Lainnya pada ESP8266
a) 3.3V: Untuk memberi daya pada DHT11.
b) 5V: Untuk memberi daya pada HC-SR04.
c) GND: Ground untuk semua perangkat.
4. Installasi Broker MQTT
a. Broker Lokal (Mosquitto)
1) Instal Mosquitto di komputer
2) Jalankan Broker

3) Gunakan layanan seperti HiveMQ atau test.mosquitto.org

4) Kemudian Pengaturan Hive MQ kemudian buka


https://www.hivemq.com/mqtt/public-mqtt-broker/ dan pilih Try MQTT
Broker Client. Klik connect, kemudian tambahkan Ke VCC Ke GPIO
ESP32/ESP8266 Ke GND subscribtions dengan nama topic sama seperti yang
ada pada program ESP, baik untuk topik suhu dan kelembaban kemudian liat
pada kolom message.
5) Perhatikan apakah data berhasil terkirim atau tidak, kalau berhasil terkirim ke
broker ditandai dengan muncul nilai untuk temperature dan distance sensor
ultrasonic pada kolom messages.
5. Visualisasi dengan Node-RED
a. Instal Node-RED
1) Instal Node-RED di komputer atau server.
2) Node-RED membutuhkan Node.js untuk dijalankan, berikut cara
menginstallnya
3) Instal Node.js (versi LTS).
4) Periksa versi Node.js dan npm

5) Instal Node-RED menggunakan npm

6) Jalankan Node-RED

7) Jika instalasi node-red selesai, cukup ketik node-red di command


prompt, maka node-red akan aktif
8) Tahap terakhir, cukup jalankan browser (Chrome Recommended), akses
local IP atau localhost dengan port sesuai settingan node-red misal nya
http://127.0.0.1:1880/ .
9) Maka akan muncul untuk tampilan Node-RED

10) Selanjutnya install palette atau exstension pada node-red dengan cara, klik
garis tiga pada pojok kanan atas node-red terus pilih manage palette
11) Kemudian pilih tab install, ketikan node-red-dashboard pada kolom
pencarian, terus pilih install

12) Cek pada pilihan flow dengan scroll kebawah seharusnya sudah ada flow
untuk membuad dashboard

13) Kemudian ambil dua buah flow dengan Drag And Drop
14) Douuble klik pada mqtt yang barusan diambil kemudian akan muncul sebagai
berikut

15) Pada kolom Server silahkan anda klik tombol pensil seperti yang ditunjuk
pada gambar selanjutnya akan muncul tampilan untuk konfigurasi server,
silahkan anda isi sebagai berikut, kemudian jika sudah klik tombol add
16) Kemudian akan kembali ke tampilan sebelumnya, silahkan untuk server anda
pilih ke yang barusan anda tambahkan, terus masukan topic untuk subscribe
ke topic temperature dari ESP anda,jika sudah pilih done

17) Lakukan hal yang sama untuk mqtt in topic distance.


18) Jika sudah silahkan coba anda klik tombol deploy pada pojok kanan atas
Node-RED .
19) Selanjutnya silahkan anda ambil untuk flow membuat dashboard
20) Lakukan konfigurasi untuk setiap flow dashboard yang telah diambil.
Misal pada flow chart lakukan konfigurasi seperti sebagai berikut

21) Untuk membuat dashboard group caranya klik tombol pensil seperti
pada gambar sebelumnya, terus akan muncul tab seperti pada gambar
berikut
22) Untuk membuat dashboard tab dapat dengan menekan tombol pensil
seperti pada gambar sebelumnya lalu akan muncul gambar seperti
berikut
Jika sudah
memasukan
nama
dashboard
klik ad

Masukan
nama
dashboard
nya

23) Jika sudah maka pada konfigurasi flow dashboard maka seharusnya muncul
untuk group dashboard dan tab dashboard yang barusan anda buat.
24) Kemudian klik tombol done.
25) Lakukan konfigurasi serupa untuk flow dashboard yang lainnya.
26) Jika sudah hubungkan untuk setiap komponen flow yang telah
dikonfigurasi sebelumnya misal sebagai berikut

27) Jika sudah klik tombol Deploy pada pojok kanan atas Node-RED.
28) Selanjutnya untuk melihat dashboard yang telah anda buat bisa
mengakses url dengan endpoint “/ui” yakni http://127.0.0.1:1880/ui/
maka akan muncul dashboard yang telan anda buat sebelumnya.

E. DIAGRAM BLOK RANGKAIAN


F. WIRING DIAGRAM RANGKAIAN
G. HASIL DATA

PENGAMBILAN DATA SENSOR JARAK


NO WAKTU JARAK JARAK PADA SELISIH ERROR
SEBENARNYA SENSOR
1 16:47 3.5 3.67 0.17 1.82%
2 16:49 5.5 5.66 0.16 2. 31%
3 16:50 6.5 6.74 0.24 2.50%
4 16:52 7.5 7.56 0.06 2.72%
5 16:53 8.5 8.8 0. 33 2.86%
6 16: 53 9.5 9.57 0.07 3.07%
7 16: 53 10.5 10.75 0.25 3.20%
8 16: 54 11.5 11.88 0. 38 3. 33%
9 16:54 12.5 12.74 0.24 3.50%
10 16:55 12.5 12.7 0.23 3.50%
RATA-RATA 0, 12% 2, 88%

PENGAMBILAN DATA SENSOR SUHU


NO WAKTU SUHU PADA SUHU PADA SELISIH ERROR
THERMOMETER SENSOR
1 17: 36 29.5 29.3 0.2 5%
2 17: 37 29.6 29.2 0.4 5%
3 17: 38 29.7 29.2 0.5 5%
4 17: 39 29.3 29.4 0.1 5%
5 17:40 29.5 29.3 0.2 5%
6 17:41 29.3 29.4 0.1 5%
7 17:42 29.2 29.4 0.2 5%
8 17:43 29.5 29.2 0.3 5%
9 17:44 29.4 29.3 0.1 5%
10 17:45 29.2 29.3 0.1 5%
RATA-RATA 0, 22% 5, 40%
FUNGSI DAN KETERANGAN
NO PIN ESP 8266 MASUK KE FUNGSI
1 PIN D5 PIN DATA DHT 11 a. Pin data dari sensor DHT11
terhubung ke pin digital D5
pada mikrokontroler.
b. Digunakan untuk mengirimkan
data suhu dan kelembaban dari
DHT11 ke mikrokontroler
2 PIN GND PIN GND HCSR04 a. Semua perangkat harus
DAN PIN GND memiliki ground (GND) yang
DHT22 sama untuk menyamakan
referensi tegangan.
b. GND sensor HC-SR04 dan
sensor DHT22 terhubung ke
GND mikrokontroler
3 PIN 3V PIN HCSR VCC a. Memberikan daya sebesar 3.3V
ke modul HC-SR04 (meskipun
beberapa modul HC-SR04
biasanya membutuhkan 5V,
perlu dipastikan jenis
modulnya kompatibel dengan
3.3V).
4 PIN D7 PIN ECHO HCSR04 a. Pin ECHO dari HC-SR04
terhubung ke pin digital D7
pada mikrokontroler.
b. Pin ini menerima sinyal
pantulan dari gelombang
ultrasonik untuk menghitung
jarak.
5 PIN D6 PIN TRIG HCSR04 a. Pin TRIG dari HC-SR04
terhubung ke pin digital D6
pada mikrokontroler.
b. Digunakan untuk mengirimkan
pulsa ultrasonik dari sensor.
6 PIN VIN PIN VCC DHT11 a. Memberikan daya ke sensor
DHT11 melalui pin VIN pada
mikrokontroler (biasanya 5V
atau 3.3V tergantung jenis
mikrokontroler).
H. DOKUMENTASI
I. CARA KERJA PROGRAM
1. BLOK 1
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
Program ini digunakan untuk menghubungkan perangkat ESP8266 ke Wi-Fi,
berkomunikasi dengan broker MQTT, dan membaca data suhu serta kelembapan
menggunakan sensor DHT. Berikut adalah ringkasan dari library yang digunakan:
a. ESP8266WiFi.h: Menghubungkan ESP8266 ke Wi-Fi dan menyediakan fungsi
untuk mengonfigurasi koneksi Wi-Fi.
b. PubSubClient.h: Digunakan untuk berkomunikasi dengan broker MQTT,
memungkinkan perangkat mengirim dan menerima data melalui protokol MQTT.
c. Adafruit_Sensor.h: Library pendukung untuk berbagai sensor, menyediakan
antarmuka standar untuk membaca data dari sensor.
d. DHT.h: Digunakan untuk membaca data dari sensor DHT (DHT11 atau DHT22),
seperti suhu dan kelembapan.
2. BLOK 2
#define DHT_PIN D7 // Pin GPIO untuk sensor DHT11
#define TRIGGER_PIN D5 // Pin GPIO untuk trigger HC-SR04
#define ECHO_PIN D6 // Pin GPIO untuk echo HC-SR04
#define MAX_DISTANCE 100 // Jarak maksimum yang akan diukur oleh
sensor HC-SR04
#define INTERVAL 5000 // Interval pengiriman data ke server MQTT
(ms)
Program ini mendefinisikan beberapa pengaturan pin dan parameter untuk sensor
DHT11 (untuk mengukur suhu dan kelembapan) dan sensor ultrasonik HC-SR04
(untuk mengukur jarak). Berikut penjelasan singkat dari masing-masing bagian:
a. #define DHT_PIN D7: Menetapkan pin D7 pada ESP8266 untuk menghubungkan
sensor DHT11, yang digunakan untuk membaca data suhu dan kelembapan.
b. #define TRIGGER_PIN D5: Menetapkan pin D5 pada ESP8266 sebagai pin untuk
mengirimkan sinyal trigger ke sensor ultrasonik HC-SR04.
c. #define ECHO_PIN D6: Menetapkan pin D6 pada ESP8266 untuk menerima
sinyal echo dari sensor HC-SR04 yang digunakan untuk menghitung jarak.
d. #define MAX_DISTANCE 100: Menentukan jarak maksimum (dalam cm) yang
dapat diukur oleh sensor HC-SR04. Dalam hal ini, maksimum 100 cm.
e. #define INTERVAL 5000: Menentukan interval pengiriman data ke server MQTT
dalam milidetik (ms). Data akan dikirim setiap 5000 ms (atau 5 detik).
3. BLOK 3
const char* ssid = "realme C17"; // WiFi SSID
const char* password = "12345678"; // WiFi Password
const char* mqtt_server = "test.mosquitto.org";
const char* temperature_topic = "SUHU_GROUP_JUT_X";
const char* level_topic = "SUHU_GROUP_JUT_PO";
Program ini mendefinisikan beberapa variabel yang digunakan untuk
mengonfigurasi koneksi Wi-Fi dan MQTT. Berikut penjelasan ringkas dari masing-
masing bagian:
a. const char* ssid = "realme C17";: Menetapkan nama SSID (nama jaringan Wi-Fi)
yang akan digunakan oleh perangkat untuk terhubung ke jaringan Wi-Fi, dalam
hal ini "realme C17".
b. const char* password = "12345678";: Menetapkan kata sandi untuk jaringan Wi-
Fi yang disebutkan di atas, yaitu "12345678".
c. const char* mqtt_server = "test.mosquitto.org";: Menetapkan alamat server
MQTT yang digunakan untuk menghubungkan perangkat, dalam hal ini
menggunakan server test.mosquitto.org.
d. const char* temperature_topic = "SUHU_GROUP_JUT_X";: Menetapkan topik
MQTT yang akan digunakan untuk mengirim data suhu, dalam hal ini topiknya
adalah "SUHU_GROUP_JUT_X".
e. const char* level_topic = "SUHU_GROUP_JUT_PO";: Menetapkan topik MQTT
lainnya yang mungkin digunakan untuk mengirimkan data lainnya, dalam hal ini
topiknya adalah "SUHU_GROUP_JUT_PO".
4. BLOK 4
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHT_PIN, DHT11);
long lastMsg = 0;
float temperature = 0;
float level = 0;
Program ini menginisialisasi beberapa objek dan variabel yang digunakan untuk
koneksi Wi-Fi, MQTT, serta sensor DHT11. Berikut adalah penjelasan ringkas dari
setiap bagian:
a. WiFiClient espClient;: Membuat objek espClient yang digunakan untuk
menangani koneksi Wi-Fi pada ESP8266. Ini memungkinkan perangkat untuk
terhubung ke jaringan Wi-Fi.
b. PubSubClient client(espClient);: Membuat objek client yang digunakan untuk
berkomunikasi dengan broker MQTT. Objek ini menggunakan espClient untuk
menghubungkan ke jaringan dan mengirim/ menerima data melalui MQTT.
c. DHT dht(DHT_PIN, DHT11);: Membuat objek dht untuk mengakses sensor
DHT11 yang terhubung ke pin yang ditentukan sebelumnya (DHT_PIN). Objek
ini memungkinkan pembacaan data suhu dan kelembapan dari sensor DHT11.
d. long lastMsg = 0;: Variabel lastMsg untuk melacak waktu pengiriman pesan
terakhir (dalam milidetik). Ini digunakan untuk mengontrol interval pengiriman
data ke server atau broker MQTT.
e. float temperature = 0;: Variabel temperature untuk menyimpan nilai suhu yang
dibaca dari sensor DHT11.
f. float level = 0;: Variabel level untuk menyimpan nilai level (kemungkinan level
jarak atau level kelembapan, tergantung implementasi) yang dapat diukur oleh
sensor lainnya (misalnya, sensor ultrasonik HC-SR04 atau sensor kelembapan).
5. BLOK 5
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(".");
}
Program ini adalah bagian dari fungsi setup_wifi() yang digunakan untuk
menghubungkan perangkat (ESP8266) ke jaringan Wi-Fi. Berikut penjelasan secara
rinci:
a. delay(10);: Menunggu selama 10 milidetik untuk memastikan bahwa semua
proses sebelumnya selesai sebelum memulai koneksi Wi-Fi.
b. Serial.println();: Mencetak baris kosong ke Serial Monitor.
c. Serial.print("Connecting to ");: Menampilkan teks "Connecting to " di Serial
Monitor untuk memberi tahu pengguna bahwa perangkat sedang mencoba untuk
terhubung ke Wi-Fi.
d. Serial.println(ssid);: Mencetak nama jaringan Wi-Fi (SSID) yang digunakan
untuk koneksi, yang sudah didefinisikan sebelumnya dalam program (misalnya
"realme C17").
e. WiFi.begin(ssid, password);: Menginisialisasi koneksi Wi-Fi dengan
menggunakan SSID dan password yang sudah didefinisikan sebelumnya dalam
program.
f. while (WiFi.status() != WL_CONNECTED) {: Menunggu dan memeriksa status
koneksi Wi-Fi. Jika statusnya bukan WL_CONNECTED, artinya perangkat masih
belum terhubung ke Wi-Fi, sehingga program akan terus mencoba untuk
menghubungkan.
g. delay(500);: Menunggu selama 500 milidetik (setengah detik) sebelum mencoba
lagi untuk memeriksa status koneksi Wi-Fi.
h. Serial.print(".");: Menampilkan titik (.) di Serial Monitor setiap 500 milidetik
untuk menunjukkan bahwa program masih mencoba terhubung ke Wi-Fi.
6. BLOK 6
Serial.println("");
Serial.print("WiFi connected, IP address: ");
Serial.println(WiFi.localIP());
}
Program ini adalah bagian dari kode yang menampilkan informasi tentang status
koneksi Wi-Fi pada perangkat ESP8266. Berikut penjelasan secara rinci:
a. Serial.println("");: Mencetak baris kosong ke Serial Monitor untuk memberi
pemisah antara bagian sebelumnya dan bagian ini.
b. Serial.print("WiFi connected, IP address: ");: Menampilkan teks "WiFi
connected, IP address: " di Serial Monitor, memberi tahu pengguna bahwa
perangkat telah berhasil terhubung ke Wi-Fi.
c. Serial.println(WiFi.localIP());: Mencetak alamat IP yang diberikan kepada
perangkat ESP8266 oleh router setelah berhasil terhubung ke jaringan Wi-Fi.
Fungsi WiFi.localIP() mengembalikan alamat IP lokal perangkat dalam format
yang dapat dibaca (misalnya, 192.168.1.10).
7. BLOK 7
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("clientId-xEZb7frpLH")) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
Program ini adalah bagian dari fungsi reconnect(), yang digunakan untuk
memastikan perangkat ESP8266 tetap terhubung ke broker MQTT. Berikut
penjelasan rinci dari program ini:
a. while (!client.connected()) {: Program ini akan mencoba untuk menghubungkan
perangkat ke broker MQTT selama koneksi belum berhasil (artinya
client.connected() mengembalikan false).
b. Serial.print("Attempting MQTT connection...");: Menampilkan pesan "Attempting
MQTT connection..." di Serial Monitor, menunjukkan bahwa perangkat sedang
mencoba untuk menghubungkan ke broker MQTT.
c. if (client.connect("clientId-xEZb7frpLH")) {: Fungsi client.connect() mencoba
untuk menghubungkan perangkat dengan broker MQTT. Parameter "clientId-
xEZb7frpLH" adalah ID unik yang digunakan untuk mengidentifikasi perangkat
yang terhubung. Jika koneksi berhasil, fungsi ini mengembalikan nilai true.
d. Serial.println("connected");: Jika koneksi berhasil, menampilkan pesan
"connected" di Serial Monitor, yang mengonfirmasi bahwa perangkat telah
terhubung ke broker MQTT.
e. else {: Jika koneksi gagal, blok kode berikutnya akan dijalankan.
f. Serial.print("failed, rc=");: Menampilkan pesan "failed, rc=" di Serial Monitor
untuk memberi tahu pengguna bahwa koneksi gagal.
g. Serial.print(client.state());: Menampilkan kode status koneksi yang lebih spesifik.
client.state() mengembalikan kode status yang menunjukkan alasan kegagalan
koneksi (misalnya, kesalahan otentikasi atau timeout).
h. Serial.println(" try again in 5 seconds");: Menampilkan pesan bahwa perangkat
akan mencoba lagi untuk terhubung dalam 5 detik.
i. delay(5000);: Menunggu selama 5 detik sebelum mencoba lagi untuk
menghubungkan ke broker MQTT.
8. BLOK 8
float readDistance() {
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
Program ini adalah bagian dari fungsi readDistance() yang digunakan untuk
mengukur jarak menggunakan sensor ultrasonik HC-SR04. Sensor ini mengukur
jarak berdasarkan waktu yang diperlukan oleh gelombang ultrasonik untuk memantul
kembali setelah dipancarkan. Berikut penjelasan rinci dari setiap baris program:
a. digitalWrite(TRIGGER_PIN, LOW);: Mengatur pin TRIGGER_PIN (misalnya,
pin D5 pada ESP8266) ke LOW (rendah), yang berarti mematikan trigger untuk
sementara waktu.
b. delayMicroseconds(2);: Menunggu selama 2 mikrodetik untuk memastikan pin
trigger benar-benar dalam status LOW sebelum mengirimkan sinyal trigger.
c. digitalWrite(TRIGGER_PIN, HIGH);: Mengatur pin TRIGGER_PIN ke HIGH
(tinggi) untuk mengirimkan pulsa trigger ke sensor ultrasonik. Pulsa ini akan
dipancarkan oleh sensor untuk memulai pengukuran jarak.
d. delayMicroseconds(10);: Menunggu selama 10 mikrodetik untuk memastikan
pulsa trigger diterima dengan baik oleh sensor ultrasonik.
e. digitalWrite(TRIGGER_PIN, LOW);: Mengembalikan pin TRIGGER_PIN ke
LOW untuk mengakhiri pengiriman pulsa trigger.
9. BLOK 9
// Membaca durasi pulse dari pin ECHO
float duration = pulseIn(ECHO_PIN, HIGH, 30000); // Timeout 30ms
if (duration == 0) {
Serial.println("No pulse detected");
return -1;
}
Program ini adalah bagian dari fungsi yang digunakan untuk mengukur jarak
dengan sensor ultrasonik HC-SR04 menggunakan pin ECHO_PIN. Berikut
penjelasan rinci dari setiap baris program:
a. float duration = pulseIn(ECHO_PIN, HIGH, 30000);:
 Fungsi pulseIn() digunakan untuk mengukur durasi pulsa yang diterima pada
pin ECHO_PIN.
 ECHO_PIN adalah pin yang menerima sinyal gelombang ultrasonik yang
dipantulkan.
 Parameter HIGH menunjukkan bahwa fungsi ini akan mengukur durasi pulsa
HIGH (ketika sinyal dipancarkan kembali ke sensor).
 Parameter 30000 adalah waktu tunggu maksimal (dalam mikrodetik) untuk
menerima pulsa. Dalam hal ini, jika pulsa tidak diterima dalam 30ms, fungsi ini
akan berhenti dan mengembalikan nilai 0.
b. if (duration == 0) {:
 Jika duration bernilai 0, artinya tidak ada pulsa yang diterima dalam batas
waktu yang ditentukan (30ms). Ini bisa terjadi jika tidak ada objek di depan
sensor atau jika ada masalah dalam pengukuran.
c. Serial.println("No pulse detected");:
 Menampilkan pesan "No pulse detected" di Serial Monitor, memberi tahu
bahwa tidak ada pulsa yang diterima dalam batas waktu yang ditentukan.
d. return -1;:
 Jika tidak ada pulsa yang terdeteksi, fungsi ini mengembalikan nilai -1, yang
menandakan bahwa pengukuran jarak gagal.
10. BLOK 10
// Menghitung jarak (dalam cm)
float distance = (duration / 2) * 0.0343;
return distance;
}
Program ini adalah bagian dari fungsi yang digunakan untuk menghitung jarak
berdasarkan durasi pulsa yang diterima dari sensor ultrasonik HC-SR04. Berikut
penjelasan rinci dari setiap baris program:
a. float distance = (duration / 2) * 0.0343;:
 duration adalah durasi pulsa yang diterima pada pin ECHO_PIN, yang
dihitung sebelumnya menggunakan fungsi pulseIn().
 Gelombang ultrasonik bergerak dengan kecepatan suara, yang sekitar 343
meter per detik (atau 0.0343 cm/µs dalam satuan sentimeter per mikrodetik).
 Karena sensor mengukur waktu untuk gelombang bergerak ke objek dan
kembali (perjalanan bolak-balik), durasi yang diterima dibagi 2 untuk
mendapatkan waktu perjalanan satu arah.
 Hasil perhitungan ini kemudian dikalikan dengan 0.0343 (kecepatan
gelombang ultrasonik dalam cm per mikrodetik) untuk menghitung jarak ke
objek dalam satuan sentimeter (cm).
b. return distance;:
 Fungsi ini mengembalikan nilai distance, yaitu jarak yang dihitung dalam
satuan sentimeter, sebagai hasil dari fungsi tersebut.
11. BLOK 11
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
dht.begin();
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
Program ini adalah bagian dari fungsi setup() yang digunakan untuk
melakukan inisialisasi perangkat dan persiapan awal sebelum perangkat ESP8266
mulai berfungsi. Berikut penjelasan rinci dari setiap baris program:
a. Serial.begin(115200);:
 Menginisialisasi komunikasi serial dengan baud rate 115200 untuk
komunikasi antara ESP8266 dan komputer. Hal ini memungkinkan
perangkat untuk mengirimkan informasi ke Serial Monitor, seperti pesan
status atau debug.
b. setup_wifi();:
 Memanggil fungsi setup_wifi() untuk menghubungkan ESP8266 ke jaringan
Wi-Fi. Fungsi ini akan mencoba menghubungkan perangkat ke jaringan Wi-
Fi yang telah dikonfigurasi sebelumnya (SSID dan password).
c. client.setServer(mqtt_server, 1883);:
 Menetapkan alamat server broker MQTT dan port yang akan digunakan
untuk koneksi. Dalam hal ini, alamat server MQTT adalah mqtt_server
(misalnya, "test.mosquitto.org") dan port yang digunakan adalah 1883, yang
merupakan port default untuk komunikasi MQTT.
d. dht.begin();:
 Memulai sensor DHT11 atau DHT22 (tergantung pada sensor yang
digunakan) untuk membaca data suhu dan kelembapan. Fungsi ini
menginisialisasi komunikasi antara ESP8266 dan sensor DHT.
e. pinMode(TRIGGER_PIN, OUTPUT);:
 Mengonfigurasi pin TRIGGER_PIN (misalnya, D5) sebagai OUTPUT
untuk mengirimkan sinyal trigger ke sensor ultrasonik HC-SR04.
f. pinMode(ECHO_PIN, INPUT);:
 Mengonfigurasi pin ECHO_PIN (misalnya, D6) sebagai INPUT untuk
menerima sinyal echo (pantulan) dari sensor ultrasonik HC-SR04.
12. BLOK 12
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
if (now - lastMsg > INTERVAL) {
lastMsg = now;
Program ini adalah bagian dari fungsi loop(), yang merupakan bagian
utama dari program di Arduino atau ESP8266. Fungsi ini akan terus berulang
(looping) selama perangkat berjalan. Berikut adalah penjelasan rinci dari setiap
bagian program:
a. if (!client.connected()) { reconnect(); }:
 Memeriksa apakah koneksi ke broker MQTT masih aktif.
 Jika tidak terhubung, fungsi reconnect() dipanggil untuk mencoba kembali
menghubungkan perangkat ke broker MQTT.
b. client.loop();:
 Fungsi client.loop() harus dipanggil dalam loop utama agar klien MQTT
dapat terus beroperasi, menerima dan mengirim pesan.
 Ini juga mengelola komunikasi antara perangkat ESP8266 dan broker
MQTT, menjaga koneksi tetap aktif.
c. long now = millis();:
 Mengambil waktu sejak perangkat mulai berjalan (dalam milidetik)
dengan menggunakan fungsi millis(). Fungsi ini mengembalikan jumlah
milidetik sejak program dimulai.
d. if (now - lastMsg > INTERVAL) {:
 Memeriksa apakah selisih waktu antara now (waktu saat ini) dan lastMsg
(waktu pesan terakhir dikirim) lebih besar dari INTERVAL (misalnya,
5000ms atau 5 detik).
 Jika lebih besar, berarti waktu untuk mengirimkan data (misalnya, suhu
atau jarak) ke broker MQTT telah tiba.
e. lastMsg = now;:
 Memperbarui nilai lastMsg dengan waktu saat ini (now) untuk melacak
waktu pengiriman pesan berikutnya.
13. BLOK 13
// Membaca suhu dari DHT11
temperature = dht.readTemperature();
if (isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
} else {
Serial.print("Temperature: ");
Serial.println(temperature);
client.publish(temperature_topic,
String(temperature).c_str());
}
Program ini adalah bagian dari fungsi loop(), yang digunakan untuk
membaca suhu dari sensor DHT11 dan mengirimkannya ke broker MQTT.
Berikut penjelasan rinci dari setiap baris program:
a. temperature = dht.readTemperature();:
 Fungsi dht.readTemperature() digunakan untuk membaca suhu dari sensor
DHT11. Nilai suhu yang dibaca disimpan dalam variabel temperature.
b. if (isnan(temperature)) {:
 Fungsi isnan() digunakan untuk memeriksa apakah nilai yang dibaca dari
sensor adalah NaN (Not a Number), yang biasanya terjadi jika sensor
gagal memberikan data yang valid.
c. Serial.println("Failed to read from DHT sensor!");:
 Jika nilai suhu yang dibaca adalah NaN, maka pesan "Failed to read from
DHT sensor!" akan dicetak ke Serial Monitor untuk memberitahu
pengguna bahwa pembacaan dari sensor gagal.
d. } else {:
 Jika pembacaan suhu berhasil (nilai suhu valid), maka program akan
melanjutkan ke blok berikutnya.
e. Serial.print("Temperature: ");:
 Menampilkan teks "Temperature: " di Serial Monitor untuk memberi
konteks kepada pembaca bahwa data berikutnya adalah nilai suhu.
f. Serial.println(temperature);:
 Menampilkan nilai suhu yang dibaca dari sensor di Serial Monitor.
g. client.publish(temperature_topic, String(temperature).c_str());:
 Mengirimkan nilai suhu yang dibaca ke broker MQTT melalui
client.publish().
 temperature_topic adalah topik MQTT tempat data suhu akan
dipublikasikan.
 Fungsi String(temperature).c_str() mengubah nilai temperature menjadi
tipe data C-string yang dapat dipublikasikan.
14. BLOK 14
// Membaca jarak dari HC-SR04
float distance = readDistance();
if (distance >= 0 && distance <= MAX_DISTANCE) {
level = 100 - ((distance / MAX_DISTANCE) * 100);
Serial.print("Distance: ");
Serial.println(distance);
client.publish(level_topic, String(distance).c_str());
} else if (distance > MAX_DISTANCE) {
Serial.println("Out of range");
}
}
delay(100);
}
Program ini adalah bagian dari fungsi loop() yang digunakan untuk
membaca jarak dari sensor ultrasonik HC-SR04, menghitung levelnya
berdasarkan jarak tersebut, dan mengirimkan data ke broker MQTT. Berikut
penjelasan rinci dari setiap baris program:
a. float distance = readDistance();:
 Memanggil fungsi readDistance() untuk membaca jarak dari sensor HC-
SR04. Fungsi ini mengembalikan jarak dalam satuan sentimeter (cm), yang
disimpan dalam variabel distance.
b. if (distance >= 0 && distance <= MAX_DISTANCE) {:
 Memeriksa apakah nilai distance berada dalam rentang yang valid (antara
0 dan MAX_DISTANCE).
 MAX_DISTANCE adalah jarak maksimum yang dapat diukur oleh sensor,
misalnya 100 cm.
c. level = 100 - ((distance / MAX_DISTANCE) * 100);:
 Menghitung nilai level berdasarkan jarak yang dibaca. Level ini dihitung
sebagai persentase dari MAX_DISTANCE, yang kemudian digunakan
untuk menggambarkan seberapa penuh (atau kosong) suatu objek
(misalnya, tangki air).
 Semakin dekat objek ke sensor (jarak semakin kecil), nilai level akan
semakin tinggi.
d. Serial.print("Distance: ");:
 Menampilkan teks "Distance: " di Serial Monitor untuk memberi konteks
pada nilai jarak yang akan ditampilkan.
e. Serial.println(distance);:
 Menampilkan nilai distance (jarak yang dibaca dari sensor) di Serial
Monitor.
f. client.publish(level_topic, String(distance).c_str());:
 Mengirimkan nilai distance ke broker MQTT menggunakan topik
level_topic.
 String(distance).c_str() mengonversi nilai distance menjadi tipe C-string
untuk dikirimkan ke broker.
g. } else if (distance > MAX_DISTANCE) {:
 Jika jarak yang dibaca lebih besar dari MAX_DISTANCE (artinya sensor
tidak dapat mendeteksi objek dalam jarak yang valid), maka program
memasuki blok ini.
h. Serial.println("Out of range");:
 Menampilkan pesan "Out of range" di Serial Monitor jika objek berada di
luar jangkauan sensor.
i. delay(100);:
 Memberikan delay 100 milidetik (0.1 detik) sebelum pengulangan
berikutnya dari fungsi loop(). Ini membantu mengurangi pembacaan
berlebihan atau terlalu cepat yang bisa membebani sensor atau
komunikasi.
J. KESIMPULAN
Praktikum ini bertujuan untuk memahami penggunaan ESP8266 dalam membaca
data dari sensor suhu (DHT11/DHT22) dan jarak (HC-SR04), serta mengintegrasikan
sistem IoT menggunakan protokol MQTT untuk komunikasi data secara nirkabel. Data
sensor kemudian divisualisasikan melalui dashboard Node-RED. Berikut adalah poin-
poin kesimpulan :
1. Konsep Dasar dan Teknologi IoT
 Sistem IoT memanfaatkan sensor untuk mengukur parameter fisik seperti suhu
dan jarak.
 ESP8266 sebagai mikrokontroler bertugas untuk membaca data dari sensor,
mengolahnya, dan mengirimkan data ke broker MQTT.
 MQTT sebagai protokol komunikasi mendukung pola publish/subscribe untuk
mengelola distribusi data secara efisien.
2. Pengukuran Sensor
 Sensor DHT11/DHT22 digunakan untuk membaca suhu dengan tingkat kesalahan
rata-rata sebesar 5%, menunjukkan akurasi yang cukup baik.
 Sensor HC-SR04 mengukur jarak dengan rata-rata kesalahan 2,88%,
menunjukkan bahwa hasilnya cukup mendekati jarak sebenarnya.
3. Implementasi Teknologi
 Perangkat keras seperti ESP8266, sensor, dan komponen pendukung lainnya
(breadboard, kabel jumper) dirangkai untuk mendukung sistem IoT.
 Perangkat lunak, termasuk Arduino IDE, Node-RED, dan broker MQTT,
diimplementasikan untuk pemrograman, komunikasi, dan visualisasi data.
4. Visualisasi dan Analisis Data
 Node-RED digunakan untuk membuat dashboard interaktif yang menampilkan
data suhu dan jarak secara real-time dalam bentuk grafik atau indikator.
 Integrasi antara perangkat keras dan perangkat lunak menghasilkan sistem IoT
yang dapat memantau perubahan lingkungan secara efisien.
5. Kinerja Sistem IoT
 Sistem IoT berhasil mengirim data dari ESP8266 ke broker MQTT dan
divisualisasikan dengan Node-RED.
 Data sensor suhu dan jarak terbukti dapat diolah dan dikirim dalam interval
tertentu (5 detik) dengan tingkat kesalahan yang dapat diterima.

Anda mungkin juga menyukai