Sunday, January 15, 2023

1. Arduino IoT Cloud & NodeMCU

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.

Berawal dari keinginan rekan saya, yang ingin membuat kontrol untuk menghidup-matikan motor pompa pada waktu tertentu secara terjadwal (untuk menyiram tanaman), yang waktunya dapat diatur secara mudah dari HP atau dari halaman Web, maka saya mulai mencari solusi di internet. Setelah mencari sekian lama di internet, saya menemukan aplikasi yang menarik, yang dapat menjawab keinginan rekan saya tersebut, yaitu aplikasi yang bernama Arduino IoT Cloud, di mana salah satu fitur widget yang disediakan memiliki fungsi untuk penjadwalan (scheduler). Yang lebih menarik lagi, ternyata Arduino IoT Cloud ini dapat terhubung dengan NodeMCU, yang juga sering disebut sebagai ESP8266, yang menurut saya adalah hardware "paling murah sedunia" 👍👍👍 karena harganya yang murah, bahkan lebih murah daripada Arduino, namun kemampuannya lebih baik, bahkan bisa terhubung dengan Wi-Fi.

Berpikir siapa tahu ada yang ingin membuat hal yang sama, maka saya membuat tulisan pembuatan alat kontrol terjadwal ini, yang saya buat menjadi 5 bagian, dengan rincian sebagai berikut:
  1. Pembuatan Koneksi NodeMCU ke Arduino IoT Cloud
  2. Pembuatan Kontrol ON/OFF Terjadwal
  3. Pembuatan Kontrol ON/OFF Terjadwal untuk 4 buah Relay
  4. Pembuatan Kontrol ON/OFF Terjadwal untuk 2x8 buah Relay
  5. Pembuatan Kontrol yang lebih banyak lagi
Ternyata seiring dengan berjalannya waktu, dari membaca postingan-postingan yang ada di grup Facebook, saya memperoleh banyak inspirasi (terimakasih sekali buat rekan-rekan saya di grup Facebook). Inspirasinya adalah, bagaimana Arduino IoT Cloud ini dapat dihubungkan dengan perangkat-perangkat yang ada di sekitar kita. Untuk itulah saya menambahkan tulisan di blog ini dengan aplikasi Arduino IoT Cloud. Sampai saat ini, berikut ini aplikasi sederhana yang sudah saya buat dengan Arduino IoT Cloud:

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


1. Pembuatan Koneksi NodeMCU ke Arduino IoT Cloud.

Berikut ini langkah-langkah menghubungkan NodeMCU dengan Arduino IoT Cloud:
1. Pertama klik link berikut ini: https://cloud.arduino.cc untuk membuka halaman Arduino Cloud.

Gambar 1. Halaman awal Arduino Cloud

2. Tekan tombol Get Started, maka akan terbuka halaman Sign In. Buat akun yang baru dengan meng-klik Create one.

Gambar 2. Halaman Sign In, buat akun yang baru dengan Create One

3. Muncul halaman isian Sign Up, isi kolom tanggal lahir, kemudian tekan tombol Next.

Gambar 3. Isikan data tanggal lahir untuk Sign Up

4. Berikutnya isi email, nama pengguna dan password. Jangan lupa centang pilihan "I have read the Privacy Policy and accept the Terms of Service". Kemudian klik tombol Sign Up.

Gambar 4. Isi email, nama dan password, serta centang pilihan I have read ...

5. Ketika tombol Sign Up ditekan, maka halaman pembuatan IoT Cloud terbuka. Di Cloud apps, ada 2 pilihan, IoT Cloud dan Web Editor. Web Editor digunakan untuk memprogram hardware (contoh: NodeMCU, ESP32, dll.) melalui Web, sedangkan IoT Cloud digunakan untuk mengatur widget yang akan ditampilkan di Dashboard, dan menghubungkannya dengan hardware. Untuk itu pilih IoT Cloud.

Gambar 5. Pilih IoT Cloud

