3. Lebih Banyak Kontrol

Daftar Isi:

=========================================================================================


Catatan untuk NodeMCU ESP8266: agar status device-nya bisa menjadi Online, silahkan menggunakan library ArduinoIoTCloud versi 1.8.0 dan Arduino_ConnectionHandler versi 0.7.1, dan upload program secara offline (menggunakan software IDE Arduino di komputer).

Catatan untuk ESP32: agar status devicenya bisa menjadi Online, rekan-rekan bisa menggunakan Editor Arduino online (seharusnya lancar tanpa masalah). Karena memang ESP32 didukung penuh dalam pengembangan Arduino IoT Cloud, sedangkan untuk NodeMCU ESP8266 belum menjadi prioritas.

Setelah di bagian kedua membahas bagaimana membuat Kontrol Terjadwal, maka di bagian ketiga ini akan dibahas bagaimana membuat Kontrol Terjadwal tersebut untuk lebih dari 1 alat (dalam contoh di sini untuk mengontrol 4 buah alat), dengan jadwal waktu yang berbeda-beda, menggunakan Arduino IoT Cloud dan NodeMCU. Di bagian ketiga ini, saya akan menunjukkan bagaimana luar biasanya widget Messenger, yang bisa mengatasi permasalahan keterbatasan variabel (Arduino IoT Cloud yang gratis hanya bisa menggunakan 5 buah variabel). Berikut ini beberapa manfaat/kemampuan widget Messenger:
1. Menampilkan catatan waktu setiap kali terjadi perubahan data.
2. Bisa digunakan untuk menampilkan kondisi banyak alat.
3. Bisa digunakan untuk mengontrol banyak alat.
4. Karena tipe datanya berbentuk teks, maka variasinya bisa sangat banyak.

Agar memudahkan pembuatannya, saya membagi penjelasan di bagian ketiga ini menjadi 3 tahapan berikut ini:
1. Pembuatan Kontrol ON/OFF untuk 4 buah Relay 
2. Pembuatan Kontrol Terjadwal untuk 4 buah Relay
3. Pembuatan Kontrol ON/OFF untuk 8 buah Relay 

Berikut ini uraian masing-masing tahapan.

=========================================================================================

1. Pembuatan Kontrol ON/OFF untuk 4 buah Relay

Sebelum saya menjelaskan tentang pembuatan lebih banyak kontrol ini, kita perlu mengetahui dulu, "biaya" yang dikenakan untuk penggunaan "Cloud" di Arduino IoT Cloud ini. Membuka di https://cloud.arduino.cc/plans/ diketahui ada 4 jenis pilihan biaya:

Gambar 1. Pilihan Biaya dan fasilitasnya

Di bagian bawah pada halaman yang sama, diperjelas lagi fasilitas yang bisa diperoleh:

Gambar 2. Keterangan Fasilitas yang lebih detil

Rekan-rekan bisa melihat lebih lengkap di https://cloud.arduino.cc/plans/ 

Dari pilihan biaya dan fasilitas yang diberikan tersebut, satu kata yang bisa saya ucapkan, yaitu "Wooow", luar biasa sekali, khususnya untuk pilihan yang Free. Bagaimana tidak luar biasa, kita diberikan "Cloud" yang senantiasa hidup, yang bisa diakses di mana saja, kapan saja, dan terhubung dengan internet dengan fasilitasnya yang  luar biasa, dan itu semua gratis.   

Memang dengan pilihan Free, ada batasannya, yaitu hanya bisa 2 Things dan 5 Variabel saja, namun tahukah rekan-rekan, bahwa batasan tersebut mirip seperti kita dikurung di kamar, tetapi kita diberi kunci agar kita bisa keluar kamar. Karena sifat dari IoT adalah bisa "menghubungkan" segala sesuatu, sehingga kita juga bisa membuat lebih banyak Things dan lebih banyak variabel, dengan fasilitas yang diberikan secara gratis tersebut. Di bagian keempat akan saya jelaskan cara memperbanyak Things, sedangkan di bagian ketiga ini, akan saya jelaskan cara memperbanyak Variabel, agar kita bisa mengontrol 8 buah alat. 

Sebelum mengontrol 8 buah alat, di tahapan ini kita akan menggunakan 5 variabel untuk mengontrol 4 buah alat. Mengapa hanya 4 alat, mengapa tidak sekaligus 5 alat? Karena sebuah variabel kita gunakan untuk mengetahui kondisi dari keempat alat. Dari banyak widget yang tersedia, pilihan paling tepat untuk menampilkan kondisi dari keempat alat ini adalah widget Messenger. Widget Messenger paling tepat digunakan karena memiliki kemampuan berikut ini:
  1. Karena berbentuk pesan teks, maka bisa menampilkan kondisi dari semua alat yang dikontrol.
  2. Menampilkan catatan waktu kapan kondisi alat tersebut berubah.
  3. Tidak hanya menampilkan kondisi, tetapi juga bisa mengontrol alat.
Lebih jelas mengenai pembuatan 4 buah kontrol ON/OFF yang dilengkapi widget Messenger, berikut ini langkah-langkahnya:
1. Agar tidak menghilangkan Thing yang dibuat di bagian pertama (sebuah Kontrol ON/OFF dengan widget Switch) dan Thing yang dibuat di bagian kedua (sebuah Kontrol Terjadwal dengan widget Scheduler), maka sebaiknya rekan-rekan membuat lagi akun yang baru (pilih Create One saat login) di Arduino IoT Cloud. Jangan lupa untuk melakukan konfirmasi pendaftaran akun di email yang didaftarkan.

