5. Kontrol Di Mana-Mana

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.

Sama seperti makhluk hidup yang bisa berkembang ketika saling berhubungan, begitu pula dengan aplikasi yang akan kita buat ini. Dengan membuat Arduino IoT Cloud bisa terhubung dengan aplikasi lain, akan membuat aplikasi yang kita buat menjadi semakin menarik dan menyenangkan. 

Di samping itu, di bagian kelima ini saya buat untuk menjawab beberapa pertanyaan berikut ini:

  1. Apakah data dari Arduino IoT Cloud bisa ditampikan di Google Sheet? 
  2. Apakah bisa dikontrol dengan cara yang lain selain dengan teks dan tombol?
  3. Apakah bisa mengontrol lebih dari 16 buah Relay?
  4. Apakah bisa menggunakan hardware yang lain?
Untuk menjawab pertanyaan di atas, saya membagi bagian kelima ini menjadi 4 sub bab berkut ini:

  1. Memantau data Arduino IoT Cloud dengan Webhook dan Google Sheet
  2. Kontrol 2x8 Relay dengan Alexa
  3. Memperbanyak kontrol dengan IFTTT dan Adafruit IO
  4. Menggunakan hardware ESP-01 dan ESP-32
Berikut ini uraian masing-masing:

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


1. Memantau Data Arduino IoT Cloud dengan Webhook & Google Sheet

Apa itu Webhook? Secara singkat, Webhook adalah semacam API yang bisa otomatis mengirimkan data. Webhook juga sering disebut panggilan balik atau callback HTTP. Dengan Webhook, Client tidak perlu mengirimkan request ke server, data akan otomatis dikirimkan ke Client setiap kali data di server diupdate. Kalau dengan API, data hanya akan dikirimkan ke Client apabila Client mengirimkan request. 

Selain bersifat otomatis, dengan Webhook kita terbebas dari pembuatan kode program yang rumit untuk menghubungkan 2 server (antara Arduino IoT Cloud dengan Google sheet). Dengan Webhook, kita hanya perlu menempelkan link web yang dituju, maka nanti setiap kali ada update data di server, data tersebut langsung dikirimkan ke link web tersebut. Ilustrasi berikut menunjukkan peranan Webhook dalam pembuatan aplikasi pemantauan data di Google Sheet.

Gambar 1. Tanpa Webhook, perlu program untuk mengirimkan data dari NodeMCU ke Google Sheet

Gambar 2. Dengan Webhook, NodeMCU tidak perlu diprogram untuk pengiriman data ke Google Sheet

Dari ilustrasi di atas, jelas bahwa dengan Webhook, kita bisa membuat pemantauan data di Google Sheet menjadi lebih mudah, lebih cepat, lebih efektif dan otomatis. Agar lebih jelas mengenai keampuhan Webhook ini, berikut ini langkah-langkah pembuatan aplikasi pemantauan data dengan Webhook dan Google Sheet. Secara garis besar, ada 2 tahapan yang harus dilakukan, yaitu:
  1. Pembuatan link Webhook, dengan bantuan Add-on Webhooks for Sheets yang gratis
  2. Pemanfaatan Webhook untuk pemantauan data Arduino IoT Cloud di Google Sheet


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


1.1 Tahap Pertama: Pembuatan Link Webhook

Mulai dari Tahap pertama, pembuatan link Webhook, berikut ini langkah-langkah pembuatannya, yang disajikan dalam bentuk urutan gambar:

Gambar 3. Buka Google Sheet, pilih Blank untuk membuka halaman Google Sheet yang baru

Gambar 4. Beri nama halaman Google Sheet, kemudian klik Enter

Gambar 5. Pilih menu Extension, pilih Add-ons, pilih Get Add-ons, atau klik tombol + di Sidebar

Gambar 6. Di kolom pencarian Add-on, cari Webhooks for Sheets, oleh Sourabh Choraria.

Gambar 7. Pilih Webhooks for Sheets, klik tombol Install.

Gambar 8. Klik Continue, pilih akun google, klik Allow untuk mengijinkan instalasi, klik Next

Gambar 9. Webhooks for Sheets selesai terinstal, klik Done

Gambar 10. Muncul icon Webhook di Sidebar di atas tombol Get Add-ons (+)

Gambar 11. Klik Webhook di Sidebar, muncul kolom yang berisi petunjuk pembuatan link Webhook

Gambar 12. Pilih Sheet yang akan diberi link Webhook, kemudian klik tombol Create.

Gambar 13. Di petunjuk halaman kedua, klik tombol Enable Apps Script API

Gambar 14. Di halaman Apps Script, ubah Google Apps Script API dari OFF menjadi ON 

Gambar 15. Google Apps Script API sudah berubah menjadi ON 

Gambar 16. Kembali ke Google Sheet, klik tombol Next, muncul halaman ketiga

Gambar 17. Di petunjuk halaman ketiga, klik tombol Refresh, hingga muncul menu Webhook

Gambar 18. Klik menu Webhook, kemudian klik pilihan Authorize

Gambar 19. Klik tombol Continue untuk memberikan ijin otorisasi

Gambar 20. Pilih akun google untuk memberikan ijin otorisasi

Gambar 21. Klik tombol Allow untuk memberikan ijin otorisasi

Gambar 22. Sekali lagi pilih kembali menu Webhook, dan pilih Authorize

Gambar 23. Di sisi kanan bawah, muncul pesan bahwa otorisasi telah berhasil

Gambar 24. Buka kembali kolom petunjuk dengan meng-klik icon Webhook, lalu klik tombol Next

Gambar 25. Maka link Webhook muncul, copy link tersebut, sampai di sini, tahap 1 sudah selesai


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


1.2 Tahap kedua: Penggunaan Webhook untuk Pemantauan data di Google Sheet

