Hack Fitting Lampu Sensor Cahaya — Tutorial ESP32, MQTT dan Node-RED

Elvandry Ghiffary
6 min readApr 26, 2020

--

Di tulisan ini, saya akan kembali berbagi “mainan” saya #dirumahaja. Singkat cerita, saya mengatur posisi kasur, lemari pakaian, rak buku, dan meja di kamar baru saya. Sampailah pada posisi yang saya inginkan, akan tetapi muncul satu masalah, yaitu saklar lampu yang pada akhirnya tertutup lemari pakaian. Entah angin dari mana, pikiran iseng saya muncul, bukan untuk memindahkan lemari pakaian, tetapi malah ingin mengontrol lampu via smartphone saya wkwk.

Oke hal unik lainnya, saya tidak akan menggunakan relay untuk memotong / menghubungkan arus listrik lampu seperti pada umumnya. Saya akan memanfaatkan fitting lampu sensor cahaya yang kebetulan tidak dipakai.

Fitting Lampu Sensor Cahaya

Pada dasarnya, produk fitting lampu sensor cahaya ini bekerja berdasarkan cahaya matahari. Pada produk tersebut terdapat sensor LDR (Light Dependent Resistor) yang pada intinya membuat lampu akan mati saat terkena cahaya matahari, dan akan menyala saat tidak terkena cahaya matahari. Nah, ide saya adalah membuat “cahaya matahari” tersebut dapat kita kontrol sehingga pada akhirnya kita dapat mengontrol lampu untuk menyala dan mati. Saya akan gantikan “cahaya matahari” tersebut dengan lampu LED. Hehe terlihat mudah bukan?

Singkat saja, secara teknis, saya akan gunakan ESP32 sebagai microcontroller untuk mengontrol LED. Lalu saya juga akan gunakan MQTT sebagai protokol komunikasi antara ESP32 dengan Smartphone saya. Untuk GUI pada smartphone, saya akan gunakan Node-RED yang bertindak sebagai MQTT client. MQTT broker dan Node-RED akan saya install pada Raspberry Pi (btw, saya selalu sediakan “mini server” Raspberry Pi di kamar saya yang selalu standby untuk ngoprek-ngoprek).

Diagram Blok

ESP32 sebagai MQTT client akan subscribe ke topik “esp32/output”, dan NodeRED sebagai MQTT client juga, akan publish message “on” atau “off” ke topik tersebut sehingga nantinya ESP32 akan menerima message “on” atau “off”. Lalu nyala lampu LED bergantung pada message yang ESP32 terima.

Oke untuk penjelasan lebih lengkap, mari kita bahas langkah-langkahnya :

#1. Mengontrol LED

Sederhana sekali, saya hubungkan LED dengan pin GPIO pada ESP32, lalu mengaktifkan pin GPIO tersebut sebagai mode OUTPUT, lalu kita dapat set HIGH untuk menyalakannya dan LOW untuk mematikannya.

Koneksi ESP32 dengan LED

#2. Mengisolasi LED dan LDR

Nah disini, kita akan isolasi LED tadi dengan LDR pada produk fitting lampu, agar LDR hanya dipengaruhi oleh cahaya dari lampu LED saja.

Before
After

Sampai disini kita bisa mencoba untuk menyala/matikan LED dan bagaimana pengaruhnya terhadap lampu pada fitting. Merujuk pada penjelasan kerja LDR sebelumnya, sehingga ketika kita menyalakan LED, maka lampu pada fitting akan mati dan begitu juga sebaliknya. Karena logikanya terbalik, maka kita tinggal ganti perintah HIGH menjadi LOW dan sebaliknya.

#3. Install MQTT broker dan Node-RED pada Raspberry Pi

Oke disini kita beralih sejenak menuju Raspberry Pi. Selanjutnya, saya akan install MQTT broker Mosquitto dan Node-RED menggunakan script dari Peter Scargill. Download file bernama script.sh dengan perintah berikut :

wget –no-check-certificate https://bitbucket.org/api/2.0/snippets/scargill/ekon6o/master/files/script.sh

Lalu jalankan script tersebut :

bash script.sh