2. Setelah berhasil login di Arduino IoT Cloud dengan akun yang baru, pertama-tama buka IoT Cloud dan buat Thing di https://create.arduino.cc/iot/things

3. Setelah Tab Setup di halaman Things terbuka, beri nama Thing: Kontrol1. Kemudian tekan tombol Add Variable, dan buat 5 buah variable  seperti Tabel berikut ini:

Nama Variable

Tipe Variable

Ijin Akses (Permission)

Update Policy

a

bool (Basic | Boolean)

Read & Write

On Change

b

bool (Basic | Boolean)

Read & Write

On Change

c

bool (Basic | Boolean)

Read & Write

On Change

d

bool (Basic | Boolean)

Read & Write

On Change

out1

String (Basic | Character String)

Read & Write

On Change


4. Berikut ini tampilan 5 buah variable di Cloud, di halaman Tab Setup yang sudah selesai ditambahkan.

Gambar 3. Tampilan 5 buah variable di Cloud untuk Thing: Kontrol1 

5. Berikutnya tekan tombol Select Device (di Associated Device). Di jendela yang muncul, pilih Set Up New Device, pilih Set up a 3rd Party device, pilih ESP8266 dan pilih model: NodeMCU 1.0 (ESP-12E Module). Beri nama Device, atau biarkan saja namanya, kemudian tekan tombol Next, maka akan muncul halaman nama Device, kode ID dan Secret Key. Pastikan untuk meng-klik download the pdf agar kode ID dan Secret Key tersebut tersimpan dengan baik, karena akan diperlukan saat pemrograman Device. Contoh tampilan pdf yang telah terdownload:

Gambar 4. Tampilan pdf yang berisi nama Device, kode ID dan Secret Key

6. Beri centang pada tulisan I saved my device ID and Secret Key dan klik Continue, maka muncul pesan bahwa Device sudah berhasil di-"setup" (disiapkan). Langkah berikutnya adalah membuat Device tersebut menjadi "Online", sehingga dapat menghubungkan variable di Cloud dengan IO Device. Untuk itu, klik tombol Configure di bagian Network, untuk membuat Device terhubung dengan hotspot Wi-Fi, dengan memasukkan nama dan password Wi-Fi serta kode Secret Key.

Gambar 5. Memasukkan nama dan password hotspot Wi-Fi serta kode Secret Key Device

7. Tekan tombol Save, maka isian di Tab Setup telah selesai. Berikutnya masuk ke Tab Sketch untuk membuat kode program agar IO Device bisa terhubung dengan variabel di Cloud (bisa Online).

Gambar 6. Isian di Tab Setup telah selesai

8. Ada angka 5 di Tab Sketch menunjukkan bawah ada 5 variabel yang dimasukkan dalam Sketch. Klik Tab Sketch. Di halaman Tab Sketch, klik pada tombol Open Full Editor untuk membuka Web Editor. Web Editor ini memiliki fasilitas yang menyerupai Arduino IDE, selain bisa digunakan untuk meng-upload program/Sketch ke hardware (dengan bantuan Create Agent), juga dapat menampilkan data yang dikirimkan/diterima melalui komunikasi serial seperti Serial Monitor, serta menambahkan library dan jenis hardware (Board).

Gambar 7. Tampilan Web Editor dengan Sketch yang berisi 5 variabel dari Tab Setup

Catatan:
Sekalipun Sketch di atas bisa diupload langsung ke hardware NodeMCU dengan bantuan Create Agent, namun dalam contoh di sini, saya menggunakan software IDE untuk meng-upload Sketch-nya. Dari pengalaman saya, ketika saya meng-upload Sketch dengan Web Editor ke NodeMCU, NodeMCU tersebut, tidak bisa Online, selalu Offline, alias tidak bisa terhubung dengan Cloud. Padahal di Web Editor tersebut, saya juga sudah mengganti library ArduinoIoTCloud ke versi 1.8.0 dan Arduino_ConnectionHandler ke versi 0.7.1, namun hasilnya tetap tidak bisa Online. Sebaliknya ketika saya mengupload Sketch yang sama, dengan library yang sama, menggunakan software Arduino IDE, hasilnya adalah, NodeMCU tersebut bisa Online. Saya masih belum tahu penyebabnya mengapa NodeMCU tidak bisa Online ketika Sketchnya diupload menggunakan Web Editor. Apabila ada rekan-rekan yang mengetahui, atau bisa membuat NodeMCU menjadi Online dengan upload Sketch dari Web Editor, mohon saya bisa diberi info tersebut di kolom komentar. Terimakasih sebelumnya 🙏🙏🙏.

9. Karena Sketch di atas akan di-upload dengan software IDE Arduino, untuk itu download Sketch di atas dengan meng-klik kanan nama file Sketch di kotak Sketchbook, dan pilih Download Sketch.

Gambar 8. Klik kanan pada nama file Sketch, pilih Download Sketch