6. Sesuai dengan namanya, IoT = Internet of Things, maka hal pertama yang harus dibuat adalah "Thing". Dijelaskan bahwa Thing adalah sebuah alat yang terhubung ke Cloud, yang dapat berinteraksi dengan Thing yang lain dan juga dengan alat yang riil.

Gambar 6. Klik tombol Create Thing 

7. Sebelum melanjutkan pembuatan Thing, lakukan konfirmasi dulu di email untuk menyelesaikan pendaftaran akun. Buka email dari auth@arduino.cc. Klik pada tombol Confirm Now.

Gambar 7. Selesaikan pendaftaran akun dengan menekan tombol Confirm Now

8. Kembali ke pembuatan "Thing", setelah tombol Create Thing ditekan, maka akan terbuka halaman Thing. Silahkan mengganti nama Untitled dengan nama yang lain. Ada 3 Tab di samping nama Untitled, yaitu Setup, Sketch dan Metadata. Di Tab Setup ada 3 bagian yang penting yang harus diisi, yaitu Cloud Variables, Associated Device dan Network, yang ketiganya berkaitan dengan nama Thing dan koneksinya dengan hardware dan Wi-Fi. Di Tab Sketch akan muncul draft kode program untuk hardware, yang dibangkitkan secara otomatis, yang isinya berkaitan dengan isian di ketiga bagian di Tab Setup. Di Tab Metadata, ada Tag dan Timezone. Tag ini seperti label yang dapat dikenakan pada Thing yang dibuat, yang digunakan untuk menata Thing berdasarkan kategori tertentu. Sedangkan Timezone diperlukan untuk pengaturan daerah waktu.  

Gambar 8. Halaman pembuatan Thing

9. Klik tombol Add Variable di Cloud Variables, di Tab Setup. Di jendela yang muncul, isi Name = saklar, Variable Type = Boolean, Variable Permission = Read & Write, Variable Update Policy = On change. Klik tombol Add Variable, di bagian bawah jendela.

Gambar 9. Buat variable dengan meng-klik Add Variable 

10. Setelah variable dibuat, langkah berikutnya adalah menghubungkan variable tersebut dengan hardware. Untuk itu klik tombol Select Device di Associated Device. Maka muncul jendela Associated Device, klik pada Set Up New Device. 

Gambar 10. Klik Select Device, di jendela Associated Device, pilih Set Up New Device

11. Muncul jendela Setup Device. Karena menggunakan hardware NodeMCU, maka pilih Set up a 3rd Party device.

Gambar 11. Di Setup Device, pilih Set up a 3rd Party device

12. Di jendela Select device type, pilih ESP8266, pilih Model: NodeMCU 1.0 (ESP-12E Module).

Gambar 12. Pilih ESP8266, pilih model NodeMCU 1.0 (ESP-12E Module)

13. Berikutnya, beri nama hardware, silahkan memberi nama bebas, atau biarkan saja namanya seperti itu, kemudian klik Next. 

Gambar 13. Beri nama hardware, klik Next

14. Berikutnya, di halaman Device ID dan Secret Key, rekan-rekan harus menyimpan kode Secret Key ini, karena kode Secret Key ini tidak dapat dimunculkan lagi begitu jendela ini ditutup. Supaya aman, silahkan rekan-rekan meng-klik download the PDF, agar kedua data tersebut disimpan dalam bentuk PDF. Device ID dan Secret Key ini nantinya diperlukan untuk memprogram hardware. Berikutnya centang pada tulisan I saved my device ID and Secret Key, dan klik tombol Continue.

Gambar 14. Download the PDF agar Device ID dan Secret Key tersimpan

15. Setelah tombol Continue di-klik, muncul pesan bahwa setup device sudah selesai.

Gambar 15. Muncul pesan setup device telah selesai

16. Berikut ini tampilan file pdf yang di-download, yang berisi Device ID dan Secret Key. Catatan: apabila Secret Key ini tidak tersimpan, rekan-rekan terpaksa harus membuat setup device kembali dari awal, dengan cara meng-klik tombol Change di bagian Associated Device, dan ulangi langkah no.10 -15 di atas.

