Peralatan-peralatan listrik dikendalikan dengan sebuah ponsel cerdas atau laptop melalui web browser.  Status atau nilai-nlai dari sensor yang terhubung juga dapat dipantau melalui web browser.  Sistem seperti inilah yang akan kita diskusikan pada artikel ini dan bagaimana mempersiapkan peralatan baik software maupun hardware untuk penerapannya di bidang Internet of Things.  Hardware dan software yang digunakan di sini bukan satu-satunya alat/cara yang bisa digunakan, namun untuk keperluan pembelajaran, maka lebih praktis kita menggunakan perangkat keras Raspberry Pi sebagai server dan mikrokontroler NodeMCU 8266 sebagai perangkat yang akan dikoneksikan ke sensor atau beban.  Software yang digunakan adalah Node-RED dengan protokol komunikasi MQTT, yang dalam banyak hal memberikan keuntungan dan kemudahan dalam implementasinya.  Node-RED merupakan aplikasi dengan platform Nodejs yang berjalan di server dan melayani perangkat yang terhubung ke server tersebut.   Pemprograman Node-RED dilakukan secara grafis melalui web browser yang akan dijelaskan nanti.  

Berikut ini langkah-langkah persiapan secara garis besar instalasi Raspberry Pi 4 yang akan digunakan sebagai server

1. Instalasi Ubuntu Server sebagai operating system pada Raspberry PI

Pilih versi Ubuntu Server sesuai yang diinginkan dan sesuai jenis prosesornya apakah 64bit atau 32bit.  Download di 

https://ubuntu.com/download/raspberry-pi . Setelah selesai download, silakan mini SD Card dengan image tersebut dan lakukan instalasi.  Siapkan hardware berupa monitor dengan koneksi HDMI, kabel HDMI yang sesuai, keyboard, mouse, kabel jaringan atau pakai WiFi.  Setelah itu ikuti petunjuknya dapat di ikuti secara detail di: https://ubuntu.com/tutorials/how-to-install-ubuntu-on-your-raspberry-pi#1-overview 

Setelah selesai instalasi dan asumsinya sudah tersambung ke network dan mendapat IP address, gunakan SSH jika menggunakan PC lain dalam instalasi atau konfigurasi software.  Berikut tampilan awal SSH setelah memasukkan username dan password.

2. Instalasi Node-RED

Node-RED merupakan aplikasi server menggunakan platform Nodejs, sehingga kita perlu terlebih dahulu install Nodejs dan npm.  Syukurlah sudah ada script yang dapat membantu install semua yang kita perlukan.   Untuk itu silakan install Node-Red di Rapberry Pi dengan mengikuti petunjuk di:  https://nodered.org/docs/getting-started/raspberrypi

S
cript yang digunakan (melalui terminal atau SSH) yaitu: 

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

Screenshot berikut adalah tampilan ketika Node-RED sedang diinstall.  Tunggu sekitar 30 menit sampai selesai.



tampilan ketika selesai install adalah sebagai berikut:



Apabila Node-RED ingin dijalankan sebagai sebuah service, maka perlu jalankan: node-red-start

Service sedang berjalan, selanjutnya console tersebut bisa ditutup.

Untuk menjalankan Node-RED secara otomatis saat booting, maka perlu ketik:

sudo systemctl enable nodered.service


Untuk menguji instalasi berhasil atau belum, jalankan webbrowser, masukkan alamat http://<hostname>:1880

Hostname dapat dicari dengan menjalankan

                hostname -I

pada prompt di Raspberry Pi
Jika Anda menggunakan SSH, maka seharusnya sudah tahu IP addressnya.

Setelah itu akan tampilan Node-RED sebagai Admin, disini kita bisa membuat program secara grafis mengunakan fungsi di dalam node dan diumpankan melalui aliran garis/kurva atau disebut flow.


Pada aplikasi Node-RED, kita biasanya membutuhkan antarmuka (interface) untuk user melalui webbrowser, atau biasa disebut dengan dashboard.  Secara default, instalasi Node-RED di atas belum termasuk antarmuka dasbor, untuk itu kita perlu pasan node yang digunakan sebagai user input/output saat membuka aplikasi melalui web browser.











cobalah membuat aplikasi sederhana menggunakan Button, Text, Slider dan Gauge seperti ini:



Double-click pada node Button, bagian group pilih [Home]  Default  (atau sesuai menu yang diinginkan),  pada Payload ketik kata misalnya ON, topic: msg.topic lalu klik Done.  Pada Node yang lain (text, slider, gauge), atur menunya [Home] Default. 

setelah itu klik Deploy, lalu masuk ke halaman user interface di http://<hostname>:1880/ui 
Tampilan akan seperti ini.  

apabila Button ditekan, maka text akan bernilai ON.  Apabila slider digeser, maka nilai pada gauge akan berubah sesuai nilai slider.

Latihan:  buatlah aplikasi serupa, dengan dua tombol, masing-masing ON dan OFF, dan selanjutnya nilainya ditampilkan ke text.