10. Setelah Sketch terdownload, ekstrak file tersebut. Berikutnya buka folder yang muncul, dan klik 2 kali pada file yang bertipe INO. Setelah Sketch terbuka, di software Arduino IDE, di Tab dengan nama mengandung "ino", hapus seluruh isinya, dan ganti dengan program berikut ini.
  1. #include "arduino_secrets.h"
  2. #include "thingProperties.h"
  3. void setup() {
  4.   pinMode(D1, OUTPUT);
  5.   pinMode(D2, OUTPUT);
  6.   pinMode(D3, OUTPUT);
  7.   pinMode(D4, OUTPUT);
  8.   pinMode(D5, OUTPUT);
  9.   pinMode(D6, OUTPUT);
  10.   pinMode(D7, OUTPUT);
  11.   pinMode(D8, OUTPUT);
  12.   digitalWrite(D1, HIGH);
  13.   digitalWrite(D2, HIGH);
  14.   digitalWrite(D3, HIGH);
  15.   digitalWrite(D4, HIGH);
  16.   digitalWrite(D5, HIGH);
  17.   digitalWrite(D6, HIGH);
  18.   digitalWrite(D7, HIGH);
  19.   digitalWrite(D8, HIGH);
  20.   Serial.begin(9600);
  21.   delay(1500);
  22.   initProperties();
  23.   ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  24.   setDebugMessageLevel(2);
  25.   ArduinoCloud.printDebugInfo();
  26. }
  27. void loop() {
  28.   ArduinoCloud.update();
  29. }
  30. void onOut1Change() {
  31.   if (out1 == "A1" || out1 == "a1") {
  32.     digitalWrite(D1, LOW);
  33.     a = true;
  34.   } else if (out1 == "A0" || out1 == "a0") {
  35.     digitalWrite(D1, HIGH);
  36.     a = false;
  37.   }
  38.   if (out1 == "B1" || out1 == "b1") {
  39.     digitalWrite(D2, LOW);
  40.     b = true;
  41.   } else if (out1 == "B0" || out1 == "b0") {
  42.     digitalWrite(D2, HIGH);
  43.     b = false;
  44.   }
  45.   if (out1 == "C1" || out1 == "c1") {
  46.     digitalWrite(D3, LOW);
  47.     c = true;
  48.   } else if (out1 == "C0" || out1 == "c0") {
  49.     digitalWrite(D3, HIGH);
  50.     c = false;
  51.   }
  52.   if (out1 == "D1" || out1 == "d1") {
  53.     digitalWrite(D4, LOW);
  54.     d = true;
  55.   } else if (out1 == "D0" || out1 == "d0") {
  56.     digitalWrite(D4, HIGH);
  57.     d = false;
  58.   }
  59. }
  60. void onAChange() {
  61.   if (a) {
  62.     digitalWrite(D1, LOW);
  63.     out1 = "A1";
  64.   } else {
  65.     digitalWrite(D1, HIGH);
  66.     out1 = "A0";
  67.   }
  68. }
  69. void onBChange() {
  70.   if (b) {
  71.     digitalWrite(D2, LOW);
  72.     out1 = "B1";
  73.   } else {
  74.     digitalWrite(D2, HIGH);
  75.     out1 = "B0";
  76.   }
  77. }
  78. void onCChange() {
  79.   if (c) {
  80.     digitalWrite(D3, LOW);
  81.     out1 = "C1";
  82.   } else {
  83.     digitalWrite(D3, HIGH);
  84.     out1 = "C0";
  85.   }
  86. }
  87. void onDChange() {
  88.   if (d) {
  89.     digitalWrite(D4, LOW);
  90.     out1 = "D1";
  91.   } else {
  92.     digitalWrite(D4, HIGH);
  93.     out1 = "D0";
  94.   }
  95. }
11. Berikutnya, di Tab arduino_secrets.h, isi ssid/nama hotspot Wi-Fi, password hotspot Wi-Fi dan kode Secret Key, yang dapat disalin dari file pdf atau dari Tab Secret di Web Editor.

Gambar 9. Isi nama dan password Wi-Fi serta Secret Key di Tab arduino_secrets.h

12. Berikutnya, sebelum meng-upload program di atas ke hardware NodeMCU, pilih menu Tools, pilih Manage Libraries. Di Library Manager, cari dan instal 4 buah library berikut ini:
  • ArduinoIoTCloud (versi 1.8.0) 
  • Arduino_ConnectionHandler (versi 0.7.1)
  • Arduino_DebugUtils-master
  • ArduinoMqttClient-master
13. Berikutnya, setelah keempat library tersebut berhasil diinstal, hubungkan NodeMCU ke port USB Komputer, kemudian atur Board dan Port di menu Tools. Setelah pengaturan Board dan Port sudah benar, upload Sketch tersebut ke hardware NodeMCU. Setelah upload selesai, buka Serial Monitor, tunggu hingga muncul tulisan "Connected to Arduino IoT Cloud". Apabila tulisan tersebut sudah muncul di Serial Monitor, seharusnya Status Device di Tab Setup halaman Thing menjadi Online.

Gambar 10. Status Device menjadi Online, berarti terhubung dengan variable di Cloud

14. Setelah status Device Online, maka langkah berikutnya adalah mengatur tampilan variable di Dashboard. Klik Tab Dashboards, kemudian tekan tombol Build Dashboard. Di halaman Dashboards, ganti nama Untitled menjadi Kontrol4Relay.

Gambar 11. Di halaman Dashboards, ubah nama Untitled menjadi Kontrol4Relay

15. Gambar-gambar berikut ini menampilkan langkah-langkah dalam menambahkan Widget untuk Dashboard Kontrol4Relay.

Gambar 12. Klik tombol Add, pilih Tab Things, pilih Kontrol1

Gambar 13. Muncul 5 buah variabel, klik tombol Create Widgets

Gambar 14. Secara otomatis muncul sebuah widget Messenger, dan 4 buah widget Switch

Gambar 15. Lakukan penataan posisi dan ukuran widget dengan Tool Arrange Widgets