Gambar 16. File PDF yang berisi Device ID dan Secret Key

17. Di Tab Setup, di bagian Associated Device, muncul nama hardware, ID, dan Type serta Status-nya. Status Offline berarti hardware tersebut belum terhubung dengan Cloud. Berikutnya klik tombol Configure di bagian Network.

Gambar 17. Muncul Nama hardware, Device ID dan Type hardware di Associated Device 

18. Ketika tombol Configure di-klik, muncul jendela Configure network. Isi nama Wi-Fi dan password dengan nama dan password hotspot Wi-Fi. Isi Secret Key dengan Secret Key dari langkah no. 14. 

Gambar 18. Isian pada jendela Configure network: nama dan password Wi-Fi serta Secret Key

19. Isian ketiga bagian di Tab Setup telah selesai. Berikutnya, perhatikan di Tab Sketch muncul angka 1 dalam lingkaran merah, yang menandakan bahwa ada sebuah variabel yang dibangkitkan di Sketch.

Gambar 19. Muncul angka 1 di Tab Sketch yang menandakan ada sebuah variabel dibangkitkan 

20. Klik Tab Sketch, maka terlihat draft program yang dibangkitkan untuk hardware NodeMCU. Di tengah halaman program, muncul informasi: untuk mengupload Sketch ini menggunakan Create Agent melalui port USB. Untuk itu hubungkan USB NodeMCU ke port USB komputer. Kemudian instal Create Agent dengan cara meng-klik Learn More.

Gambar 20. Tab Sketch berisi draft program yang dibangkitkan berdasarkan isian di Tab Setup. 
Klik Learn More untuk menginstal Create Agent.

21. Muncul jendela yang menanyakan apakah Create Agent sudah muncul di system tray (di taskbar di pojok kanan bagian bawah layar). Karena Create Agent belum terinstal, klik pada tulisan download untuk mengunduh Create Agent. 

Gambar 21. Download Create Agent untuk meng-upload Sketch ke hardware NodeMCU

22. Create Agent ini sama dengan Arduino Cloud Agent. Apabila di langkah sebelumnya rekan-rekan sudah mendownload Arduino Cloud Agent, maka tidak perlu lagi menginstal Create Agent.

Gambar 22. Cloud Agent sama dengan Create Agent yaitu untuk mengupload program ke NodeMCU

23. Apabila Create Agent atau Cloud Agent sudah terinstal, maka seharusnya di system tray, yang berada di pojok kanan bawah, ada icon Create Agent, yang menampilkan simbol Arduino. Apabila icon Create Agent belum ada, munculkan icon tersebut dengan membuka Start Menu, klik pada Arduino Create Agent dari daftar menu.

Gambar 23. Buka Arduino Create Agent untuk memunculkan icon Create Agent di system tray

24. Setelah icon Create Agent muncul di system tray, berikutnya kembali ke halaman Tab Sketch. Agar bisa lebih leluasa melakukan pengaturan pada program, klik pada Open Full Editor. 

Gambar 24. Di halaman Tab Sketch, klik Open Full Editor untuk membuka Web Editor

25. Halaman Full Editor atau Web Editor akan terbuka. Di halaman Editor ini, rekan-rekan dapat mengedit program, mengupload program tersebut ke hardware melalui port USB (dengan bantuan Create Agent) dan juga menampilkan data yang diterima maupun dikirimkan melalu komunikasi serial di kotak Monitor (sama seperti Serial Monitor di software Arduino IDE).

Gambar 25. Web Editor untuk mengedit, mengupload program dan memonitor hasilnya