Kemudian akan muncul tampilan berupa pilihan software yang dapat kita install. Pilih “nodenew” untuk install Node-RED dan “mosquitto” untuk install MQTT broker.

Program Selection

Selanjutnya kita diperintahkan untuk mengisi username dan password sebagai keamanan di masing-masing program yang akan kita install. Disini saya akan mengisi dengan username dan password default Raspberry Pi (user : pi, passwd : raspberry). Tunggu beberapa saat hingga seluruh proses instalasi selesai.

Jika instalasi sudah selesai, selanjutnya kita cek apakah MQTT broker dan server Node-RED sudah berjalan atau belum. Ketik perintah berikut untuk melihat status service nya dan pastikan service tersebut active (running) :

sudo service mosquitto status
Mosquitto Service Status
sudo service nodered status
Nodered Service Status

Jangan lupa juga untuk setup koneksi Wifi pada Raspberry Pi agar satu jaringan dengan koneksi Wifi pada ESP32 nanti. Ketik pada terminal sudo raspi-config Lalu pilih Network Options > Wifi, lalu set SSID dan password.

Untuk melihat IP address MQTT broker kita, ketik ifconfig pada terminal ifconfig

ifconfig

Dalam kasus saya, IP address MQTT broker saya adalah 192.168.1.12.

#4. Upload ESP32 Source Code

Selanjutnya kita kembali ke ESP32. Sebagai MQTT client, kita akan menggunakan PubSubClient dan Wifi. Saya adaptasi kode program dari tutorial disini. Untuk melihat seluruh kode program, silakan klik link github saya berikut ini.

Pastikan SSID, password, IP address MQTT broker, username dan passwordnya sudah sesuai.

Configuration

Pada void callback(), terdapat logika untuk menyala/matikan lampu setelah menerima message seperti pada penjelasan di awal.

callback function

Sampai disini, kita sudah selesai untuk set ESP32 sebagai MQTT client.

#5. NodeRED Flow

Selanjutnya, kita akan siapkan NodeRED sebagai MQTT client. Nantinya, kita akan buka NodeRED GUI sebagai interface switch “ON/OFF” di smartphone kita. Penjelasan lengkap NodeRED dapat dilihat disini.

Untuk membuat NodeRED flow, kita buka localhost Raspberry Pi dengan port 1880 di browser kita. Silakan masukkan username dan password yang sudah dikonfigurasikan pada saat instalasi di awal.

Node-RED Flow

Pilih node “switch” pada bagian “dashboard” dan node “mqtt out” pada bagian “network”. Drag node-node tersebut dan hubungkan keduanya.

Drag the Node

Klik dua kali pada node “switch” untuk melakukan konfigurasi seperti berikut :

Switch Configuration

Set payload dengan konfigurasi string seperti berikut untuk publish message :

Payload Configuration

Kemudian klik dua kali pada node “mqtt out” untuk melakukan konfigurasi seperti berikut :

MQTT out Configuration

Set server dengan “localhost:1883”, dan dan topic dengan “esp32/output”. Lalu klik simbol edit di samping server, lalu klik tab security :

MQTT Broker Security

Masukkan username dan password MQTT broker disini. Jika sudah, klik Update lalu Done. Terakhir, klik Deploy di bagian kanan atas.

Deploy Button

#6. NodeRED UI (User Interface)

Selanjutnya, silakan buka MQTT_IP_address:1880/ui (dalam kasus saya : 192.168.1.12:1880/ui) di browser smartphone.

Node-RED User Interface

Silakan coba klik switch ON dan OFF lalu lihat apa yang terjadi pada lampu. Pada tampilan ESP32 serial monitor akan seperti berikut ini :

ESP32 Serial Monitor

Terakhir, saya menambahkan lagi fitting lampu dan charger smartphone sebagai power source ESP32 seperti berikut :

Fitting Lampu Tambahan + Charger Smartphone
Tampak Akhir

Berikut ini video demo hasil akhirnya :

Video DEMO

Selamat! Kita berhasil “hack” fitting lampu sensor cahaya agar bisa kita kontrol melalui smartphone kita menggunakan ESP32, MQTT dan Node-RED. Sekian dan terima kasih :)

--

--