16. Berikutnya, hubungkan NodeMCU dengan Module Relay, dengan pengawatan seperti gambar berikut. Jangan lupa lepas jumper yang menghubungkan VCC dengan JD-VCC. Jumper ini perlu dilepas, karena antara JD-VCC dengan VCC berbeda level tegangannya. JD-VCC untuk suplai Relay harus diberi tegangan 5V, sedangkan VCC untuk input optokopler, bisa diberi 3,3V. Dengan bantuan optokopler dan transistor, output dari NodeMCU yang hanya 3,3V, bisa digunakan untuk menggerakkan Relay 5V. Lebih jelas mengenai rangkaian Modul Relay ini, silahkan klik link ini: http://wiki.sunfounder.cc/index.php?title=8_Channel_5V_Relay_Module 

Gambar 16. Pengawatan NodeMCU dengan Modul Relay 8 Channel untuk Kontrol 4 Relay

17. Berikut ini foto Kontrol ON/OFF 4 buah Relay dari halaman Dashboard di web.

Gambar 17 (a). Menyalakan Relay A dengan Switch di Dashboard 

Gambar 17 (b). Menyalakan Relay A dan B dengan Switch di Dashboard 

Gambar 17 (c). Menyalakan Relay B dan D dengan pesan di Messenger

Gambar 17 (d). Menyalakan dan memadamkan beberapa Relay dengan pesan di Messenger

18. Berikut ini foto Kontrol ON/OFF 4 buah Relay dari halaman Dashboard di HP.

Gambar 18(a). Menyalakan Relay A dan B dari Switch di Dashboard di HP

Gambar 18(b). Menyalakan keempat Relay dari Messenger di Dashboard di HP

19. Agar lebih jelas, berikut ini video pembuatan Kontrol ON/OFF 4 buah Relay dengan Arduino IoT Cloud dan NodeMCU.

Video Pembuatan Kontrol 4 buah Relay dengan Arduino IoT Cloud dan NodeMCU

20. Sampai di sini pembahasan mengenai pembuatan Kontrol ON/OFF untuk 4 buah Relay. Tahapan berikutnya, akan dijelaskan bagaimana membuat Kontrol Terjadwal untuk 4 buah Relay. Untuk file program NodeMCU dan Library yang digunakan di bagian ini, silahkan bisa diunduh di bagian File Download.


=========================================================================================


2. Pembuatan Kontrol Terjadwal untuk 4 buah Relay

Kontrol Terjadwal di tahap kedua ini sebenarnya sama dengan Kontrol ON/OFF di tahap pertama di atas, hanya di sini sebagai ganti 4 buah widget Switch, digunakan 4 buah widget Scheduler, yang hidup matinya dapat diatur waktunya secara terjadwal. Berikut ini langkah-langkah pembuatannya:
1. Ubah tipe data variable a, b, c dan d di Cloud Variable, dari semula tipe bool (Boolean), ganti menjadi tipe CloudSchedule (pilih Time, pilih Scheduler). Untuk Permission tetap Read& Write dan Update Policy tetap On Change.

Gambar 19. Klik pada titik 3 kali di kanan variable a, pilih Edit

Gambar 20. Pilih tipe variable, pilih Time, pilih Schedule

Gambar 21. Ulangi ubah variabel b, c dan d dari tipe bool menjadi CloudSchedule

2. Setelah tipe data variable a, b, c dan d diganti, berikutnya, klik pada Tab Sketch, klik Open Full Editor untuk membuka Web Editor. Di Web Editor, klik kanan pada nama Sketch, pilih Download Sketch. 

Gambar 22. Klik kanan pada Sketch di Web Editor, pilih Download Skecth