26. Diinginkan dalam program untuk hardware NodeMCU ini, setiap kali variabel saklar yang ada di Dashboard Arduino IoT di-ON-kan, maka LED Built-in di kaki GPIO2 NodeMCU dapat menyala, sebaliknya setiap kali variable saklar di-OFF-kan, maka LED Built-in tersebut padam. Untuk itu, di Tab program utama (Untitled...ino), tambahkan baris program yang diberi warna kuning berikut ini pada draft program. Agar rekan-rekan lebih mudah menemukan baris programnya, instruksi berupa komentar sengaja dihapus.
  1. #include "thingProperties.h"
  2. void setup() {
  3.   pinMode(2, OUTPUT);
  4.   Serial.begin(9600);
  5.   delay(1500);
  6.   initProperties();
  7.   ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  8.   setDebugMessageLevel(2);
  9.   ArduinoCloud.printDebugInfo();
  10. }
  11. void loop() {
  12.   ArduinoCloud.update();
  13.   if (saklar) digitalWrite(2, LOW);
  14.   else digitalWrite(2, HIGH);
  15. }
  16. void onSaklarChange() {
  17. }

CatatanUntuk baris no. 13-14, instruksi if else tersebut bisa juga ditempatkan di dalam void onSaklarChange(). Baik ditempatkan di void loop() atau di void onSaklarChange(), keduanya akan menghasilkan hal yang sama.

27. Setelah menambahkan kode program di atas, berikutnya adalah meng-upload kode program tersebut ke hardware NodeMCU. Untuk itu, pada kolom pilihan Board, klik tombol drop down di kanan, klik pada Select Other Board & Port.

Gambar 26. Klik tombol drop down, klik pada Select Other Board & Port

28. Pada jendela Select Other Board & Port, pilih Board = NodeMCU 1.0 (ESP-12E Module), dan pilih Port COM sesuai dengan yang digunakan NodeMCU. Apabila rekan-rekan tidak mengetahui nama Port yang digunakan, buka Device Manager, pilih Ports (COM&LPT), pilih COM dengan nama USB Serial CH340 (atau nama lain sesuai dengan IC konverter USB ke TTL yang digunakan). Klik OK.

Gambar 27. Pilih Board = NodeMCU 1.0 (ESP-12E Module) dan Port = COM yang digunakan

29. Setelah Board dan Port dipilih, dan program juga selesai dibuat, maka langkah berikutnya adalah upload program tersebut ke hardware NodeMCU. Untuk itu klik tombol Upload bergambar tanda panah. Sebelum menekan tombol Upload, pastikan icon Arduino Create Agent muncul di system tray.

Gambar 28. Upload program ke NodeMCU, pastikan icon Create Agent muncul

30. Apabila upload berhasil, maka akan muncul pesan: Success: Saved ... and done uploading ...

Gambar 29. Upload program ke NodeMCU berhasil, muncul pesan: Success ...

31. Setelah upload berhasil, tekan tombol Go To IoT Cloud, maka Tab Setup di halaman pembuatan Things akan terbuka. Perhatikan Status Device, seharusnya apabila upload program berhasil, Status Device menjadi Online. ... Ternyata Status Device masih Offline 😞.

Gambar 30. Setelah upload program dengan Editor Ardino online, ternyata Status Device masih Offline

32. Oya, kabar gembira, ... akhirnya saya berhasil membuat Status Device menjadi Online, ketika uploadnya menggunakan software Arduino IDE di komputer, baik untuk software Arduino yang versi 2.x.x maupun yang versi 1.8.x. Saya masih belum tahu apa penyebabnya, kita tunggu saja, siapa tahu dalam waktu dekat nanti, upload dengan Web Editor sudah bisa membuat Device khususnya NodeMCU bisa menjadi Online. Berikut ini langkah-langkah upload menggunakan software Arduino IDE. Buka Web Editor, klik kanan pada Sketch, pilih Download Sketch.

Gambar 31. Download Sketch dari Web Editor 

33. Setelah Sketch terdownload, ekstrak file Sketch tersebut, tempatkan di dalam folder Arduino di Documents, dan klik 2 kali pada file dengan ekstensi INO untuk membuka software IDE Arduino. Setelah file Sketch terbuka, pilih menu Tools, pilih Manage Libraries.