Setelah tahap pertama selesai, tahap kedua adalah memanfaatkan Webhook tersebut untuk mengirimkan data dari Arduino IoT Cloud ke Google Sheet, yang dilakukan dengan cara menempelkan link Webhook di halaman Thing. Berikut ini langkah-langkah pembuatannya yang disajikan dalam serangkaian gambar secara berurutan:

Gambar 26. Buka halaman Arduino IoT Cloud, masukkan akun yang terdaftar

Gambar 27. Terbuka halaman pembuatan Thing, klik tombol Create Thing

Gambar 28. Di halaman Thing, ganti nama Thing dari Untitled menjadi Alat1 misalnya

Gambar 29. Berikutnya, klik Add Variable, beri nama s1, tipe Boolean, Read & Write dan On Change

Gambar 30. Setelah variabel s1 muncul, berikutnya klik Set webhook

Gambar 31. Tempelkan link Webhook Google Sheet di kolom Webhook URL

Gambar 32. Tekan tombol Set Webhook di bawah kolom Webhook URL

Gambar 33. Webhook telah aktif, otomatis meneruskan setiap perubahan data di halaman Thing 

Gambar 34. Setiap kali terjadi perubahan data di variabel s1, data tersebut dikirimkan ke Google Sheet

Gambar 35. Data variabel s1 bisa diubah lewat Dashboard, untuk itu buat Dashboard

Gambar 36. Di halaman Dashboard, klik Add, pilih Thing, pilih Alat1, klik Create Widgets

Gambar 37. Buka Google Sheet, buat berdampingan dengan Dashboard Arduino IoT Cloud

Gambar 38. Lakukan pengubahan widget variabel s1, perhatikan ada data di Google Sheet

Gambar 39. Tampilan data di Google Sheet sangat lengkap, ada 10 kolom dimunculkan di Sheet1

Catatan1: 10 kolom data ini secara berturut-turut terdiri dari: event_id, webhook_id, device_id, thing_id, values_0_id, values_0_name, values_0_value, values_0_persist, values_0_updated_at, dan terakhir  values_0_created_by. Apabila dirasa terlalu banyak data, rekan-rekan dapat menghapus kolom data tersebut. Nanti ketika ada data lagi yang dikirimkan, kolom data yang sudah dihapus tidak akan muncul lagi. Sebagai contoh, saya hanya menghendaki data di kolom values_0_name, values_0_value dan values_0_updated_at, jadi hanya 3 kolom saja, sedangkan kolom yang lain saya hapus, seperti terlihat pada gambar berikut ini:

Gambar 40. Hapus kolom data yang tidak dikehendaki

Gambar 41. Hanya 3 kolom data: values_0_name, values_0_value, values_0_updated_at

Gambar 42. Ketika variabel s1 diubah, terlihat data yang ditampilkan selalu ada di ketiga kolom

Catatan2: Dari Gambar 42 di atas, terlihat ketika s1 dibuat ON di Dashboard, nilai TRUE muncul di kolom values_0_value, sebaliknya ketika s1 dibuat OFF, nilai FALSE tidak muncul. Hal ini tidak menjadi soal, karena ternyata datanya selalu konsisten, yaitu kalau bernilai FALSE, semua kolom yang lain selalu terisi, hanya kosong di kolom values_0_value saja.

Catatan3: Hal yang lebih penting yang perlu diketahui, ketika kita melakukan pengubahan data terlalu sering dalam waktu yang singkat, maka data yang ditampilkan bisa jadi tidak berurutan, karena komunikasi webhook bersifat "fire and forget", artinya data dikirim tanpa peduli bagaimana penerimaannya. Untungnya, sekalipun tampilan datanya di Google Sheet tidak berurutan, timestamp atau catatan waktu saat data dikirimkan tersebut selalu benar. Dengan demikian, permasalahan data yang tidak berurutan tersebut dapat diatasi dengan cara diurutkan secara manual berdasarkan data di kolom values_0_updated_at. Caranya adalah dengan meng-klik tanda panah di kolom C (values_0_updated_at), pilih Sort sheet A to Z, maka urutan data menjadi benar, karena diurutkan berdasarkan catatan waktunya.

Gambar 43. Contoh tampilan data yang tidak berurut saat pengubahan dilakukan terlalu sering

Gambar 44. Cara mengatasi, di kolom C (values_0_updated_at), klik panah, pilih Sort sheet A to Z

Gambar 45. Ketika sorting diterapkan berdasarkan catatan waktu, maka urutan data menjadi benar

Catatan4: Dari hasil langkah-langkah di atas, diketahui bahwa pemantauan data variabel s1 dari Arduino IoT Cloud di Google Sheet telah berhasil dibuat dengan cara yang mudah sekali, tanpa perlu membuat program, cukup hanya menempelkan link Webhook saja di halaman Thing Arduino IoT Cloud, maka semua perubahan data variabel yang dilakukan di Dashboard, akan ditampilkan di Google Sheet. 

Hal yang menarik di sini adalah, semuanya dilakukan tanpa pemrograman (no-code), dan yang lebih menarik lagi, kita dapat memantau semua variabel yang kita tambahkan di halaman Thing, asal di halaman itu ada link Webhooknya. Wow ... keren sekali. 

Apabila kita ingin memaksimalkan fitur gratis kita, maka dalam 1 akun, kita bisa memiliki 2 Thing x 5 variabel, jadi total ada 10 variabel yang bisa kita pantau sekaligus di Google Sheet, dengan hanya menempelkan link Webhook tersebut di kedua halaman Thing yang kita buat. Untuk lebih jelasnya, lihat contoh berikut ini.
1. Buat variabel di Cloud untuk kedua Thing seperti dalam tabel berikut:

Thing: Alat1

Nama Variable

Tipe Variable