3. Setelah Sketch terdownload, ekstraks file, dan klik 2 kali pada file program ino. Di Tab program ino, hapus seluruh isinya, dan ganti dengan program berikut ini:

  1. #include "arduino_secrets.h"
  2. #include "thingProperties.h"
  3. String out = "Terjadwal:";
  4. String outa = "0";
  5. String outb = "0";
  6. String outc = "0";
  7. String outd = "0";
  8. bool terjadwal = true;
  9. void setup() {
  10.   pinMode(D1, OUTPUT);
  11.   pinMode(D2, OUTPUT);
  12.   pinMode(D3, OUTPUT);
  13.   pinMode(D4, OUTPUT);
  14.   pinMode(D5, OUTPUT);
  15.   pinMode(D6, OUTPUT);
  16.   pinMode(D7, OUTPUT);
  17.   pinMode(D8, OUTPUT);
  18.   digitalWrite(D1, HIGH);
  19.   digitalWrite(D2, HIGH);
  20.   digitalWrite(D3, HIGH);
  21.   digitalWrite(D4, HIGH);
  22.   digitalWrite(D5, HIGH);
  23.   digitalWrite(D6, HIGH);
  24.   digitalWrite(D7, HIGH);
  25.   digitalWrite(D8, HIGH);
  26.   Serial.begin(9600);
  27.   delay(1500);
  28.   initProperties();
  29.   ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  30.   setDebugMessageLevel(2);
  31.   ArduinoCloud.printDebugInfo();
  32. }
  33. void loop() {
  34.   ArduinoCloud.update();
  35.   if (a.isActive()) {
  36.     if (terjadwal) {
  37.       digitalWrite(D1, LOW);
  38.       outa = "1";
  39.     }
  40.   } else {
  41.     if (terjadwal) {
  42.       digitalWrite(D1, HIGH);
  43.       outa = "0";
  44.     }
  45.   }
  46.   if (b.isActive()) {
  47.     if (terjadwal) {
  48.       digitalWrite(D2, LOW);
  49.       outb = "1";
  50.     }
  51.   } else {
  52.     if (terjadwal) {
  53.       digitalWrite(D2, HIGH);
  54.       outb = "0";
  55.     }
  56.   }
  57.   if (c.isActive()) {
  58.     if (terjadwal) {
  59.       digitalWrite(D3, LOW);
  60.       outc = "1";
  61.     }
  62.   } else {
  63.     if (terjadwal) {
  64.       digitalWrite(D3, HIGH);
  65.       outc = "0";
  66.     }
  67.   }
  68.   if (d.isActive()) {
  69.     if (terjadwal) {
  70.       digitalWrite(D4, LOW);
  71.       outd = "1";
  72.     }
  73.   } else {
  74.     if (terjadwal) {
  75.       digitalWrite(D4, HIGH);
  76.       outd = "0";
  77.     }
  78.   }
  79.   out1 = out + outa + "." + outb + "." + outc + "." + outd;
  80. }
  81. void onAChange() {
  82. }
  83. void onBChange() {
  84. }
  85. void onCChange() {
  86. }
  87. void onDChange() {
  88. }
  89. void onOut1Change() {
  90.   if (out1 == "T" || out1 == "t") {
  91.     terjadwal = true;
  92.     out = "Terjadwal:";
  93.   }
  94.   if (out1 == "M" || out1 == "m") {
  95.     terjadwal = false;
  96.     out = "Manual:";
  97.   }
  98.   if (!terjadwal) {
  99.     if (out1 == "A1" || out1 == "a1") {
  100.       digitalWrite(D1, LOW);
  101.       outa = "1";
  102.     }
  103.     if (out1 == "A0" || out1 == "a0") {
  104.       digitalWrite(D1, HIGH);
  105.       outa = "0";
  106.     }
  107.     if (out1 == "B1" || out1 == "b1") {
  108.       digitalWrite(D2, LOW);
  109.       outb = "1";
  110.     }
  111.     if (out1 == "B0" || out1 == "b0") {
  112.       digitalWrite(D2, HIGH);
  113.       outb = "0";
  114.     }
  115.     if (out1 == "C1" || out1 == "c1") {
  116.       digitalWrite(D3, LOW);
  117.       outc = "1";
  118.     }
  119.     if (out1 == "C0" || out1 == "c0") {
  120.       digitalWrite(D3, HIGH);
  121.       outc = "0";
  122.     }
  123.     if (out1 == "D1" || out1 == "d1") {
  124.       digitalWrite(D4, LOW);
  125.       outd = "1";
  126.     }
  127.     if (out1 == "D0" || out1 == "d0") {
  128.       digitalWrite(D4, HIGH);
  129.       outd = "0";
  130.     }
  131.   }
  132.   out1 = out + outa + "." + outb + "." + outc + "." + outd;
  133. }

4. Di Tab thingProperties.h, pastikan isi DEVICE_LOGIN_NAME adalah kode Device ID yang dipilih, dan pastikan tipe data variabel a, b, c dan d adalah CloudSchedule, bukan bool.

Gambar 23. Di Tab thingProperties.h, pastikan Device ID dan tipe variable sudah benar

5. Berikutnya di Tab Secret.h, isi nama dan password Wi-Fi serta kode Secret Key Device. 

Gambar 24. Di Tab arduino_secrets.h, isi nama dan password Wi-Fi serta kode Secret Key Device

6. Berikutnya, pilih Board dan Port yang benar, kemudian upload program tersebut ke NodeMCU. Setelah upload selesai, buka Serial Monitor, tunggu hingga muncul tulisan "Connected to Arduino IoT Cloud". Apabila tulisan tersebut sudah muncul di Serial Monitor, seharusnya Status Device di Tab Setup halaman Thing menjadi Online.

Gambar 25. Setelah upload selesai, status Device seharusnya menjadi Online

7. Setelah status Device Online, langkah berikutnya, klik pada Tab Dashboard. Agar memudahkan penambahan widget, hapus Dashboard yang lama dengan cara meng-klik tombol titik 3 kali di kanan, pilih Delete.

Gambar 26. Hapus Dashboard yang lama dengan meng-klik titik 3 kali, pilih Delete

8. Setelah terhapus, tekan tombol Create. Di halaman Dashboard yang baru, beri nama Dashboard. Dalam contoh di sini: Kontrol4RelayTerjadwal. 

Gambar 27. Beri nama Dashboard yang baru

9. Berikutnya, klik tombol Add, klik Tab Things, klik nama Thing, kemudian klik tombol Create Widgets, maka secara otomatis akan muncul widget yang sesuai dengan tipe variabelnya.

Gambar 28. Klik tombol Add(1), klik Tab Things(2), klik nama Thing(3), klik Create Widgets(4)

10. Berikutnya, atur kelima widget menggunakan Tool Arrange widgets.

Gambar 29. Pengaturan posisi dan ukuran kelima widget menggunakan Tool Arrange widgets

11. Berikutnya, tambahkan widget Sticky Note untuk memberi catatan keterangan kode input ke widget Messenger, yaitu kode input untuk mengatur mode (manual/terjadwal) dan menghidup/matikan Relay.

Gambar 30. Penempatan widget Sticky Note untuk informasi kode input di Messenger

12. Berikut ini foto Kontrol Terjadwal untuk 4 buah Relay, yang diatur dari Dashboad di halaman web.

Gambar 31(a). Mode Terjadwal aktif, keempat Relay mengikuti setelan waktu Scheduler 

Gambar 31(b). Pengaturan waktu di widget Scheduler bisa diatur dari permenit s/d pertahun