Gambar 32(a). Pilih menu Tools, pilih Manage Libraries (Arduino versi 2.0.3)

Gambar 32(b). Pilih menu Tools, pilih Manage Libraries (Arduino versi 1.8.19)

34. Di Library Manager, cari dan instal 4 buah Library berikut ini:
  1. ArduinoIoTCloud (versi 1.8.0) 
  2. Arduino_ConnectionHandler (versi 0.7.1) 
  3. Arduino_DebugUtils-master
  4. ArduinoMqttClient-master
Gambar 33(a). Menginstal libary yang diperlukan di Library Manager (Arduino versi 2.0.3)

Gambar 33(b). Menginstal libary yang diperlukan di Library Manager (Arduino versi 1.8.19)

35. Setelah keempat library tersebut berhasil diinstal, berikutnya, sebelum meng-upload Sketch tersebut ke NodeMCU, isi dulu ssid dan password Wi-Fi serta Secret Key di Tab arduino_secret,h. Rekan-rekan dapat meng-copy Secret Key di Web Editor, di Tab Secret, di kolom Secret Device Key.

Gambar 34. Isi ssid dan pasword Wi-Fi, serta Secret Key di Tab arduino_secrets.h

36. Atur Board (=NodeMCU 1.0) dan Port (seusai COM yang digunakan) di menu Tools. Upload Sketch ke NodeMCU. Apabila upload gagal, ada kemungkinan karena pemakaian port Serial secara bersamaan, untuk itu, "quit" icon Create Agent di system tray. 

Gambar 35(a). Upload Sketch ke NodeMCU (Arduino 2.0.3) - apabila gagal, quit Create Agent

Gambar 35(b). Upload Sketch ke NodeMCU (Arduino 1.8.19) - apabila gagal, quit Create Agent

37. Setelah upload selesai, silahkan rekan-rekan buka Tab Setup di halaman Things. Perhatikan Status Device di Associated Device, ... seharusnya Status Device = Online. Apabila masih Offline, silahkan reset NodeMCU dan tunggu beberapa saat.

Gambar 36. Status Device seharusnya Online

38. Apabila rekan-rekan ingin mengetahui apakah NodeMCU terkoneksi ke Cloud, rekan-rekan dapat membuka Web Editor. Pilih Monitor. Apabila Monitor tidak bisa ditampilkan (error), munculkan kembali icon Create Agent dengan membukanya di Start Menu. Setelah icon Create Agent muncul di system tray, pilih kembali pilihan Board dan Port, hingga tidak ada garis silang di pilihan Board, kemudian klik Monitor, harusnya kotak Monitor bisa menampilkan data. Perhatikan data tersebut, apabila ada tulisan "Connected to Arduino IoT Cloud", maka NodeMCU telah berhasil terhubung ke Cloud Arduino. Horeee!!! (Oya saya lupa ... rekan-rekan juga dapat menggunakan Serial Monitor di software Arduino IDE sebagai ganti kotak Monitor di Web Editor Arduino online).

Gambar 37. Kotak Monitor menampilkan informasi bahwa NodeMCU terhubung ke Arduino IoT Cloud

39. Selain di Tab Setup di halaman Things, status Device juga dapat dilihat di halaman Devices, di kolom Status. 

Gambar 38. Halaman Devices juga menunjukkan status dari Device

40. Berikutnya, setelah status Device Online, alias terhubung ke Cloud, maka langkah berikutnya adalah menampilkan data variable dari Device tersebut di Dashboard. Untuk itu buka halaman Dashboard. 

Gambar 39. Buka halaman Dashboard

41. Di halaman Dashboard, ada 2 cara untuk menambahkan tampilan variable, yaitu dengan Widgets atau dengan Things. Mulai dari cara pertama. Klik tombol Add, dan di Tab Widgets, klik pada Switch.