Ijin Akses (Permission)

Update Policy

s1

bool (Basic | Boolean)

Read & Write

On Change

s2

bool (Basic | Boolean)

Read & Write

On Change

p1

int (Basic | Integer Number)

Read & Write

On Change

p2

int (Basic | Integer Number)

Read & Write

On Change

t1

String (Basic | Character String)

Read & Write

On Change

Thing: Alat2

Nama Variable

Tipe Variable

Ijin Akses (Permission)

Update Policy

s3

bool (Basic | Boolean)

Read & Write

On Change

s4

bool (Basic | Boolean)

Read & Write

On Change

p3

int (Basic | Integer Number)

Read & Write

On Change

p4

int (Basic | Integer Number)

Read & Write

On Change

t2

String (Basic | Character String)

Read & Write

On Change


Berikut ini gambar-gambar langkah pembuatan variabel dalam tabel di atas:

Gambar 46. Add Variable, beri nama s2, tipe bool, Read & Write, On Change

Gambar 47. Add Variable, beri nama p1, tipe int, Read & Write, On Change, Threshold=0

Gambar 48. Add Variable, beri nama p2, tipe int, Read & Write, On Change, Threshold=0

Gambar 49. Add Variable, beri nama t1, tipe String, Read & Write, On Change

Gambar 50. Lima variable telah dibuat di Thing Alat1, dan link Webhook sudah aktif

Gambar 51. Klik menu Things, klik Create untuk menciptakan Thing kedua

Gambar 52. Beri nama Thing kedua: Alat2

Gambar 53. Add Variable, beri nama s3, tipe bool, Read & Write, On Change

Gambar 54. Add Variable, beri nama s4, tipe bool, Read & Write, On Change

Gambar 55. Add Variable, beri nama p3, tipe int, Read & Write, On Change, Threshold = 0

Gambar 56. Add Variable, beri nama p4, tipe int, Read & Write, On Change, Threshold = 0

Gambar 57. Add Variable, beri nama t2, tipe String, Read & Write, On Change

Gambar 58. Klik Set Webhook, isi link Webhook yang sama dengan link di Thing Alat1

Gambar 59. Klik Set Webhook, maka link Webhook sudah aktif

Gambar 60. Lima variabel telah ditambahkan di Thing Alat2 beserta dengan link Webhook

Gambar 61. Klik menu Things, seharusnya ada 2 Thing, masing-masing memiliki 5 variabel

2. Setelah penambahan 5 variabel di kedua Thing selesai, langkah berikutnya adalah menampilkan data 10 variabel tersebut di Dashboard. 

Gambar 62. Klik menu Dashboards, klik Dashboard yang sudah dibuat sebelumnya, klik Delete

Gambar 62. Klik tombol Build Dashboard

Gambar 63. Di halaman Dashboard yang baru, beri nama Tampilan

Gambar 64. Klik tombol Add, pilih Things, pilih Alat1, klik Create Widgets

Gambar 65. Muncul 5 buah widget: 1 widget Messenger, 2 widget Value dan 2 widget Switch

Gambar 66. Ulangi untuk Thing Alat2: klik Add, pilih Things, pilih Alat2, klik Create Widgets

Gambar 67. Atur posisi dan ukuran kesepuluh widget di Dashboard dengan Tool Arrange widget  

Catatan5: Agar sesuai pernyataan di atas, yaitu no-code, tanpa program, maka widget Value p1, p2, p3 dan p4, untuk sementara, kita ganti dulu dengan widget Slider dan widget Stepper. Mengapa harus diganti? Karena jenis widget Value merupakan jenis widget Indikator yang hanya menampilkan data dari Hardware, sehingga pengguna tidak bisa mengubah kondisinya dari Dashboard. Sedangkan jenis widget Slider dan widget Stepper termasuk dalam kategori widget Control, di mana pengguna bisa mengganti kondisi kedua widget tersebut dari Dashboard. 

Gambar 68. Kelompok widget Control ditempatkan di daftar bagian atas, mulai dari Switch hingga Scheduler, di mana pengguna bisa mengubah nilai data yang ada di widget ini dari Dashboard

Gambar 69. Kelompok widget Indikator ditempatkan di daftar bagian bawah, mulai dari Value hingga Chart, di mana pengguna hanya bisa melihat tampilannya saja, pengubahan data harus dilakukan di Device, karena widget ini hanya menampilkan data dari Device yang terhubung

3. Agar sesuai dengan pernyataan no-code (tanpa kode program), maka silahkan mengganti widget Value p1, p2, p3 dan p4 dengan widget Slider untuk p1 dan p3, serta widget Stepper untuk p2 dan p4. 

Gambar 70. Klik menu di pojok kanan atas widget Value (p1, p2, p3, p4), pilih Delete

Gambar 71. Klik Add. pilih widget Slider, tempatkan menggantikan widget Value p1 dan p3, kemudian ulangi untuk menambahkan widget Stepper, tempatkan menggantikan widget Value p2 dan p4

Gambar 72. Buat widget Slider pertama terhubung dengan variabel p1, dengan meng-klik menu di pojok kanan atas widget, pilih Edit Settings, pilih Alat1, pilih p1, kemudian klik tombol Link Variable, setelah itu ulangi untuk widget Slider kedua agar terhubung dengan variabel p3 di Alat2

Gambar 72. Buat widget Stepper pertama terhubung dengan variabel p2, klik menu di pojok kanan atas widget, pilih Edit Settings, pilih Alat1, pilih p2, kemudian klik tombol Link Variable, setelah itu ulangi untuk widget Stepper kedua agar terhubung dengan variabel p4 di Alat2