Gambar 31(c).  Mode manual aktif, Relay dapat dihdup/matikan secara langsung

13.  Berikut ini foto Kontrol Terjadwal untuk 4 buah Relay, yang diatur dari Dashboad di HP.

Gambar 32(a). Mengaur setelan waktu di widget Scheduler

Gambar 32(b). Mode manual aktif dengan mengetikkan "m"

Gambar 32(c). Mode Terjadwal aktif dengan mengetikkan "t"  

14. Agar lebih jelas, berikut ini video pembuatan Kontrol Terjadwal untuk 4 buah Relay dengan Arduino IoT Cloud dan NodeMCU.

Video pembuatan Kontrol Terjadwal untuk 4 buah Relay

15. Sampai di sini pembahasan mengenai pembuatan Kontrol Terjadwal untuk 4 buah Relay. Tahapan berikutnya, akan dijelaskan bagaimana membuat Kontrol ON/OFF 8 buah Relay. Untuk file program NodeMCU dan Library yang digunakan di bagian ini, silahkan bisa diunduh di bagian File Download.


=========================================================================================


3. Pembuatan Kontrol ON/OFF untuk 8 buah Relay

Seperti telah dituliskan di atas, bahwa jumlah variable di Arduino IoT untuk pilihan yang gratis dibatasi hanya 5 buah variable untuk setiap Thing, dan jumlah Thing yang bisa dibuat dalam satu akun adalah hanya 2 Thing. Maka agar bisa membuat Kontrol lebih banyak Relay, ada beberapa alternatif cara, dua di antaranya adalah:
  1. Menggunakan sebuah widget Messenger. Cara pertama ini telah diterapkan pada pembuatan Kontrol untuk 4 buah Relay di atas. Dengan widget Messenger yang memiliki tipe data teks ini, bisa dibuat kode berupa nama atau huruf yang berbeda, yang unik untuk setiap Relay. Kemudian untuk menghidupkan, kodenya diberi tambahan angka 1, sedang untuk mematikan, kodenya diberi tambahan angka 0. Dengan kombinasi kode ini, maka kita bisa mengontrol banyak sekali Relay. Jumlah Relay yang dapat dikontrol dengan cara ini hanya dibatasi pada jumlah IO hardware yang tersedia. Kelemahan dari kontrol dengan data teks ini adalah, kita perlu mengingat kode untuk menghidup/matikan setiap Relay. Dengan menampilkan informasi kode yang digunakan untuk menghidup/matikan setiap Relay, akan bisa mengatasi masalah "lupa kode" ini (telah diterapkan dengan penggunaan Sticky Note).
  2. Cara kedua agar bisa mengontrol lebih banyak Relay, adalah dengan menggabungkan 2 buah Thing, sehingga bisa memiliki lebih banyak variabel. Kemudian agar variabel di kedua Thing tersebut bisa terhubung, maka variabel-variabel tersebut perlu "di-sinkronkan". Cara kedua ini, sekalipun lebih repot bila dibandingkan dengan cara pertama, tapi keuntungannya adalah, kita bisa membuat 2 buah Thing yang bekerja secara identik dan sinkron. 
Catatan: Sebelumnya saya beranggapan bahwa dengan mengupload Sketch yang sama (Sketch dari Arduino IoT Cloud) ke beberapa NodeMCU, akan membuat semua NodeMCU tersebut bekerja secara identik dan sinkron. Namun anggapan saya salah. Alih-alih bisa bekerja, malah semua NodeMCU tersebut tidak bisa Online, alias tidak bisa terhubung dengan Cloud. Apabila hanya satu NodeMCU saja yang dihidupkan (diberi sumber tegangan), maka NodeMCU tersebut bisa Online. Tetapi apabila lebih dari satu NodeMCU yang memiliki Sketch yang sama, dan semuanya dihidupkan (diberi sumber tegangan), alih-alih bisa bekerja, malah semuanya menjadi Offline. Untuk itu, satu-satunya cara agar 2 buah Thing bisa bekerja secara bersama-sama, variabel di kedua Thing tersebut harus dibuat sinkron.

Untuk pembuatan Kontrol ON/OFF 8 buah Relay di bagian ini, akan digunakan cara pertama, yaitu dengan menggunakan widget Messenger. Untuk cara kedua, karena di halaman ini sudah terlalu panjang, akan dijelaskan di bagian keempat (di Tab Semakin Banyak Kontrol). Berikut ini langkah-langkah pembuatan Kontrol ON/OFF 8 buah Relay dengan sebuah widget Messenger:
1. Mula-mula, buat rangkaian NodeMCU dengan Modul Relay 8 channel seperti gambar berikut: 

Gambar 33. Pengawatan NodeMCU dengan Modul Relay 8 channel

2. Di Arduino IoT Cloud, buat Thing yang kedua, dan beri nama Kontrol2 (Thing yang pertama telah dibuat di atas, yang diberi nama Kontrol1). 

Gambar 34. Tekan tombol Create di halaman Things untuk membuat Thing yang kedua

Gambar 35. Beri nama Thing yang baru: Kontrol2

3. Berikutnya tambahkan variable, beri nama out2, pilih tipe datanya Character String, Permission: Read&Write dan Update Policy: On Change.

Gambar 36. Klik Add Variable, beri nama:out2, tipe: Character String, Read&Write dan On Change

4. Setelah membuat variabel di Cloud, langkah berikutnya adalah setup Device untuk nantinya dihubungkan dengan variabel di Cloud tersebut. Gambar berikut ini menunjukkan urut-urutan langkah setup Device.