3. Instalasi MQTT Broker

Sebelum instalasi, perlu dipahami dulu apa yang dimaksud dengan protokol Message Queuing Telemetry Transport atau MQTT.  Sama halnya dengan HTTP, protokol MQTT berjalan menggunakan layer TCP/IP.  Perbedaannya, HTTP menggunakan konsep Request/Response sedangkan MQTT menggunakan konsep Publish/Subscribe.  Seperti yang Anda ketahui, halaman website ini menggunakan protokol HTTP, sehingga perlu request terlebih dahulu dari client ke server sebelum halaman ini terkirim dari server ke client.  Intinya, apabila kita ingin mendapatkan sesuatu maka harus selalu minta terlebih dahulu. 
Pada MQTT, paket informasi yang dikirim berupa topik dan pesan.  Untuk mendapatkan pesan, maka client device perlu langganan topik tertentu (subscribe) yang selanjutnya akan menerima pesan dari client lain yang pesan tersebut di kirim (publish) dengan topik yang sama.   Setiap client device dapat berperan sebagai subscriber (pelanggan) atau publisher (pengirim) atau keduanya.  Sebuah MQTT Broker (atau server) dibutuhkan pada protokol ini, yaitu bertugas sebagai pengatur lalu lintas data dari/ke client -- client, sesuai topik.

Untuk instalasi pada Raspbery Pi, ketik pada terminal sebagai berikut:

sudo apt install mosquitto

tampilannya:

4. Langkah-langkah pemprograman mikrokontroler NodeMCU 8266

a. Install library NodeMCU 8266
Buka Arduino IDE, klik File > Preferences,  pada bagian Additional Boards Manager URLs tambahkan:  http://arduino.esp8266.com/stable/package_esp8266com_index.json lalu klik Ok.

Klik Tools > Boards > Board Manager..  lalu cari esp8266.  Pastikan library tersebut dibuat oleh ESP8266 Community.  Klik tombol Install untuk mulai download dan instal secara otomatis. 

b. unduh library PubSubClient

Masuk ke menu Sketch > Include Library > Manage Library lalu ketik pada textbox: pubsubclient.   Ada banyak pilihan, sebagai contoh yang akan kita gunakan adalah PubSubClient oleh Nick O'Leary.


Pilih versi terkini lalu klik install.

c. Mencoba contoh MQTT pada ESP8266
Pilih menu pada Arduino IDE:  File > Examples > PubSubClient > mqtt_esp8266

Edit bagian variable ssid dan password sesuai jaringan WiFi Anda dan edit mqtt_server sesuai broker yang akan digunakan.

Seperti yang kita ketahui, protokol pengiriman data MQTT terdiri dari topik dan pesan.  Program mikrokontroler Esp8266 ini berperan sebagai subscriber dan publisher.  Sebagai subscriber, mikrokontroler akan menerima pesan 1 atau 0 yang nantinya akan diumpankan ke sebuah LED untuk menyalakan atau mematikan LED tersebut (lihat pada fungsi callback ).   Sedangkan sebagai publisher, mikrokontroler ini akan mengirimkan topik "outTopic" dengan pesannya berupa hitungan bilangan integer yang disimpan pada variable: value.  (lihat pada fungsi loop()

5. Aplikasi MQTT pada NodeRED untuk mengendalikan dan memantau ESP8266

Program pada mikrokontroler Esp8266 di atas akan kita koneksikan ke Rapsberry yang sudah kita install dengan Node-RED.  Buka halaman admin menggunakan browser lalu buatlah prgram flow seperti ini:


Segitiga merah pada masing-masing node tersebut menunjukkan node belum terkonfigurasi.  Untuk itu satu-satu kita akan konfigurasi. 

  1. pada bagian mqtt in, masukkan server: localhost dengan port 1883.  Parameter lain biarkan secara default.
    Masukkan topic misalnya lampu,  lalu QoS: 2.  yang lain biarkan default.  klik Done
  2. pada bagian mqtt out, masukkan server yang sama dengan bagian mqtt in. Bagian topic, isi dengan outTopic (sesuai topic pada mikrokontroler tadi). 
  3. pada bagian text, pilih Group: [Home] Default,  dengan label misalnya Pesan lalu klik Done
  4. pada bagian button yang pertama, pilih Group: [Home] Default, label: ON,  payload: 1
  5. pada bagian button yang kedua juga sama, dengan label OFF dan payload: 0


    Setelah semua segitiga merah hilang, lalu klik Deploy untuk mengaktifkan flow, sesuai program ini:

tamilan Dashboard / user interface di browser laptop/handphone akan sepert ini:

Jiika semua berjalan normal, maka LED pada mikrokontroler dapat dikendalikan melalui browser, dan pada bagian pesan akan muncul tulisan "hello world" dan bilangan dengan hitungan naik setiap 2 detik.

Selamat mencoba.