4. Setelah keempat widget tersebut terhubung dengan variabel p1, p2, p3 dan p4, langkah selanjutnya adalah, lakukan pengubahan data pada kesepuluh widget dari Dashboard, dan perhatikan tampilan data di Google Sheet. Usahakan pengubahan tidak dilakukan terlalu cepat, tetapi beri rentang waktu yang cukup antara satu pengubahan dengan pengubahan berikutnya, agar tidak terjadi tampilan data yang tidak berurutan (sekalipun nantinya bisa diurutkan juga dengan Sort sheet A to Z di kolom C). Berikut ini hasil pengubahan kesepuluh widget dan tampilan datanya di Google Sheet:

Gambar 73. Mengetikkan test1 di widget Messenger pertama, maka di Google Sheet muncul test1, perhatikan tampilan waktu di Google Sheet, ternyata selisih 7 jam (GMT+7)

Gambar 74. Mengetikkan test2 di widget Messenger kedua, maka di Google Sheet muncul test2

Gambar 75. Menggeser widget Slider p1 ke angka 26, maka di Google Sheet muncul 26 untuk p1

Gambar 76. Memasukkan angka 28 di Stepper p2, maka di Google Sheet muncul 28 untuk p2

Gambar 77. Membuat widget Switch s1 OFF, maka di Google Sheet muncul isian kosong untuk s1

Gambar 78. Membuat widget Switch s2 OFF, maka di Google Sheet muncul isian kosong untuk s2

Gambar 79. Menggeser widget Slider p3 ke angka 40, maka di Google Sheet muncul 40 untuk p3

Gambar 80. Memasukkan angka 51 di Stepper p4, maka di Google Sheet muncul 51 untuk p4

Gambar 81. Membuat widget Switch s3 OFF, maka di Google Sheet muncul isian kosong untuk s3

Gambar 82. Membuat widget Switch s4 OFF, maka di Google Sheet muncul isian kosong untuk s4

Gambar 83. Membuat widget Switch s1 ON, maka di Google Sheet muncul TRUE untuk s1

Sampai di sini pembuatan aplikasi pemantauan data variabel Arduino IoT Cloud di Google Sheet dengan bantuan Webhook telah selesai. Namun sepertinya kita kurang puas apabila tidak terhubung dengan Hardware. Sengaja saya tuliskan penyambungan dengan hardware di bagian Tambahan dari sub bab ini, agar saya tidak diprotes, lho kok ternyata ada programnya ...? (yah, karena ini terkait dengan hardware, tidak bisa tidak, kita harus membuat program - oh ... terpaksa ):


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


1.3 Tambahan: Ketika diinginkan Pengubahan Data dilakukan di Hardware

Apabila rekan-rekan menginginkan pengubahan data tidak hanya dilakukan di Dashboard, tetapi juga dari hardware, maka berikut ini langkah-langkahnya:
1. Sebagai contoh di sini, kita akan membuat pengubahan data dengan sebuah Potensio. Karena nilai Potensio hanya bisa dibaca (Read Only), maka ubah widget Slider p1 menjadi widget Value. Isi data widget Value ini akan kita ambilkan dari nilai potensio yang dihubungkan ke kaki A0 NodeMCU, dengan rangkaian seperti terlihat pada gambar berikut:

Gambar 84. Diinginkan pengubahan data di widget Value dilakukan dari Potensio yang terhubung dengan NodeMCU, yang nantinya, data tersebut ditampilkan di Google Sheet

2. Delete widget Slider p1, ganti dengan widget Value, kemudian hubungkan dengan variabel p1.

Gambar 85. Delete widget Slider p1

Gambar 86. Tambahkan widget Value dengan meng-klik tombol Add, pilih Value

Gambar 87. Edit Settings widget Value, klik tombol Link Variable

Gambar 88. Pilih Things: Alat1, Variables: p1, kemudian klik tombol Link Variable

Gambar 89. Klik Done, maka widget Value siap menampilkan data Potensio

3. Berikutnya, agar nilai Potensio bisa ditampilkan di widget Value, ubah ijin akses variabel p1 dari Read & Write menjadi Read Only.

Gambar 90. Buka menu Things, klik 2 kali pada Alat1

Gambar 91. Klik pada tombol 3 titik di variabel p1, pilih Edit 

Gambar 92. Ganti Read & Write menjadi Read Only, klik tombol Save

4. Berikutnya, setelah pengaturan variabel di Cloud, pilih dan setup Device untuk menghubungkan variable Cloud tersebut dengan Potensio. Klik tombol Select Device, pilih NodeMCU, dan pastikan kode Device ID dan Secret Key tersimpan (download the pdf). 

Gambar 93. Klik tombol Select Device, klik Set Up New Device

Gambar 94. Pilih Set Up a 3rd Party Device

Gambar 95. Pilih ESP8266, pilih NodeMCU 1.0

Gambar 96. Beri nama Device

Gambar 97. Klik download the pdf untuk menyimpan kode Device ID dan Secret Key

Gambar 98. Contoh isi download the pdf yang berisi kode Device ID dan Secret Key

Gambar 99. Beri centang pada "I saved my ...", klik Continue

Gambar 100. Device siap untuk diprogram, klik Done

5. Setelah setup Device selesai, langkah berikutnya adalah memprogram Device tersebut, sehingga menjadi terhubung dengan variabel di Cloud. Berikut ini langkah-langkahnya: 

Gambar 101. Berikutnya klik Sketch untuk membuat program 

Gambar 102. Di halaman Sketch, klik Open Full Editor 

Gambar 103. Di Full Editor, klik kanan nama Sketch, pilih Download Sketch

Gambar 104. Ekstrak hasil download Sketch

Gambar 105. Klik 2 kali pada file bertipe ino untuk membuka software Arduino IDE