Gambar 37. Klik tombol Select Device

Gambar 38. Pilih Set Up New Device

Gambar 39. Pilih Set Up a 3rd Party Device

Gambar 40. Pilih ESP8266, dan pilih Model NodeMCU 1.0

Gambar 41. Pilih nama Device, klik Next

Gambar 42. Muncul Device ID dan Secret Key, klik download the pdf untuk menyimpan kode tersebut

Gambar 43. Contoh isi file pdf yang menyimpan data nama Device, ID dan Secret Key

Gambar 44. Centang pada tulisan I saved my ..., dan klik Continue, maka Setup Device telah selesai

Gambar 45. Setelah nama, ID, dan status Device muncul di Tab Setup, klik tombol Configure

Gambar 46. Isi nama dan password Wi-Fi serta Secret Key Device, klik Save

Gambar 47. Setelah Cloud Variables, Associated Device, dan Network selesai diisi, klik Tab Sketch 

Gambar 48. Klik Open Full Editor untuk membuka Web Editor

Gambar 49. Klik kanan nama Sketch, pilih Download Sketch

Gambar 50. Ekstraks file download, klik 2 kali pada file bertipe INO

5. Setelah Sketch terbuka, di software Arduino IDE, buka Tab dengan nama berakhiran ino, hapus seluruh isinya, dan ganti dengan program berikut ini.
  1. #include "arduino_secrets.h"
  2. #include "thingProperties.h"
  3. String a = "0";
  4. String b = "0";
  5. String c = "0";
  6. String d = "0";
  7. String e = "0";
  8. String f = "0";
  9. String g = "0";
  10. String h = "0";
  11. void setup() {
  12.   pinMode(D1, OUTPUT);
  13.   pinMode(D2, OUTPUT);
  14.   pinMode(D3, OUTPUT);
  15.   pinMode(D4, OUTPUT);
  16.   pinMode(D5, OUTPUT);
  17.   pinMode(D6, OUTPUT);
  18.   pinMode(D7, OUTPUT);
  19.   pinMode(D8, OUTPUT);
  20.   digitalWrite(D1, HIGH);
  21.   digitalWrite(D2, HIGH);
  22.   digitalWrite(D3, HIGH);
  23.   digitalWrite(D4, HIGH);
  24.   digitalWrite(D5, HIGH);
  25.   digitalWrite(D6, HIGH);
  26.   digitalWrite(D7, HIGH);
  27.   digitalWrite(D8, HIGH);
  28.   Serial.begin(9600);
  29.   delay(1500);
  30.   initProperties();
  31.   ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  32.   setDebugMessageLevel(2);
  33.   ArduinoCloud.printDebugInfo();
  34. }
  35. void loop() {
  36.   ArduinoCloud.update();
  37. }
  38. void onOut2Change() {
  39.   if (out2 == "A1" || out2 == "a1" || out2 == "V" || out2 == "v") {
  40.     digitalWrite(D1, LOW);
  41.     a = "1";
  42.   } else if (out2 == "A0" || out2 == "a0" || out2 == "X" || out2 == "x") {
  43.     digitalWrite(D1, HIGH);
  44.     a = "0";
  45.   }
  46.   if (out2 == "B1" || out2 == "b1" || out2 == "V" || out2 == "v") {
  47.     digitalWrite(D2, LOW);
  48.     b = "1";
  49.   } else if (out2 == "B0" || out2 == "b0" || out2 == "X" || out2 == "x") {
  50.     digitalWrite(D2, HIGH);
  51.     b = "0";
  52.   }
  53.   if (out2 == "C1" || out2 == "c1" || out2 == "V" || out2 == "v") {
  54.     digitalWrite(D3, LOW);
  55.     c = "1";
  56.   } else if (out2 == "C0" || out2 == "c0" || out2 == "X" || out2 == "x") {
  57.     digitalWrite(D3, HIGH);
  58.     c = "0";
  59.   }
  60.   if (out2 == "D1" || out2 == "d1" || out2 == "V" || out2 == "v") {
  61.     digitalWrite(D4, LOW);
  62.     d = '1';
  63.   } else if (out2 == "D0" || out2 == "d0" || out2 == "X" || out2 == "x") {
  64.     digitalWrite(D4, HIGH);
  65.     d = "0";
  66.   }
  67.   if (out2 == "E1" || out2 == "e1" || out2 == "V" || out2 == "v") {
  68.     digitalWrite(D5, LOW);
  69.     e = "1";
  70.   } else if (out2 == "E0" || out2 == "e0" || out2 == "X" || out2 == "x") {
  71.     digitalWrite(D5, HIGH);
  72.     e = "0";
  73.   }
  74.   if (out2 == "F1" || out2 == "f1" || out2 == "V" || out2 == "v") {
  75.     digitalWrite(D6, LOW);
  76.     f = "1";
  77.   } else if (out2 == "F0" || out2 == "f0" || out2 == "X" || out2 == "x") {
  78.     digitalWrite(D6, HIGH);
  79.     f = "0";
  80.   }
  81.   if (out2 == "G1" || out2 == "g1" || out2 == "V" || out2 == "v") {
  82.     digitalWrite(D7, LOW);
  83.     g = "1";
  84.   } else if (out2 == "G0" || out2 == "g0" || out2 == "X" || out2 == "x") {
  85.     digitalWrite(D7, HIGH);
  86.     g = "0";
  87.   }
  88.   if (out2 == "H1" || out2 == "h1" || out2 == "V" || out2 == "v") {
  89.     digitalWrite(D8, LOW);
  90.     h = "1";
  91.   } else if (out2 == "H0" || out2 == "h0" || out2 == "X" || out2 == "x") {
  92.     digitalWrite(D8, HIGH);
  93.     h = "0";
  94.   }
  95.   out2 = a + "." + b + "." + c + "." + d + "." + e + "." + f + "." + g + "." + h;
  96. }