Gambar 40. Klik tombol Add, di Tab Widgets pilih Switch

42. Muncul jendela Widget Settings Switch, klik pada tombol Link Variable.

Gambar 41. Di jendela Widget Settings Switch, klik tombol Link Variable

43. Muncul jendela Link Variable to Switch, klik atau pilih variable yang sesuai di kolom Variables, kemudian tekan tombol Link Variable. 

Gambar 42. Di jendela Link Variable, pilih Variable, dan klik tombol Link Variable

44. Muncul kembali jendela Switch, tampak di bawah Linked Variable, muncul nama variable saklar. Ini berarti widget switch telah terhubung dengan variable saklar.

Gambar 43. Widget Switch telah terhubung dengan variable saklar

45. Selain dengan mengambil widget di Tab Widgets, cara lain untuk menambahkan tampilan variable adalah dengan menciptakan widget dari Tab Things. Tekan tombol Add, klik pada Tab Things. Di Tab Things, muncul daftar nama Things. Karena baru membuat satu, maka hanya muncul satu nama, klik pada nama Things tersebut.

Gambar 44. Pilih Tab Things, klik pada nama Things

46. Maka muncul daftar variable yang terkait dengan Things yang dipilih tersebut. Dalam contoh di sini, muncul variable dengan nama saklar. Pilih variable tersebut, dan klik tombol Create Widgets.

Gambar 45. Pilih variable dalam daftar, dan tekan tombol Create Widgets

47. Maka secara otomatis akan muncul widget yang sesuai dengan tipe dari variable tersebut. Dalam contoh di sini, secara otomatis akan muncul widget Switch, yang cocok dengan tipe variable saklar, yaitu bertipe Boolean dan bisa di-Read/Write. 

Gambar 46. Ketika tombol Create widgets ditekan, secara otomatis muncul widget switch

48. Setelah membuat tampilan variabel atau widget di Dashboard, maka bagian pertama ini selesai. Tekan tombol bergambar mata (view) Dashboard. 

Gambar 47. Tekan tombol bergambar mata, maka Dashboard menampilkan data Device 

49. Pastikan Status Device masih Online. Seharusnya setiap kali saklar di Dashboard di-ON-kan, LED Built-in di NodeMCU akan menyala, dan sebaliknya ketika saklar di-OFF-kan, maka LED Built-in di NodeMCU menjadi padam. 
Gambar 48(a). Saklar di Dashboard menghidupkan LED Built-in NodeMCU

Gambar 48(b). Saklar di Dashboard mematikan LED Built-in NodeMCU

50. Tidak hanya dari Dashboard di komputer, rekan-rekan juga bisa mengendalikan LED Built-in NodeMCU tersebut dari Dashboard di Handphone. Unduh aplikasi Arduino IoT Cloud Remote dari Google Play Store, instal dan buka aplikasi tersebut dengan memasukkan akun (email dan password) yang digunakan sebelumnya, maka akan terlihat tampilan yang sama dengan tampilan Dashboard di komputer. ON-OFF kan saklar di Dashboard di HP, maka LED Built-in NodeMCU seharusnya mengikuti kondisi saklar tersebut.

Gambar 49(a). Saklar di Dashboard HP menghidupkan LED Built-in NodeMCU

Gambar 49(b). Saklar di Dashboard HP mematikan LED Built-in NodeMCU

51. Agar lebih jelas mengenai pembuatan koneksi NodeMCU ke Arduino IoT Cloud ini, silahkan rekan-rekan dapat melihat video berikut ini.

Video pembuatan koneksi NodeMCU ke Arduino IoT Cloud

52. Sampai di sini pembahasan mengenai koneksi NodeMCU ke Arduino IoT Cloud. Pembahasan berikutnya, di bagian kedua, akan dijelaskan bagaimana membuat kontrol ON-OFF secara terjadwal. Untuk file program NodeMCU dan Library yang digunakan di sini, silahkan bisa diunduh di bawah ini.

File download: koneksi