6. Di software Arduino IDE yang terbuka, hapus isi program pada Tab dengan nama ino, dan ganti dengan program di bawah ini:
  1. #include "arduino_secrets.h"
  2. #include "thingProperties.h"
  3. int p1a = 0;
  4. void setup() {
  5.   pinMode(2, OUTPUT);
  6.   Serial.begin(9600);
  7.   delay(1500);
  8.   initProperties();
  9.   ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  10.   setDebugMessageLevel(2);
  11.   ArduinoCloud.printDebugInfo();
  12. }
  13. void loop() {
  14.   ArduinoCloud.update();
  15.   p1 = analogRead(A0);
  16.   if (p1 != p1a) {
  17.     Serial.println(p1);
  18.     p1a = p1;
  19.   }
  20. }
  21. void onS1Change() {
  22.   if (s1) digitalWrite(2, LOW);
  23.   else digitalWrite(2, HIGH);
  24.   Serial.println(s1);
  25. }
  26. void onT1Change() {
  27.   Serial.println(t1);
  28. }
  29. void onS2Change() {
  30.   Serial.println(s2);
  31. }
  32. void onP2Change() {
  33.   Serial.println(p2);
  34. }
7. Berikutnya, sebelum meng-upload program tersebut ke NodeMCU, isi dulu nama Wi-Fi, password Wi-Fi dan Kode Secret Key di Tab program arduino_secrets.h, dan kode Device ID diisikan di Tab program thingProperties.h di Device_Login_Name (ini harusnya sudah terisi). Juga pastikan keempat Library yang diperlukan, telah diinstal, yaitu secara berturut-turut:
  • ArduinoIoTCloud (versi 1.8.0) 
  • Arduino_ConnectionHandler (versi 0.7.1) 
  • Arduino_DebugUtils-master
  • ArduinoMqttClient-master
8. Setelah kode yang diperlukan di Tab program semua terisi, dan library terinstal, pilih Board dan Port. Gunakan Board NodeMCU 1.0, dan Port sesuai dengan yang digunakan. Upload program, dan tunggu hingga selesai. Setelah selesai, buka Serial Monitor. Apabila muncul tulisan, Connected to Arduino IoT Cloud, ini berarti Device NodeMCU sudah online, sudah terhubung ke variabel di Cloud. 

Gambar 106. Setelah program terupload, buka Serial Monitor, apabila muncul tulisan Connected to Arduino IoT Cloud, ini berarti NodeMCU sudah online, sudah terhubung ke variabel di Cloud

9. Langkah berikutnya adalah, membuka tampilan Dashboard, dan Google Sheet. Putar potensio, maka seharusnya Google Sheet dan juga widget Value, menampilkan perubahan nilai Potensio.

Gambar 107. Tampilan Dashboard dan Google Sheet ketika Potensio diubah nilainya

10. Sampai di sini pembuatan pemantauan data Arduino IoT Cloud dengan Webhook dan Google Sheet, dan bagaimana perubahan data yang ditampilkan di Google Sheet, bisa dilakukan dari Dashboard dan juga dari Hardware. Untuk file program NodeMCU dan Library yang digunakan di bagian ini, silahkan bisa diunduh di bawah, di bagian File Download.

11. Untuk lebih jelas mengenai pembuatan pemantauan data Arduino IoT Cloud di Google Sheet dengan bantuan Webhook, dapat dilihat pada video berikut ini:

Video pembuatan pemantauan data Arduino IoT Cloud dengan Webhook dan Google Sheet

Catatan: Dalam contoh di sini, kita hanya menerapkan Webhook untuk menampilkan data di Google Sheet. Padahal banyak software-software aplikasi di internet menyediakan link Webhook. Jadi betapa menariknya "mainan" kita ini (Arduino IoT Cloud), yang dapat dihubungkan ke software-software tersebut dengan hanya menempelkan link Webhooknya saja. Oya, untuk saat ini (saat blog ini ditulis), link Webhook yang diijinkan terhubung dengan Arduino IoT Cloud masih dibatasi, hanya ada 7 yaitu:
  1. maker.ifttt.com
  2. www.googleapis.com
  3. script.google.com
  4. hooks.zapier.com
  5. cloudfunctions.net
  6. in.treasuredata.com
  7. webhook.site
Dalam waktu ke depan, saya yakin pasti ada penambahan link webhook di atas. Untuk saat ini, mari kita manfaatkan dulu semaksimal mungkin ketujuh link webhook di atas. Sub bagian ketiga nanti akan dibahas mengenai penggunaan link Webhook IFTTT untuk memperbanyak kontrol, dengan cara menghubungkan variabel Arduino IoT Cloud ke MQTT Adafruit IO dengan bantuan webhook IFTTT. 


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


2. Kontrol 2x8 Relay dengan Alexa

Ketika badan, tangan dan kaki sudah "mager" (malas gerak), maka satu hal yang masih bisa kita lakukan adalah bersuara. Sangat menyenangkan sekali apabila semua tugas kita bisa selesai dengan hanya bersuara. Tidak butuh banyak tenaga, kita bisa duduk atau tiduran, dan kontrol bisa dilakukan dengan posisi apapun. Untuk itu, mengapa tidak mencoba kontrol dengan suara Alexa. Dengan kontrol Alexa ini, seperti layaknya kita memiliki pembantu yang bisa kita suruh-suruh seenaknya, dan gratis, wow keren. Yuk kita buat, kita ikuti langkah-langkah berikut ini:

Catatan: Kontrol 2x8 Relay dengan Alexa ini sama seperti Kontrol 2x8 Relay yang ada di materi bagian ke-4 (Semakin Banyak Kontrol). Hanya bedanya, kalau di Kontrol 2x8 Relay menggunakan tipe variable bool atau Boolean untuk kedelapan variabel a s/d h, sedangkan di Kontrol 2x8 Relay dengan Alexa ini, tipe variabelnya diganti menjadi CloudLight, Alexa Compatible. Seperti terlihat pada tabel berikut ini: 