6. Berikutnya, buka Tab arduino_secrets.h, isi nama dan password Wi-Fi, serta kode Secret Key.

7. Berikutnya, sebelum meng-upload program/Sketch di atas ke hardware NodeMCU, pastikan keempat library berikut ini telah terinstal.
  • ArduinoIoTCloud (v.1.8.0) 
  • Arduino_ConnectionHandler (v.0.7.1) 
  • Arduino_DebugUtils-master
  • ArduinoMqttClient-master
13. Berikutnya, hubungkan NodeMCU ke port USB Komputer. Kemudian pilih Board dan Port yang benar, lalu upload Sketch. Setelah upload selesai, buka Serial Monitor, tunggu hingga muncul tulisan "Connected to Arduino IoT Cloud". Apabila tulisan tersebut sudah muncul di Serial Monitor, seharusnya Status Device di Tab Setup halaman Thing menjadi Online.

Gambar 51. Buka Serial Monitor, tunggu hingga muncul tulisan "Connected to Arduino IoT Cloud"

Gambar 52. Status Device di Tab Setup telah menjadi Online

14. Setelah status Device Online, maka langkah berikutnya adalah mengatur tampilan variable di Dashboard. Klik Tab Dashboards, kemudian tekan tombol Build Dashboard. Di halaman Dashboards, ganti nama Untitled menjadi Kontrol 8 Relay. Kemudian klik tombol Add, klik Tab Things, klik nama Thing, kemudian klik tombol Create Widgets, maka secara otomatis akan muncul widget Mesenger, yang sesuai dengan tipe variabel String.

Gambar 53. Klik Add, pilih Things, klik Thing kedua, klik Create Widgets, maka widget otomatis muncul

Gambar 54. Secara otomatis muncul widget Messenger yang sesuai dengan variable String

15. Berikutnya tambahkan Sticky Note, pilih Paragraph Only, dan isi dengan tulisan berikut ini, yang menampilkan informasi kode input untuk menghidup/matikan kedelapan Relay.

Informasi kode input:
- ketik v: semua Relay ON.
- ketik x: semua Relay OFF.
- ketik a1: Relay1 ON.
- ketik a0: Relay1 OFF.
- ketik b1: Relay2 ON.
- ketik b0: Relay2 OFF.
- ketik c1: Relay3 ON.
- ketik c0: Relay3 OFF.
- ketik d1: Relay4 ON.
- ketik d0: Relay4 OFF.
- ketik e1: Relay5 OFF.
- ketik e0: Relay5 OFF.
- ketik f1: Relay6 OFF.
- ketik f0: Relay6 OFF.
- ketik g1: Relay7 OFF.
- ketik g0: Relay7 OFF.
- ketik h1: Relay8 OFF.
- ketik h0: Relay8 OFF.

Gambar 55. Menambahkan widget Sticky Note untuk informasi kode input

16. Berikut ini foto Kontrol ON/OFF 8 buah Relay dari halaman Dashboard di web.

Gambar 56. Menghidupkan semua Relay

Gambar 57. Menghidupkan Relay1, Relay3, Relay5 dan Relay7

17. Berikut ini foto Kontrol ON/OFF 8 buah Relay dari halaman Dashboard di HP.

Gambar 58. Menghidupkan Relay2, Relay4, Relay6 dan Relay8

Gambar 59. Menghidupkan semua Relay

18. Agar lebih jelas, berikut ini video pembuatan Kontrol ON/OFF 8 buah Relay dengan Arduino IoT Cloud dan NodeMCU.

Video Pembuatan Kontrol 8 buah Relay dengan Arduino IoT Cloud dan NodeMCU

19. Sampai di sini pembahasan mengenai pembuatan Kontrol ON/OFF untuk 8 buah Relay. di bagian keempat, akan dijelaskan bagaimana membuat Kontrol Terjadwal untuk 16 buah Relay. Untuk file program NodeMCU dan Library yang digunakan di bagian ini, silahkan bisa diunduh di bagian File Download.

Catatan Tambahan:
Karena harus menghidupkan 8 buah Relay, ada kemungkinan suplai arus dari kaki VU NodeMCU ke JDVCC Modul Relay tidak memadai, yang mengakibatkan hanya LED indikator saja yang menyala, namun sebenarnya Relay-nya tidak bekerja. Apabila terjadi demikian disarankan agar tegangan yang diberikan ke JD-VCC Modul Relay bisa diambilkan langsung dari sumber tegangan yang mensuplai NodeMCU.


=========================================================================================


File Download:

  1. File untuk Kontrol ON/OFF 4 buah Relay: OnOff4Relay
  2. File untuk Kontrol Terjadwal 4 buah Relay: Terjadwal4Relay
  3. File untuk Kontrol ON/OFF 8 buah Relay: OnOff8Relay

3 comments:

  1. kangen dengan project ini... bikin project lagi dong relay yang on off otomatis dan bisa manual on off tekan pakai saklar. terima kasih mas ilmu nya

    ReplyDelete
    Replies
    1. Terimakasih sudah berkunjung, mohon maaf baru balas, siap, saya akan buat, terimakasih idenya

      Delete
    2. siapp mas.. ditunggu project baru nya, nanti saya email desain ide nya hehe. thanks mas

      Delete