Hack Fitting Lampu Sensor Cahaya — Tutorial ESP32, MQTT dan Node-RED
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.
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).
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.
#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.
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.
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
sudo service nodered 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
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.
Pada void callback(), terdapat logika untuk menyala/matikan lampu setelah menerima message seperti pada penjelasan di awal.
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.
Pilih node “switch” pada bagian “dashboard” dan node “mqtt out” pada bagian “network”. Drag node-node tersebut dan hubungkan keduanya.
Klik dua kali pada node “switch” untuk melakukan konfigurasi seperti berikut :
Set payload dengan konfigurasi string seperti berikut untuk publish message :
Kemudian klik dua kali pada node “mqtt out” untuk melakukan konfigurasi seperti berikut :
Set server dengan “localhost:1883”, dan dan topic dengan “esp32/output”. Lalu klik simbol edit di samping server, lalu klik tab security :
Masukkan username dan password MQTT broker disini. Jika sudah, klik Update lalu Done. Terakhir, klik Deploy di bagian kanan atas.
#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.
Silakan coba klik switch ON dan OFF lalu lihat apa yang terjadi pada lampu. Pada tampilan ESP32 serial monitor akan seperti berikut ini :
Terakhir, saya menambahkan lagi fitting lampu dan charger smartphone sebagai power source ESP32 seperti berikut :
Berikut ini video demo hasil akhirnya :
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 :)