Thing: Alexa1

Nama

Tipe Variable

Permission

Update Policy

a

CloudLight (Alexa Compatible | Light)

Read & Write

On Change

b

CloudLight (Alexa Compatible | Light)

Read & Write

On Change

c

CloudLight (Alexa Compatible | Light)

Read & Write

On Change

d

CloudLight (Alexa Compatible | Light)

Read & Write

On Change

out1

String (Basic | Character String)

Read & Write

On Change

Thing: Alexa2

Nama

Tipe Variable

Permission

Update Policy

e

CloudLight (Alexa Compatible | Light)

Read & Write

On Change

f

CloudLight (Alexa Compatible | Light)

Read & Write

On Change

g

CloudLight (Alexa Compatible | Light)

Read & Write

On Change

h

CloudLight (Alexa Compatible | Light)

Read & Write

On Change

out2

String (Basic | Character String)

Read & Write

On Change


Oya, sebelum melanjutkan ke langkah-langkah pembuatan, ada yang bertanya, apakah bisa membuat 2x4 Relay? Jawabnya, bisa sekali, dan malah lebih mudah, karena tidak perlu membuat sinkronisasi variabel, sehingga tidak perlu ada variabel String out1 dan out2. Cukup variabel a s/d d untuk Thing yang pertama. Kemudian untuk Thing yang kedua, duplikasi saja variabel a s/d d di Thing pertama, namun tentunya, kode Device ID dan Secret Key-nya harus beda, jadi harus memilih Device yang berbeda dengan Thing pertama. Apabila Device-nya sama, maka nanti ketika dijalankan, ada kemungkinan keduanya malah tidak bisa Online. Jadi harus satu Device atau satu NodeMCU untuk satu Thing. Apabila rekan-rekan masih bingung dengan jawaban saya ini, silahkan menuliskan di komentar, saya akan menjawab pertanyaan dengan lebih detil.

Baik, berikut ini langkah-langkah pembuatannya:
1. Buat akun yang baru di Arduino IoT Cloud, atau bisa juga menggunakan akun yang sudah terdaftar. Hanya saja karena aplikasi yang akan dibuat ini menggunakan 2 Thing, maka Thing yang sudah dibuat sebelumnya terpaksa harus dihapus (1 akun dengan fitur gratis hanya boleh membuat 2 Thing).

2. Buat 2 buah Thing, beri nama Thing pertama: Alexa1, dan nama Thing kedua: Alexa2. Kemudian buat kedua Thing tersebut masing-masing memiliki 5 buah variabel dengan nama, tipe, ijin akses dan update policy seperti tabel pada catatan di atas.

Gambar 108. Ganti tipe variabel bool menjadi CloudLight (Alexa compatible) untuk variabel a s/d h 

Gambar 109. Hasil penambahan 5 variabel di Thing Alexa1 sesuai tabel

Gambar 110. Hasil penambahan 5 variabel di Thing Alexa2 sesuai tabel

3. Agar kedua Thing memiliki data kontrol yang sama, buat String out1 di Thing Alexa1 sinkron dengan String out2 di Thing Alexa2, dengan cara, meng-klik tombol titik 3x, pilih Edit, kemudian di jendela yang muncul, di bawah nama variabel, klik tombol Sync with other Things, centang pada variabel out1 dan out2, kemudian tekan tombol Synchronize Variables.

4. Berikutnya, pilih Device untuk masing-masing Thing. Jangan lupa untuk menyimpan kode Device ID dan Secret Key untuk kedua device tersebut (gunakan download the pdf). Tidak perlu mengisi Network di kedua Thing, karena Sketch nantinya akan di-download dari Web Editor dan kemudian di-upload menggunakan software Arduino IDE. 

5. Berikutnya, klik pada Tab Sketch, tekan tombol Open Full Editor, untuk membuka Web Editor. Di halaman Web Editor, download Sketch Alexa1, dan Sketch Alexa2. Setelah kedua Sketch tersebut terdownload, ekstrak file. Di Sketch Alexa1, klik 2 kali pada file program ino. Setelah software Arduino IDE terbuka, di Tab program ino, hapus seluruh isinya, dan ganti dengan program berikut ini:

Catatan: program NodeMCU untuk Kontrol 2x8 Relay dengan Alexa di sini, isinya sama dengan program NodeMCU untuk Kontrol 2x8 Relay, yang ada di bagian keempat (Lebih Banyak Kontrol). Semuanya sama, yang berbeda hanyalah tipe variabel yang digunakan. Untuk kontrol Alexa, tipe variabelnya harus dipilih yang kategori Alexa Compatible.  
    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" || out1 == "V" || out1 == "v") {
    32.     digitalWrite(D1, LOW);
    33.     a = true;
    34.   }
    35.   if (out1 == "A0" || out1 == "a0" || out1 == "X" || out1 == "x") {
    36.     digitalWrite(D1, HIGH);
    37.     a = false;
    38.   }
    39.   if (out1 == "B1" || out1 == "b1" || out1 == "V" || out1 == "v") {
    40.     digitalWrite(D2, LOW);
    41.     b = true;
    42.   }
    43.   if (out1 == "B0" || out1 == "b0" || out1 == "X" || out1 == "x") {
    44.     digitalWrite(D2, HIGH);
    45.     b = false;
    46.   }
    47.   if (out1 == "C1" || out1 == "c1" || out1 == "V" || out1 == "v") {
    48.     digitalWrite(D3, LOW);
    49.     c = true;
    50.   }
    51.   if (out1 == "C0" || out1 == "c0" || out1 == "X" || out1 == "x") {
    52.     digitalWrite(D3, HIGH);
    53.     c = false;
    54.   }
    55.   if (out1 == "D1" || out1 == "d1" || out1 == "V" || out1 == "v") {
    56.     digitalWrite(D4, LOW);
    57.     d = true;
    58.   }
    59.   if (out1 == "D0" || out1 == "d0" || out1 == "X" || out1 == "x") {
    60.     digitalWrite(D4, HIGH);
    61.     d = false;
    62.   }
    63.   if (out1 == "E1" || out1 == "e1" || out1 == "V" || out1 == "v") digitalWrite(D5, LOW);
    64.   if (out1 == "E0" || out1 == "e0" || out1 == "X" || out1 == "x") digitalWrite(D5, HIGH);
    65.   if (out1 == "F1" || out1 == "f1" || out1 == "V" || out1 == "v") digitalWrite(D6, LOW);
    66.   if (out1 == "F0" || out1 == "f0" || out1 == "X" || out1 == "x") digitalWrite(D6, HIGH);
    67.   if (out1 == "G1" || out1 == "g1" || out1 == "V" || out1 == "v") digitalWrite(D7, LOW);
    68.   if (out1 == "G0" || out1 == "g0" || out1 == "X" || out1 == "x") digitalWrite(D7, HIGH);
    69.   if (out1 == "H1" || out1 == "h1" || out1 == "V" || out1 == "v") digitalWrite(D8, LOW);
    70.   if (out1 == "H0" || out1 == "h0" || out1 == "X" || out1 == "x") digitalWrite(D8, HIGH);
    71. }
    72. void onAChange() {
    73.   if (a) {
    74.     digitalWrite(D1, LOW);
    75.     out1 = "A1";
    76.   } else {
    77.     digitalWrite(D1, HIGH);
    78.     out1 = "A0";
    79.   }
    80. }
    81. void onBChange() {
    82.   if (b) {
    83.     digitalWrite(D2, LOW);
    84.     out1 = "B1";
    85.   } else {
    86.     digitalWrite(D2, HIGH);
    87.     out1 = "B0";
    88.   }
    89. }
    90. void onCChange() {
    91.   if (c) {
    92.     digitalWrite(D3, LOW);
    93.     out1 = "C1";
    94.   } else {
    95.     digitalWrite(D3, HIGH);
    96.     out1 = "C0";
    97.   }
    98. }
    99. void onDChange() {
    100.   if (d) {
    101.     digitalWrite(D4, LOW);
    102.     out1 = "D1";
    103.   } else {
    104.     digitalWrite(D4, HIGH);
    105.     out1 = "D0";
    106.   }
    107. }
6. Berikutnya, di Tab arduino_secrets.h, isi nama Wi-Fi, password Wi-Fi dan kode Secret Key untuk Thing Alexa1.

7. Berikutnya, sebelum meng-upload Sketch Alexa1 di atas ke NodeMCU, pilih menu Tools, pilih Manage Libraries. Di Library Manager, pastikan 4 buah library berikut ini sudah terinstal:
  • ArduinoIoTCloud (versi 1.8.0)
  • Arduino_ConnectionHandler (versi 0.7.1) 
  • Arduino_DebugUtils-master
  • ArduinoMqttClient-master
8. Setelah keempat library tersebut terinstal, 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 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 di Thing Alexa1, menjadi Online.

9. Berikutnya, ulangi hal yang sama untuk Sketch Alexa2. Ekstrak file Alexa2, buka folder, kemudian klik 2 kali pada file program ino. Setelah software Arduino IDE terbuka, di Tab program 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 onOut2Change() {
  31.   if (out2 == "A1" || out2 == "a1" || out2 == "V" || out2 == "v") digitalWrite(D1, LOW);
  32.   if (out2 == "A0" || out2 == "a0" || out2 == "X" || out2 == "x") digitalWrite(D1, HIGH);
  33.   if (out2 == "B1" || out2 == "b1" || out2 == "V" || out2 == "v") digitalWrite(D2, LOW);
  34.   if (out2 == "B0" || out2 == "b0" || out2 == "X" || out2 == "x") digitalWrite(D2, HIGH);
  35.   if (out2 == "C1" || out2 == "c1" || out2 == "V" || out2 == "v") digitalWrite(D3, LOW);
  36.   if (out2 == "C0" || out2 == "c0" || out2 == "X" || out2 == "x") digitalWrite(D3, HIGH);
  37.   if (out2 == "D1" || out2 == "d1" || out2 == "V" || out2 == "v") digitalWrite(D4, LOW);
  38.   if (out2 == "D0" || out2 == "d0" || out2 == "X" || out2 == "x") digitalWrite(D4, HIGH);
  39.   if (out2 == "E1" || out2 == "e1" || out2 == "V" || out2 == "v") {
  40.     digitalWrite(D5, LOW);
  41.     e = true;
  42.   }
  43.   if (out2 == "E0" || out2 == "e0" || out2 == "X" || out2 == "x") {
  44.     digitalWrite(D5, HIGH);
  45.     e = false;
  46.   }
  47.   if (out2 == "F1" || out2 == "f1" || out2 == "V" || out2 == "v") {
  48.     digitalWrite(D6, LOW);
  49.     f = true;
  50.   }
  51.   if (out2 == "F0" || out2 == "f0" || out2 == "X" || out2 == "x") {
  52.     digitalWrite(D6, HIGH);
  53.     f = false;
  54.   }
  55.   if (out2 == "G1" || out2 == "g1" || out2 == "V" || out2 == "v") {
  56.     digitalWrite(D7, LOW);
  57.     g = true;
  58.   }
  59.   if (out2 == "G0" || out2 == "g0" || out2 == "X" || out2 == "x") {
  60.     digitalWrite(D7, HIGH);
  61.     g = false;
  62.   }
  63.   if (out2 == "H1" || out2 == "h1" || out2 == "V" || out2 == "v") {
  64.     digitalWrite(D8, LOW);
  65.     h = true;
  66.   }
  67.   if (out2 == "H0" || out2 == "h0" || out2 == "X" || out2 == "x") {
  68.     digitalWrite(D8, HIGH);
  69.     h = false;
  70.   }
  71. }
  72. void onEChange() {
  73.   if (e) {
  74.     digitalWrite(D5, LOW);
  75.     out2 = "E1";
  76.   } else {
  77.     digitalWrite(D5, HIGH);
  78.     out2 = "E0";
  79.   }
  80. }
  81. void onFChange() {
  82.   if (f) {
  83.     digitalWrite(D6, LOW);
  84.     out2 = "F1";
  85.   } else {
  86.     digitalWrite(D6, HIGH);
  87.     out2 = "F0";
  88.   }
  89. }
  90. void onGChange() {
  91.   if (g) {
  92.     digitalWrite(D7, LOW);
  93.     out2 = "G1";
  94.   } else {
  95.     digitalWrite(D7, HIGH);
  96.     out2 = "G0";
  97.   }
  98. }
  99. void onHChange() {
  100.   if (h) {
  101.     digitalWrite(D8, LOW);
  102.     out2 = "H1";
  103.   } else {
  104.     digitalWrite(D8, HIGH);
  105.     out2 = "H0";
  106.   }
  107. }
10. Berikutnya, di Tab arduino_secrets.h, isi nama Wi-Fi, password Wi-Fi dan kode Secret Key untuk Thing Alexa2.

11. Berikutnya, hubungkan NodeMCU kedua ke port USB Komputer, kemudian atur Board dan Port di menu Tools. Setelah pengaturan Board dan Port sudah benar, upload Sketch tersebut ke NodeMCU kedua. 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 di Thing Alexa2, menjadi Online.

12. 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 Alexa.

13. Berikutnya klik tombol Add, pilih Tab Things, pilih Alexa1, dan kemudian tekan tombol Create Widgets, maka secara otomatis muncul sebuah widget Messenger untuk variabel String out1, dan 4 buah Switch untuk variabel CloudLight a, b, c dan d. 

14. Ulangi hal yang sama untuk Thing Alexa2, maka secara otomatis muncul sebuah widget Messenger untuk variabel String out2, dan 4 buah Switch untuk variabel CloudLight e, f, g dan h. 

Gambar 111. Dashboard Alexa dengan 10 widget: 8 widget Switch dan 2 widget Messenger sinkron

15. Berikutnya buka HP, instal aplikasi Alexa dari Google PlayStore. Setelah terinstal di HP, ikuti langkah-langkah pada serangkaian gambar berikut ini.

Gambar 112. Buka Alexa, klik More, klik Skills & Games

Gambar 113. Ketik Arduino di kolom pencarian, pilih Arduino, klik Settings

Gambar 114. Klik Enable to Use untuk mengaktifkan Device

Catatan: apabila sebelumnya telah terhubung dengan akun di Arduino IoT Cloud, maka di halaman Settings akan muncul tulisan Account Linking: Linked seperti terlihat pada gambar di atas. Untuk mengganti akun yang terhubung tersebut dengan akun yang baru, klik tombol Back, klik tombol Disable Skill, klik Disable, maka akun yang lama akan terputus. Untuk menghubungkan ke akun yang baru, klik Settings kembali, dan klik Enable to Use.

Gambar 115. Akan muncul halaman Sign In untuk memasukkan nama dan password akun yang terdaftar di Arduino IoT Cloud. Setelah sign in berhasil, Alexa akan mencari Device Arduino IoT Cloud

Gambar 116. Setelah beberapa saat, Alexa akan menemukan Device. Nama Device ini akan sama dengan nama variable. Berikutnya lakukan Set Up Device dari Device a s/d h

Gambar 117. Untuk pertanyaan Where is your light? pilih Skip, karena penerapan sinkronisasi untuk memperbanyak widget, menghasilkan delay update, sehingga kontrol secara grup tidak dimungkinkan 

Gambar 118. Set Up untuk Device c, d dan e selesai.

Gambar 119. Set Up untuk Device f, g dan h selesai.

Gambar 120. Setelah semua Device selesai di-Set Up, klik tanda + pada Favorites, dan pilih Device untuk menampilkan Device-device tersebut di kolom Favorites

16. Untuk lebih jelas mengenai pembuatan Kontrol 2x8 Relay dengan Alexa, dapat dilihat pada video berikut ini:

Video pembuatan Kontrol 2x8 Relay dengan Alexa

17. Sampai di sini pembuatan Kontrol 2x8 Relay dengan AlexaUntuk file program NodeMCU dan Library yang digunakan di bagian ini, silahkan bisa diunduh di bawah, di bagian File Download.


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


Catatan: Sambungan untuk Modul Relay 1 Channel

Gambar berikut ini menunjukkan gambar skematik rangkaian Modul Relay 1 Channel ESP-01. 

Gambar 121. Skematik rangkaian Modul Relay 1 Channel (sumber: www.instructables.com)

Dari gambar skematik di atas, diketahui bahwa untuk menghidup/matikan Relay, kaki GPIO.0 harus terhubung dengan kaki output NodeMCU, dan juga kaki VCC dan GND Modul Relay 1 Channel harus mendapat sumber tegangan, yang bisa diperoleh dari kaki VU (tegangan output USB) dan Ground (G) di NodeMCU. Lebih jelasnya, lihat gambar pengawatan berikut ini:

Gambar 122. Sambungan NodeMCU ke Modul Relay 1 Channel ESP-01



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


File Download:

  1. File download untuk Webhook & Google Sheet: Webhook
  2. File download untuk kontrol dengan Alexa: kontrolAlexa

No comments:

Post a Comment