1. Arduino Uno/Nano/Mega

Daftar Isi:

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


Beberapa teman di grup Facebook menanyakan bagaimana membuat Arduino bisa terhubung dengan Internet of Things, bisa dikontrol dan dimonitor dari halaman web, atau lewat HP. Tentunya pertanyaan ini menarik untuk dijawab, karena kebanyakan dari kita memiliki Arduino.
Berangkat dari pertanyaan itu, di halaman blog ini, saya ingin menunjukkan bagaimana Arduino, baik Uno, Nano maupun Mega, dapat dihubungkan dengan layanan IoT, yaitu Adafruit IO. Sebagai perantara agar bisa terhubung dengan Adafruit IO, saya mengusulkan 2 alternatif software dan 1 hardware, yaitu software LabVIEW, Node-RED dan ESP8266. Mengapa memilih software LabVIEW dan Node-RED (walau sebenarnya ada banyak software lain yang bisa digunakan untuk menghubungkan Arduino ke Adafruit IO)? Saya memilih software LabVIEW dan Node-RED karena programnya berbentuk grafis, yang memperlihatkan aliran data secara jelas dibandingkan dengan bahasa program teks. Sedangkan ESP8266 dipilih karena biayanya yang ekonomis. 
Gambar 1 berikut ini menunjukkan bagaimana Arduino Uno/Nano/Mega dihubungkan ke Adafruit IO,  melalui LabVIEW, dan alternatifnya melalui Node-RED dan terakhir, melalui ESP8266. 
Gambar 1. Arduino Uno/Nano/Mega bisa terhubung dengan Adafruit IO melalui 3 alterantif cara: LabVIEW, Node-RED atau ESP8266

Berikut langkah-langkah menghubungkan Arduino Uno/Nano/Mega ke Adafruit IO, yang saya buat dalam 3 cara; cara pertama menggunakan software LabVIEW, cara kedua menggunakan software Node-RED, dan cara ketiga menggunakan hardware ESP8266. 

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


Cara 1: Koneksi ke Adafruit IO dengan bantuan LabVIEW

Gambaran koneksi Arduino Uno/Nano/Mega ke Adafruit IO melalui LabVIEW dapat dilihat pada diagram berikut ini:

Gambar 2. Diagram komunikasi antara  Arduino Uno/Nano/Mega dan Adafruit IO dengan bantuan LabVIEW, yang juga terhubung dengan IoT MQTT Panel 

Berikut langkah-langkahnya:
1. Siapkan komponen berikut ini. 
    • Arduino Uno/Nano/Mega
    • DHT11
    • Potensio 10k
    • LCD I2C
Catatan: Bagi rekan-rekan yang tidak memiliki komponen di atas, tidak masalah, rekan-rekan bisa menggunakan software Proteus untuk mensimulasikan aplikasi ini. Dalam contoh di sini, saya akan menunjukkan penggunaan Proteus, dilanjutkan dengan penggunaan komponen yang sebenarnya.

2. Buat salah satu rangkaian berikut ini, sesuai dengan Arduino yang digunakan, di mana kaki D2 digunakan untuk membaca DHT11, kaki A0 digunakan untuk membaca nilai analog Potensio dan kaki SDA dan SCL untuk menampilkan data di LCD I2C.
Gambar 3. Rangkaian Arduino Uno dengan DHT11, Potensio dan LCD I2C

Gambar 4. Rangkaian Arduino Nano dengan DHT11, Potensio dan LCD I2C

Gambar 5. Rangkaian Arduino Mega dengan DHT11, Potensio dan LCD I2C

3. Bagi rekan-rekan yang tidak memiliki komponen-komponen di atas, dapat menggunakan simulasi software Proteus dengan rangkaian seperti berikut:

Gambar 6. Gambar skematik rangkaian Arduino Uno/Nano untuk koneksi ke Adafruit IO (file gambar di atas dapat diunduh di bagian akhir dari tulisan ini)

Catatan: Di rangkaian Gambar 6 di atas, Arduino direpresentasikan dengan komponen ATmega328, yang merupakan mikrokontroler untuk Arduino Uno dan Arduino Nano. Untuk memudahkan pembuatan, baik Arduino Uno, Nano atau Mega, silahkan menggunakan kaki yang sama seperti gambar skematik di atas, yaitu kaki D2 untuk DHT11, kaki A0 untuk Potensio, dan kaki SDA dan SCL untuk LCD I2C.

4. Dengan rangkaian seperti di atas, berikut ini contoh kode program untuk Arduino Uno/Nano/Mega, untuk membaca suhu dan kelembaban dari sensor DHT11 dan nilai analog potensio, yang kemudian hasil pembacaannya ditampilkan di baris pertama LCD I2C, dan mengirimkannya ke Serial Monitor.

Nama file: KodeProgram_01
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3. #include "DHT.h"
  4. DHT dht(2, DHT11);
  5. LiquidCrystal_I2C lcd(0x27, 16, 2);
  6. void setup() {
  7.   Serial.begin(9600);
  8.   lcd.init();
  9.   lcd.backlight();
  10.   dht.begin();
  11.   delay(1000);
  12. }
  13. void loop() {
  14.   float hum = dht.readHumidity();
  15.   float temp = dht.readTemperature();
  16.   lcd.setCursor(0, 0);
  17.   lcd.print(temp);
  18.   lcd.setCursor(6, 0);
  19.   lcd.print(hum);
  20.   int pot = analogRead(0);
  21.   lcd.setCursor(12, 0);
  22.   if (pot < 1000) lcd.print(" ");
  23.   if (pot < 100) lcd.print(" ");
  24.   if (pot < 10) lcd.print(" ");
  25.   lcd.print(pot);
  26.   Serial.print(temp);
  27.   Serial.print(',');
  28.   Serial.print(hum);
  29.   Serial.print(',');
  30.   Serial.println(pot);
  31.   delay(1000);
  32. }
CatatanKode program di atas memerlukan library DHT_sensor_library dan LiquidCrystal_I2C. Kode program di atas dapat diunduh di bagian akhir dari tulisan ini, dengan nama file KodeProgram_01.ino. KodeProgram_01 di atas akan membaca nilai suhu dan kelembaban dari sensor DHT11 dan nilai analog dari Potensio, kemudian menampilkan ketiga nilai tersebut di baris pertama LCD I2C, dan mengirimkannya ke Serial Monitor. 

5. Berikut ini hasil dari kode program di atas, dan juga hasil simulasi menggunakan Proteus.

Gambar 7. LCD I2C menampilkan data suhu dan kelembaban sensor DHT11 serta adc potensio

Gambar 8. LCD I2C menampilkan data suhu dan kelembaban sensor DHT11 serta adc potensio 

Catatan: Untuk bisa mensimulasikan rangkaian Arduino di software Proteus, klik 2 kali komponen ATmega328, hingga membuka jendela Edit Component. Di jendela Edit Component, isi kolom Program File dengan lokasi file Hex hasil kompilasi program di software Arduino IDE. Lokasi file Hex ini akan muncul di bagian Output. Apabila di bagian Output tidak muncul keterangan lokasi file Hex, pastikan Board dan Port yang digunakan sudah sesuai, di samping itu, atur juga isian di jendela Preferences (di menu File), buat agar pilihan compilation di show verbose output during, diberi centang. Selain isian di kolom Program File, isi juga isian yang lain seperti gambar berikut ini, yaitu CLKDIV8 = Unprogrammed, CKSEL Fuses = Ext. Clock dan Clock Frequency = 16MHz. 

Gambar 9. Isian di jendela Edit Component ATmega328; Program File = lokasi file Hex, CLKDIV8 = Unprogrammed, CKSEL Fuses = Ext Clock, Clock Frequency = 16MHz

Catatan: Berikutnya, agar komponen Arduino Uno/Nano/Mega di Proteus dapat terhubung dengan software luar seperti LabVIEW, maka di komponen COMPIM, isi COM di Physical Port dengan salah satu COM dari pasangan COM. Untuk mengetahui pasangan COM, buka Device Manager, di dalam folder Ports (COM & LPT). Apabila rekan-rekan tidak memiliki pasangan COM, silahkan bisa menginstal software untuk menciptakan pasangan COM ini, yang salah satu softwarenya dapat rekan-rekan unduh secara gratis di sini: https://www.hhdsoftware.com/virtual-serial-ports

Gambar 10. Pengaturan COMPIM, isi Physical Port dengan salah satu COM dari pasangan COM, dan isi Baudrate sebesar 9600 baik untuk Physical maupun Virtual

6. Berikutnya, diinginkan agar Arduino tidak hanya membaca suhu dan kelembaban dari DHT11 serta nilai ADC Potensio dan mengirimkan data pembacaannya ke LCD I2C dan Serial Monitor, tetapi diinginkan juga Arduino dapat menerima data yang dikirimkan melalui komunikasi serial, dan menampilkan data yang diterima tersebut di baris kedua LCD I2C. Untuk itu, gunakan kode program berikut ini:

Nama file: KodeProgram_02
      1. #include <Wire.h>
      2. #include <LiquidCrystal_I2C.h>
      3. #include "DHT.h"
      4. DHT dht(2, DHT11);
      5. unsigned long skr = 0;
      6. char data[25];
      7. int n = 0;
      8. String pesan;
      9. LiquidCrystal_I2C lcd(0x27, 16, 2);
      10. void setup() {
      11.   Serial.begin(9600);
      12.   lcd.init();
      13.   lcd.backlight();
      14.   dht.begin();
      15.   delay(1000);
      16. }
      17. void loop() {
      18.   if (millis() - skr > 100) { // ganti 100 ke 10000
      19.     skr = millis();
      20.     float hum = dht.readHumidity();
      21.     float temp = dht.readTemperature();
      22.     lcd.setCursor(0, 0);
      23.     lcd.print(temp);
      24.     lcd.setCursor(6, 0);
      25.     lcd.print(hum);
      26.     int pot = analogRead(0);
      27.     lcd.setCursor(12, 0);
      28.     if (pot < 1000) lcd.print(" ");
      29.     if (pot < 100) lcd.print(" ");
      30.     if (pot < 10) lcd.print(" ");
      31.     lcd.print(pot);
      32.     Serial.print(temp);
      33.     Serial.print(',');
      34.     Serial.print(hum);
      35.     Serial.print(',');
      36.     Serial.println(pot);
      37.   }
      38. }
      39. void serialEvent() {
      40.   while (Serial.available()) {
      41.     char data0 = char(Serial.read());
      42.     if (data0 == 13) {
      43.       pesan = String(data);
      44.       pesan.trim();
      45.       lcd.setCursor(0,1);
      46.       lcd.print(pesan);
      47.       n = 0;
      48.     }
      49.     data[n] = data0;
      50.     n++;
      51.   }
      52. }
CatatanKode program di atas memerlukan library DHT_sensor_library dan LiquidCrystal_I2C. Kode program di atas dapat diunduh di bagian akhir dari tulisan ini, dengan nama file KodeProgram_02.ino. KodeProgram_02 di atas sama seperti KodeProgram_01, hanya di sini tidak hanya mengirimkan data pembacaan nilai Suhu, Kelembaban, dan Potensio ke Serial Monitor, serta menampilkan data ketiga nilai tersebut di baris pertama LCD I2C, tetapi juga menampilkan data yang diterima melalui komunikasi serial di baris kedua LCD I2C.

7. Berikutnya, buka software LabVIEW, buat program yang dapat berkomunikasi dengan Arduino, yaitu menerima data yang dikirimkan dari Arduino dan mengirimkan data ke Arduino. Untuk memudahkan rekan-rekan, silahkan mengklik kanan gambar berikut ini, pilih Save image as, klik Save untuk menyimpan snippet dalam bentuk file png tersebut di komputer.

Gambar 11. Snippet program dalam bentuk file png, untuk membuka program ini, klik kanan, pilih Save image as, simpan di komputer, kemudian drag file ini ke dalam Block Diagram LabVIEW

8. Sementara software LabVIEW masih terbuka, tekan tombol Control dan T di Keyboard untuk membuat jendela Front Panel dan Block Diagram berdampingan. Setelah itu, buka Windows Explorer, cari file png (Program-Lab-VIEW1.png), tarik file tersebut dan tempatkan di Block Diagram LabVIEW, maka di Block Diagram LabVIEW akan muncul program sesuai gambar snippet tersebut.

Gambar 12. File png (Program-Lab-VIEW1.png) di-"drag" ke Block Diagram, maka muncul program di Block Diagram LabVIEW

Catatan: Snippet atau program dalam bentuk file gambar di atas saya buat dengan LabVIEW versi 2015. Snippet tersebut hanya bisa dibuka dengan software LabVIEW versi 2015 ke atas. Bagi rekan-rekan yang menggunakan software LabVIEW versi 2015 ke bawah, silahkan bisa mengunduh file tersebut di bagian akhir dari tulisan ini. 

9. Apabila snippet Gambar 11 berhasil dibuka di LabVIEW, maka tampilannya akan seperti gambar berikut ini.

Gambar 13. Front Panel dan Block Diagram dari snippet Gambar 11

10. Agar tampilan Front Panel lebih menarik, tambahkan Decorations. Klik kanan pada Front Panel, pilih Decorations, tarik salah satu icon ke halaman Front Panel. Perbesar ukurannya hingga bisa menutupi objek-objek yang ada di Front Panel. Agar Decorations tersebut dapat ditempatkan di lapisan bawah, klik pada objek tersebut, kemudian klik tombol Reorder di Menu Bar, pilih Move To Back.

Gambar 14. Menambahkan Decorations untuk membuat tampilan Front Panel lebih menarik

11. Berikut contoh tampilan Front Panel setelah diberi tambahan Decorations. Atur juga ukuran layar Front Panel, usahakan agar seukuran dengan objek di Front Panel, karena nanti ketika dijalankan, tampilan Front Panel akan sama dengan yang terlihat sebelum dijalankan.

Gambar 15. Atur ukuran layar Front Panel sesuai dengan ukuran objek yang akan ditampilkan

12. Sebelum dijalankan, pastikan kolom Port terisi dengan memilih COM yang muncul saat tombol panah ke bawah ditekan. Apabila rekan-rekan menggunakan simulasi Proteus, silahkan menggunakan COM yang berpasangan dengan COM yang diisikan di COMPIM. Apabila rekan-rekan menggunakan hardware Arduino, silahkan menggunakan COM dari USB Arduino. Setelah kolom Port terisi, tekan tombol Run LabVIEW (tanda panah ke kanan).

Gambar 16. Isi Port dengan COM yang sesuai, kemudian jalankan LabVIEW dengan menekan tombol Run (tanda panah ke kanan)

13. Berikutnya, jalankan juga Proteus, dengan komponen ATmega328 diisi dengan lokasi file Hex hasil kompilasi KodeProgram_02.ino di atas. Geser Setpoin di LabVIEW, dan amati perubahan yang terjadi pada tampilan LCD di baris kedua di Proteus. Ketik sebuah kata di kolom Pesan di LabVIEW, dan kemudian tekan Enter, dan amati perubahan yang terjadi pada tampilan LCD di baris kedua di Proteus. Begitu juga di Proteus, geser Potensio RV1 dan juga atur nilai Suhu dan Kelembaban di Proteus, dan amati perubahan tampilan Slider Suhu dan Kelembaban, serta Gauge Potensio di LabVIEW. 

Gambar 17. Baris pertama LCD I2C menampilkan data yang dikirimkan ke LabVIEW, sedangkan baris kedua LCD I2C menampilkan data yang diterima dari LabVIEW (lihat Gambar 16)

14. Apabila komunikasi berjalan dengan baik, seharusnya semua perubahan yang dilakukan di Proteus akan dapat diamati di LabVIEW, begitu juga sebaliknya, semua perubahan yang dilakukan di LabVIEW, akan dapat diamati di Proteus.

Gambar 18. Geser Slider Setpoin dan ketik teks di kolom Pesan diikuti Enter, amati tampilan LCD I2C di baris kedua, kemudian tekan tombol up down DHT11 dan geser Potensio di Proteus, amati tampilan Suhu, Kelembaban dan Gauge Potensio di LabVIEW

15. Setelah Arduino dapat berkomunikasi dengan LabVIEW, langkah berikutnya adalah membuat LabVIEW berkomunikasi dengan Adafruit IO. Sebelum menambahkan program di LabVIEW, kita perlu membuat dulu feed atau variabel di Adafruit IO. Untuk itu buka Adafruit IO di link ini: https://io.adafruit.com, klik tombol Sign In di samping icon keranjang belanja.

Gambar 19. Buka Adafruit IO, klik Sign In

16. Klik tombol Sign Up apabila belum memiliki akun. Apabila sudah memiliki akun, isi email dan password, dan kemudian klik Sign In.

Gambar 20. Klik Sign Up apabila belum memiliki akun

17. Untuk pembuatan akun yang baru, isi isian yang diperlukan dan klik Create Account.

Gambar 21. Isi email, username dan password, klik Create Account

18. Ketika Create Account berhasil, maka akan tampil halaman profil, di mana terlihat fasilitas yang disediakan untuk versi gratis, yaitu 2 Device, 5 Group, 10 Feed, 5 Dashboard, dan 30 Data Rate.

Gambar 22. Di profil akun, terlihat status fasilitas yang disediakan

19. Klik pada Tab Feeds untuk membuka halaman Feeds. Feed di Adafruit IO ini sama seperti Variable Cloud di Arduino IoT Cloud.

Gambar 23. Klik Tab Feeds

20. Klik New Feed, isi Name = Kelembaban, klik tombol Create.

Gambar 24. Klik New Feed, isi Name = Kelembaban, klik Create

21. Klik New Feed, isi Name = Pesan, klik tombol Create.

Gambar 25. Klik New Feed, isi Name = Pesan, klik Create

22. Klik New Feed, isi Name = Potensio, klik tombol Create.

Gambar 26. Klik New Feed, isi Name = Potensio, klik Create

23. Klik New Feed, isi Name = Setpoin, klik tombol Create.

Gambar 27. Klik New Feed, isi Name = Setpoin, klik Create

24. Klik New Feed, isi Name = Suhu, klik tombol Create.

Gambar 28. Klik New Feed, isi Name = Suhu, klik Create

25. Pada daftar feed yang ditunjukkan gambar berikut ini, perhatikan Key dari setiap feed, menggunakan huruf kecil semua, walaupun Feed Name-nya menggunakan huruf besar di awal kata. Untuk pemrograman komunikasi dengan LabVIEW, nama feed yang digunakan adalah nama pada Key, bukan nama di Feed Name.

Gambar 29. Nama yang digunakan pada pemrograman komunikasi dengan LabVIEW adalah nama pada Key

26. Di samping nama Key pada Feed, hal penting yang diperlukan lagi adalah AIO Key. Untuk membuka AIO Key, silahkan klik tombol bergambar kunci, yang ditempatkan di samping New Device.

Gambar 30. AIO Key berisi Username dan Key, yang bisa dibuka dengan menekan tombol kunci

27. Setelah kelima Feed berhasil dibuat, langkah berikutnya menampilkan data Feed tersebut dalam bentuk objek di Dashboard. Untuk itu klik Tab Dashboard, kemudian klik New Dashboard, beri nama sembarang, dalam contoh di sini, Name diisi aplikasi5, kemudian klik Create.

Gambar 31. Klik Tab Dashboard, klik New Dashboard, isi Name = aplikasi5, klik Create

28. Klik tombol Seting di pojok kanan atas, pilih + Create New Block.

Gambar 32. Klik tombol Seting, pilih + Create New Block

29. Di jendela daftar pilihan Block, pilih Slider untuk Feed Setpoin, pilih Gauge untuk Feed Suhu dan Kelembaban, pilih Text untuk Feed Pesan, dan pilih Chart untuk Feed Potensio.

Gambar 33. Pilih Block Slider untuk Setpoin, Gauge untuk Suhu dan Kelembaban, Text untuk Pesan dan Chart untuk Potensio

30. Tempatkan dan susun kelima Block tersebut seperti ditunjukkan gambar berikut ini.

Gambar 34. Contoh penempatan Block untuk Feed Suhu, Potensio, Kelembaban, Setpoin dan Pesan

31. Setelah kelima feed (kelembaban, pesan, potensio, setpoin dan suhu) beserta Dashboardnya di Adafruit IO telah berhasil dibuat, maka langkah berikutnya adalah membuat program di LabVIEW agar dapat menghubungkan feed dan Dashboard di Adafruit IO itu dengan objek-objek Control dan Indikator LabVIEW. Berikut ini contoh program LabVIEW untuk mengirimkan data Setpoin dari LabVIEW ke Adafruit IO. 

Gambar 35. Contoh program LabVIEW untuk mengirimkan data ke feed Setpoin di Adafruit IO

Catatan: Pengiriman data di atas menggunakan protokol HTTP dengan metode POST, dengan tujuan pengiriman diisi URL dari link Webhook feed yang dituju. Silahkan mengganti isi URL tersebut dengan link Webhook feed Adafruit IO yang rekan-rekan buat. Untuk mendapatkan link Webhook tersebut, ikuti langkah-langkah berikut ini.

32. Untuk mendapatkan link Webhook dari feed yang dituju, dalam contoh di sini adalah feed Setpoin, buka halaman feed Setpoin, kemudian klik pada tulisan Webhooks yang berada di kolom kanan dari halaman feed tersebut.

Gambar 36. Buka halaman feed Setpoin, klik pada tulisan Webhooks

33. Muncul jendela Setpoin Webhooks. Beri centang pada opsi Show/raw webhook URLs, kemudian klik tombol +Create. Muncul jendela Create Webhook Receiver. Secara default Expire after = Never, Data rate limit (per minute) = 5. Biarkan isian default tersebut, klik tombol Create.

Gambar 37. Beri centang pada opsi Show /raw webhook URLs, dan klik tombol +Create, kemudian klik lagi tombol Create lagi, maka akan muncul link Webhook di kolom URL

34. Muncul link Webhook Setpoin di kolom URL. Klik tombol Copy untuk meng-copy link Webhook tersebut, dan tempelkan link Webhook tersebut pada input icon HTTP Post di program LabVIEW.

Gambar 38. Klik tombol Copy untuk meng-copy alamat URL dari link Webhook Setpoin

35. Untuk memudahkan rekan-rekan, silahkan klik kanan snippet berikut ini, pilih Save image as, klik Save. Setelah tersimpan, berikutnya tarik snippet dalam bentuk file png ini ke Block Diagram yang baru. Kemudian ganti URL dari link Webhook snippet ini dengan link Webhook yang teman-teman copy sesuai Gambar 38 di atas.

Gambar 39. Snippet program LabVIEW untuk mengirimkan data Setpoin dari LabVIEW ke Adafruit IO, jangan lupa untuk mengganti alamat URL link Webhook dengan link Webhook yang sesuai

36. Apabila snippet di atas berhasil dibuka di LabVIEW, maka tampilannya seperti gambar berikut ini. Jalankan LabVIEW dengan menekan tombol Run, dan amati nilai feed Setpoin di Adafruit IO. Geser slider Setpoin di LabVIEW, dan perhatikan bahwa nilai feed Setpoin di Adafruit IO juga berubah.

Gambar 40. Geser slider Setpoin di LabVIEW, maka seharusnya nilai feed Setpoin di Adafruit IO juga berubah

37. Setelah program LabVIEW untuk mengirimkan data ke Adafruit IO berhasil dibuat, langkah berikutnya adalah membuat program LabVIEW yang dapat mengambil data feed Setpoin dari Dashboard Adafruit IO untuk ditampilkan nilainya di LabVIEW. Pengambilan data ini menggunakan protokol HTTP dengan metode GET. Berikut ini program LabVIEWnya:

Gambar 41. Contoh program LabVIEW untuk mengambil data feed Setpoin dari Adafruit IO untuk ditampilkan di LabVIEW

Catatan: Pengambilan data di atas menggunakan protokol HTTP dengan metode GET, dengan alamat URL pengambilan diisi dari URL API feed yang dituju. Silahkan mengganti isi URL tersebut dengan URL API dari feed Adafruit IO yang rekan-rekan buat. Untuk mendapatkan URL API tersebut, ikuti langkah-langkah berikut ini.

38. Buka halaman feed Setpoin di Adafruit IO. Di kolom kanan di halaman feed Setpoin, klik pada tulisan Feed Info. Di jendela yang muncul, URL API dari feed Setpoin terlihat di samping tulisan API. Salin URL API tersebut, tempelkan di program LabVIEW, dan tambahkan tulisan /data di akhir URL API agar bisa menampilkan data dari feed Setpoin. 

Gambar 42. Klik pada Feed Info untuk menampilkan URL API dari feed yang dituju, tambahkan tulisan /data di akhir URL API agar bisa menampilkan data feed

Catatan: Syarat agar data feed Setpoin ini bisa diakses dengan metode GET, feed Setpoin harus bersifat Public. Apabila feed Setpoin (secara default) bersifat Private, maka data feed Setpoin tidak bisa diakses. Untuk mengubah sifat feed dari Private ke Public, klik tulisan Privacy, pilih Visibility = Public, klik tombol Create, seperti ditunjukkan pada Gambar 43 berikut ini.

Gambar 43. Klik tulisan Privacy, pilih Visibility = Public, klik Create

Catatan: Setelah Feed dibuat Public, hal berikutnya yang perlu diperhatikan adalah Feed History. Secara default, Feed History ini bernilai ON. Dengan status ON ini, akan membuat data feed yang sebelumnya akan tetap disimpan. Dengan demikian ketika pengambilan data dilakukan, maka semua data akan muncul di LabVIEW, seperti terlihat pada Gambar 44 berikut ini.

Gambar 44. Ketika Feed History = ON, maka ketika pengambilan data dilakukan, semua data dari awal sampai akhir ditampilkan di LabVIEW

Catatan: Untuk membuat hanya data terakhir saja yang ditampilkan, dapat dilakukan dengan 2 cara, cara pertama adalah dengan menambahkan "/data/last" di akhir URL API, atau cara kedua adalah dengan membuat Feed History = OFF. Kecuali feed Potensio yang ditampilkan dalam bentuk grafik di Dashboard (Feed History harus ON agar bisa menampilkan grafik), maka Feed History untuk feed yang lain bisa dibuat OFF.

Gambar 45. Buat Feed History = OFF

38. Untuk memudahkan rekan-rekan, silahkan klik kanan snippet berikut ini, pilih Save image as, klik Save. Setelah tersimpan, berikutnya tarik snippet dalam bentuk file png ini ke Block Diagram yang baru. Jangan lupa mengganti URL dengan URL API yang teman-teman dapatkan dari jendela Feed Info pada feed yang dituju.


Gambar 46. Snippet program LabVIEW untuk membaca data Setpoin Adafruit IO, dan menampilkannya di LabVIEW, jangan lupa untuk mengganti URL dengan URL API yang ada di Feed Info

39. Apabila snippet di atas berhasil dibuka di LabVIEW, maka tampilannya seperti gambar berikut ini. Jalankan LabVIEW dengan menekan tombol Run. Lakukan pengubahan data feed Setpoin di Adafruit IO dengan menekan tombol Add Data, dan isi value dengan sembarang nilai, dan amati isi value di LabVIEW. Seharusnya pengubahan data di Adafruit IO juga akan membuat nilai value di LabVIEW juga berubah, mengikuti nilai yang dimasukkan di Add Data

Gambar 47. Klik Add Data, isi dengan sembarang nilai, dan perhatikan bahwa kotak value di LabVIEW juga berisi nilai yang sama dengan nilai yang dimasukkan di Add Data

40. Setelah komunikasi antara LabVIEW dengan Adafruit IO berhasil, maka langkah terakhir adalah, menggabungkan komunikasi serial antara LabVIEW dengan Arduino, dengan komunikasi antara LabVIEW dengan Adafruit IO. Untuk memudahkan rekan-rekan dalam membuat program, silahkan klik kanan snippet berikut ini, pilih Save image as, klik Save. Setelah tersimpan, berikutnya tarik snippet dalam bentuk file png ini ke Block Diagram yang baru. Jangan lupa mengganti URL Webhook dengan link Webhook yang diciptakan di setiap feed yang dituju, dan ganti pula URL API dengan URL API pada Feed Info dari feed yang dituju.

Gambar 48. Snippet program LabVIEW untuk berkomunikasi dengan Arduino melalui komunikasi serial, dan berkomunikasi dengan Adafruit IO melalui protokol HTTP, jangan lupa menganti URL Webhook dan URL API sesuai dengan feed yang dituju

40. Apabila snippet di atas berhasil dibuka di LabVIEW, maka tampilannya seperti gambar berikut ini. Jalankan LabVIEW dengan menekan tombol Run (sebelum menjalankan, pastikan Port diisi dengan COM yang sesuai). Lakukan pengubahan nilai Suhu dan Kelembaban, serta Potensio di Proteus, dan amati perubahan nilainya di LabVIEW dan di Dashboard Adafruit IO. Kemudian lakukan pengubahan nilai Slider Setpoin di LabVIEW dan ketik sembarang kata di kolom Pesan, kemudian amati perubahan nilainya di Dashboard Adafruit IO, dan tampilan di LCD I2C di Proteus. Lakukan juga pengubahan nilai Slider Setpoin dan ketik sembarang kata di kolom Pesan di Dashboard Adafruit IO, kemudian amati perubahan nilainya di LabVIEW dan tampilan di LCD I2C di Proteus.

Gambar 49. Sebelum LabVIEW dijalankan, isi Port dengan COM yang sesuai. Apabila menggunakan Proteus sebagai simulasi Arduino, isi Port dengan pasangan COM

Gambar 50. Jalankan LabVIEW dan Proteus. Ubah nilai DHT11 dan Potensio di Proteus, dan amati perubahan tampilan di LabVIEW. Ubah nilai Setpoin dan isi Pesan di LabVIEW, dan amati perubahan pada tampilan LCD I2C di Proteus, khususnya di baris kedua

Gambar 51. Buka Dashboard Adafruit IO, lakukan pengubahan Slider Setpoin dan isi Pesan di Adafruit IO, dan amati perubahan di tampilan LCD I2C di Proteus, khususnya di baris kedua

Gambar 52. Lakukan pengubahan di Setpoin dan isi Pesan di LabVIEW, dan amati perubahan pada nilai Setpoin dan isi Pesan di Adafruit IO. Lakukan sebaliknya, ubah Slider Setpoin dan isi Pesan di Adafruit IO, dan amati perubahan nilai Setpoin dan isi Pesan di LabVIEW

41. Foto berikut ini menunjukkan penerapan simulasi Proteus ke hardware yang riil. Terlihat LCD I2C yang terhubung dengan Arduino Nano dapat menampilkan data Sensor DHT11 dan Potensio di baris pertama LCD I2C dan mengirimkan datanya ke LabVIEW dan ke Dashboard Adafruit IO, serta menampilkan data yang diterima dari LabVIEW dan Adafruit IO di baris kedua LCD I2C.

Gambar 53. Penerapan simulasi Proteus ke rangkaian Arduino yang riil, terlihat tampilan LCD I2C menampilkan data yang diterima dari LabVIEW dan dari Dashboard Adafruit IO, dan juga menampilkan data yang dikirimkan ke LabVIEW dan ke Dashboard Adafruit IO

42. Hal yang menarik dari layanan Adafruit IO ini adalah, setiap feed yang dibuat di Adafruit IO dapat diakses dengan protokol HTTP dan MQTT. Dengan fitur ini, kita dapat menghubungkan rangkaian Arduino dengan IoT MQTT Panel, yang merupakan aplikasi android untuk komunikasi dengan protokol MQTT. Gambar-gambar berikut ini (beserta keterangannya) menunjukkan langkah-langkah pengaturan IoT MQTT Panel agar bisa terhubung dengan Arduino melalui LabVIEW dan Adafruit IO:
1. Di smartphone Android, instal IoT MQTT Panel dari Google Playstore.
2. Buka IoT MQTT Panel, klik pada tombol Setup a Connection.
3. Di halaman Add Connection, isi nama Connection (isi dengan nama sembarang), isi Broker web = io.adafruit.com, kemudian isi Username dan Password dengan AIO key. 
4. Klik tombol + Dashboard, isi nama Dashboard, klik tombol Save, klik tombol Create.

Gambar 54. (a) Klik Setup a Connection, (b) Isi Broker web, Username dan Password, (c) Klik tombol + Dashboard, isi nama Dashboard, klik Save, klik Create

5. Muncul nama Dashboard yang sudah kita isikan di halaman daftar Dashboard.
6. Klik 2 kali nama Dashboard tersebut, hingga terbuka halaman Panel. Klik tombol Add Panel untuk menambahkan panel (objek) tampilan data. 
7. Muncul daftar panel yang bisa ditambahkan.

  
Gambar 55. (a) Klik 2 kali nama Dashboard, (b) Terbuka halaman panel Dashbaord, klik Add Panel (c) Muncul daftar nama panel yang bisa ditambahkan

8. Pilih panel Gauge di daftar nama panel.
9. Isi nama Gauge panel = Suhu, Topic = aplikasi5/feeds/suhu (sesuaikan dengan nama feed), min = 0, max = 100, klik Create.
10. Muncul panel Suhu di halaman panel Dashboard. Klik tombol + untuk menambah panel.

Gambar 56. (a) Pilih panel Gauge, (b) Isi nama panel = Suhu, Topic = aplikasi5/feeds/suhu (sesuaikan dengan nama feed), min = 0, max = 100, klik Create (c) Di Dashboard, muncul panel Suhu

11. Ulangi pilih Gauge dari daftar nama panel, isi nama = Kelembaban, Topic = aplikasi5/feeds/kelembaban (sesuaikan dengan nama feed), min = 0, max = 100, klik Create.
12. Muncul panel Kelembaban di bawah panel Suhu. Klik tombol + untuk menambah panel.
13. Pilih panel Line Graph. Isi nama = Potensio, Topic = aplikasi5/feeds/potensio (sesuaikan dengan nama feed), klik Create.

Gambar 57. (a) Pilih panel Gauge, isi nama = Kelembaban, Topic = aplikasi5/feeds/kelembaban, min = 0, max = 100, klik Create, (b) Muncul panel Kelembaban, klik tombol + untuk menambah panel (c) Pilih panel Line Graph, isi nama = Potensio, Topic = aplikasi5/feeds/potensio, klik Create

14. Muncul panel Line Graph Potensio, klik tombol + untuk menambah panel.
15. Pilih panel Slider, isi nama = Setpoin, Topic = aplikasi5/feeds/setpoin, dan Subscribe Topic diisi sama dengan Topic, min = -1000, max = 1000, klik Create.
16. Berikutnya, klik + panel, tambahkan panel Text Input, isi nama = Pesan, Topic = aplikasi5/feeds/pesan, klik Create.

Gambar 58. (a) Muncul panel Line Graph Potensio, klik + untuk menambah panel, (b) Isi nama = Setpoin, isi Topic dan Subsribe Topic = aplikasi5/feeds/setpoin, min = -1000, max = 1000, klik Create, (c) Pilih panel Text Input, isi nama = Pesan, Topic = aplikasi5/feeds/pesan, klik Create

17. Berikutnya, tambahkan panel Text Log. Isi nama = Pesan, Topic = aplikasi5/feeds/pesan, centang Show last message only. klik Create.
18. Terlihat di halaman panel Dashboard, 6 buah panel yang terdiri dari panel Gauge Suhu, panel Gauge Kelembaban, panel Line Graph Potensio, panel Slider Setpoin, panel Text Input Pesan, panel Text Log Pesan. 
19. Terlihat data di setiap panel sudah masuk.

Gambar 59. (a) pilih Panel Text Log, isi nama = Pesan, Topic = aplikasi5/feeds/pesan, centang Show last message only, klik Create (b) Terlihat di halaman panel Dashboard, ada 6 panel, (c) Tampak beberapa panel telah menampilkan data
 
43. Foto-foto berikut ini menunjukkan bagaimana aplikasi IoT MQTT Panel dapat terhubung dengan Arduino, dengan data komunikasinya ditampilkan di LCD I2C.

Gambar 60. Panel Suhu, Kelembaban dan Potensio di IoT MQTT Panel menampilkan data sensor DHT11 dan Potensio yang terhubung dengan Arduino, sebaliknya LCD I2C di Arduino menampilkan nilai Slider Setpoin dan isi Pesan dari IoT MQTT Panel

Gambar 61. Untuk bisa menghubungkan Arduino dengan IoT MQTT Panel, diperlukan LabVIEW dan Adafruit IO, yang meneruskan data dari Arduino ke IoT MQTT Panel dan sebalinya

Gambar 62. Untuk bisa menghubungkan Arduino dengan IoT MQTT Panel, diperlukan LabVIEW dan Adafruit IO, yang meneruskan data dari Arduino ke IoT MQTT Panel dan sebalinya

44. Sampai di sini Cara pertama untuk membuat Arduino terhubung ke Adafruit IO dengan bantuan LabVIEW dengan protokol HTTP. Agar lebih jelas, berikut ini video pembuatan Cara pertama ini. 

Video pembuatan koneksi Arduino ke IoT dengan bantuan LabVIEW & Adafruit IO


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


Cara 2: Koneksi ke Adafruit IO dengan bantuan Node-RED

Apabila Cara pertama menggunakan bantuan LabVIEW, maka Cara kedua ini menggunakan bantuan Node-RED. Gambaran koneksi Arduino Uno/Nano/Mega ke Adafruit IO melalui Node-RED dapat dilihat pada diagram berikut ini:

Gambar 63. Diagram komunikasi antara Node-RED dengan Arduino Uno/Nano/Mega dan Adafruit IO yang juga terhubung dengan IoT MQTT Panel 

Catatan: Komunikasi antara Node-RED dengan Adafruit IO bisa menggunakan protokol HTTP dan MQTT. Berhubung komunikasi dengan protokol HTTP sudah dibahas di Cara pertama, yang dicontohkan dengan LabVIEW, maka di Cara kedua ini, ditunjukkan penggunaan protokol MQTT, agar menjadi lengkap (sebenarnya baik LabVIEW maupun Node-RED bisa menggunakan protokol HTTP dan MQTT).

Berikut ini langkah-langkah penerapan Cara kedua sesuai diagram Gambar 63 di atas:
1. Bagi rekan-rekan yang masih baru dengan Node-RED, maka langkah pertama yang harus dilakukan adalah download dan instal Node.js. Berikut link download Node.js: https://nodejs.org/en/download
2. Setelah Node.js terinstal, buka command prompt dan ketikkan perintah "npm install -g --unsafe-perm node-red" untuk menginstal Node-RED secara global.
3. Setelah Node-RED terinstal, buka command prompt, ketikkan "node-red" pada command prompt, tunggu hingga muncul  tulisan Started flows. Munculnya tulisan tersebut menandai bahwa Node-RED sudah berjalan.

Gambar 64. Buka command prompt, ketik node-red, tunggu hingga muncul info Started flows, menandai bahwa Node-RED berjalan

Catatan: Jangan menutup jendela command prompt ini, karena server localhost Node-RED akan berhenti apabila jendela command prompt ini ditutup.

4. Apabila Node-RED sudah berjalan, buka web browser dan ketik alamat "http://localhost:1880", maka terbuka halaman Editor Node-RED, seperti ditunjukkan pada gambar berikut ini:

Gambar 64. Tampilan halaman Editor Node-RED di web browser dan bagian-bagiannya

Berikut keterangan setiap bagian tampilan Node-RED pada Gambar 64 di atas:
  • Kolom web browser (ditandai kotak warna coklat), untuk membuka halaman Editor Node-RED.
  • Kotak palet atau wadah node (ditandai kotak warna merah), node-node tersebut bisa diambil dari palet untuk ditempatkan di kotak Flow. Apabila memerlukan tambahan node, rekan-rekan dapat menambahkan node yang baru dengan meng-instal-nya melalui manage pallete yang ada di menu.
  • Kotak flow (ditandai kotak warna oranye), yaitu halaman program untuk menempatkan node dan menghubungkannya dengan node yang lain.
  • Kotak output (ditandai kotak warna hijau), yang menampilkan informasi, keterangan, bantuan, pesan, data, layout dashboard, dll.
  • Tombol deploy (ditandai kotak warna biru), untuk memeriksa dan menjalankan program.
  • Tombol menu (ditandai kotak warna ungu), untuk membuka seting Edit, View, Arrange, Import dan Export program, konfigurasi node, menambahkan library, dll.
5. Menggunakan rangkaian Arduino seperti Gambar 6 di atas, diinginkan Node-RED dapat membaca data yang dikirimkan dari Arduino melalui komunikasi serial, dan sebaliknya Node-RED dapat juga mengirimkan data ke Arduino melalui komunikasi serial. Data yang dikirimkan Arduino adalah data Suhu, Kelembaban dan ADC Potensio, sedangkan data yang dikirimkan Node-RED adalah data Setpoin dan Pesan, yang nantinya ditampilkan di LCD I2C yang terhubung dengan Arduino. Buat kode program atau flow di Node-RED seperti gambar berikut:

Gambar 65. Flow komunikasi serial untuk kirim dan terima data antara Arduino dengan Node-RED. Rekan-rekan dapat meng-import flow di atas, yang filenya dapat diunduh di bagian akhir tulisan ini, dengan nama file SerialNodeRED.json

Keterangan flow: Agar rekan-rekan memahami maksud dari flow di atas, berikut ini keterangan fungsi masing-masing node, dimulai dari node kiri atas hingga kanan bawah:
  • Node Serial In COM12: untuk menerima data yang dikirimkan Arduino. Atur COM ini sesuai dengan yang digunakan Arduino. Untuk penggunaan simulasi Proteus, gunakan pasangan COM.
  • Node Function Pisah: untuk memisahkan data yang diterima dari Arduino. Ada 3 data yang diterima, yaitu data Suhu, Kelembaban dan ADC Potensio. Ketiga data tersebut dipisahkan dengan koma dan diakhiri dengan Enter.
  • Node UI Gauge Suhu: untuk menampilkan data Suhu dalam bentuk tampilan Gauge, jenis Level.
  • Node UI Gauge Kelembaban: untuk menampilkan data Kelembaban dalam bentuk tampilan Gauge, jenis Donut.
  • Node UI Chart Potensio: untuk menampilkan data Potensio dalam bentuk tampilan Grafik.
  • Node UI Slider Setpoin: untuk menampilkan data Setpoin dalam bentuk tampilan Slider yang bisa diubah nilainya oleh pengguna.
  • Node UI Text Input Pesan: untuk menampilkan data Pesan dalam bentuk kotak Teks yang bisa diisi oleh pengguna.
  • Node Join: untuk menandai data dari node yang berbeda agar nantinya dapat digabungkan.
  • Node Function Gabung: untuk menambahkan koma sebagai tanda pemisah di antara kedua data.
  • Node Function Filter: untuk menahan data apabila datanya sama dengan data sebelumnya, dan meneruskan data apabila datanya berbeda dengan data sebelumnya.
  • Node Serial Out COM12: untuk mengirimkan data ke Arduino. Atur COM ini sesuai dengan yang digunakan Arduino. Untuk penggunaan simulasi Proteus, gunakan pasangan COM.

6. Untuk memudahkan rekan-rekan dalam membuat flow Gambar 65 di atas, silahkan rekan-rekan unduh file bernama SerialNodeRED.json. Setelah itu, di halaman Editor Node-RED, klik pada menu di pojok kanan atas, pilih Import. 

Gambar 66. Klik pada Menu, pilih Import

7. Untuk memudahkan rekan-rekan dalam membuat flow Gambar 65 di atas, silahkan rekan-rekan unduh file bernama SerialNodeRED.json. Setelah itu, di halaman Editor Node-RED, klik pada menu di pojok kanan atas, pilih Import File. 

Gambar 67. Klik select a file to import, pilih SerialNodeRED.json, klik Open

8. Maka muncul tampilan flow seperti gambar berikut ini. Apabila rekan-rekan menemukan tulisan unknown atau missing node, maka solusinya adalah, instal node tersebut. Dalam contoh di sini, node yang belum terinstal adalah node serialport.

Gambar 68. Import flow berhasil, hanya ada node yang masih belum terinstal

9. Untuk menginstal node serialport di Node-RED, klik Menu, pilih Manage palette. Di jendela yang muncul, klik Tab Install, ketik serial pada kolom pencarian, hingga muncul daftar node terkait serialport, klik pada tombol install di samping tulisan node-red-node-serialport.

Gambar 69. Instal node serialport dengan membuka Manage pallete di Menu

10. Setelah terinstal, pastikan Port COM yang dipilih, diatur sesuai dengan yang digunakan Arduino. Apabila menggunakan Proteus, isi Port dengan pasangan COM yang digunakan di komponen COMPIM Proteus. Klik 2 kali pada node Serial In, pada jendela yang muncul, klik tombol pensil untuk mengatur seting komunikasi, pilih Port COM dari daftar, isi Split input = \n, dan add character to output message = \r, klik Update, klik Done. Ulangi hal yang sama untuk node Serial Out.

Gambar 70. Pengaturan seting komunikasi serial

11. Setelah seting node Serial In dan Serial Out selesai, klik pada tombol tanda panah ke bawah di pojok kanan, pilih Dashboard untuk membuka Dashboard layout editor.

Gambar 71. Pilih Dashboard untuk membuka editor Dashboard

12. Di Tab Layout, Tabs & Links, Home, klik pada tombol layout. Atur Width atau lebar layar, dan atur ukuran dan posisi dari kotak objek Gauge, Chart, Slider, dan Text. Klik Done setelah selesai.

Gambar 72. Klik pada layout, atur lebar layar, ukuran dan posisi kotak objek, klik Done setelah selesai

13. Setelah pengaturan layout Dashboard selesai, langkah terakhir adalah Deploy. Klik pada Modified Flows. Setelah selesai, klik tombol tanda panah ke atas untuk membuka tampilan web Dashboard Node-RED (Cara lain untuk membuka tampilan web Dashboard Node-RED adalah dengan menambahkan "/ui" pada alamat "localhost:1880" di web browser).

Gambar 73. Klik Deploy (pilih Modified Flows), setelah selesai, klik tombol link tampilan web Dashboard Node-RED

14. Jalankan Proteus, dan amati tampilan web Dashboard Node-RED. Ubah nilai Suhu dan Kelembaban DHT11 dan geser Potensio di Proteus, amati perubahannya di Dashboard Node-RED. Geser slider Setpoin dan ketik sebuah kata di kolom Pesan di Dashboard Node-RED, dan perhatikan tampilan LCD I2C di Proteus.

Gambar 74. Lakukan pengubahan di Proteus dan Dashboard Node-RED, seharusnya pengubahan nilai di Proteus akan mengakibatkan perubahan di Dashboard Node-RED, dan begitu pula sebaliknya

15. Setelah Node-RED dapat terhubung dengan Arduino melalui komunikasi serial, langkah berikutnya adalah menghubungkan Node-RED dengan Adafruit IO melalui protokol MQTT. Buat flow seperti berikut ini (rekan-rekan dapat meng-import flow berikut ini dengan mendownload file yang bernama SerialNodeREDAdafruit.json di bagian akhir tulisan ini). 

Gambar 75. Flow untuk menghubungkan Node-RED ke Arduino melalui komunikasi serial dan menghubungkan Node-RED ke Adafruit IO melalui protokol HTTP

16. Agar bisa terhubung dengan Adafruit IO, atur node MQTT In dan node MQTT Out dengan isian seperti Tabel berikut. Klik 2 kali node MQTT In dan Out satu-persatu, dan isi seperti Gambar 76 - 78.

Tab

Hal

Isian

Connection

Server

Io.adafruit.com

Port

1883

Security

Username

Adafruit IO Username

Password

Adafruit IO Key


Gambar 76. Klik 2 kali node MQTT

Gambar 77. Di Tab Connection, isi Server = io.adafruit.com, Port = 1883

Gambar 78. Di Tab Security, isi Username dan Password dengan Adafruit IO Username dan Key

17. Setelah node MQTT In dan node MQTT Out diisi sesuai dengan gambar di atas, langkah berikutnya klik Deploy (Modified Flows).

18. Berhubung Adafruit IO membatasi Data Rate = 30 data per menit untuk versi gratis, maka agar koneksi MQTT ke Adafruit IO tidak diputus, buat pengiriman data Suhu, Kelembaban dan Potensio di program Arduino dari setiap 100 milidetik menjadi setiap 10 detik, dengan mengubah KodeProgram_02.ino di baris ke-18, seperti berikut:

    if(millis()-skr>100)            ubah menjadi           if(millis()-skr>10000)

Gambar 79. Ubah KodeProgram_02.ino dari pengiriman data setiap 100 milidetik, ubah menjadi setiap 10 detik, agar koneksi MQTT ke Adafruit IO tidak diputus

19. Setelah kode program Arduino diperbaiki, jalankan Proteus, ubah nilai Suhu dan Kelembaban Sensor DHT11 dan ubah nilai Potensio, amati perubahan yang terjadi di Dashboard Node-RED dan Dashboard Adafruit IO. Berikutnya geser Slider Setpoin dan ketik kata di kotak Pesan Node-RED, dan amati perubahan yang terjadi di LCD I2C Proteus dan juga tampilan Dashboard Adafruit IO. Begitu pula di Dashboard Adafruit IO, geser Slider Setpoin dan ketik kata di kotak Pesan, dan amati perubahan yang terjadi di LCD I2C Proteus dan juga tampilan Dashboard Node-RED.

Gambar 80. Ketika Setpoin di Dashboard Adafruit IO dibuat -494 dan Pesan diisi nodered_Adafruit, membuat tampilan di baris kedua LCD I2C di Proteus menjadi -494,nodered_Ada 

Gambar 81. Ketika Setpoin di Dashboard Adafruit IO dibuat -494 dan Pesan diisi nodered_Adafruit, membuat tampilan Setpoin di Dashboard Node-RED menjadi -494 dan isi Pesan menjadi nodered_Adafruit 

Gambar 82. Ketika  nilai Potensio di Proteus dinaik-turunkan, maka tampilan Grafik Potensio di Dashboard Node-RED juga ikut berubah mengikuti nilai Potensio di Proteus

20. Foto dan gambar berikut ini menunjukkan penerapan simulasi Proteus ke hardware yang riil. Terlihat LCD I2C yang terhubung dengan Arduino Nano dapat menampilkan data Sensor DHT11 dan Potensio di baris pertama LCD I2C dan mengirimkan datanya ke Node-RED dan ke Dashboard Adafruit IO, serta menampilkan data yang diterima dari Node-RED dan Adafruit IO di baris kedua LCD I2C, dengan data Setpoin = -750 dan data Pesan = terhubung ok.

Gambar 83. Ketika Setpoin di Dashboard Node-RED dibuat -750 dan Pesan diisi terhubung ok, maka tampilan Setpoin di Dashboard Adafruit IO menjadi -750, begitu pula isi Pesan menjadi terhubung ok, begitu pula tampilan di LCD I2C menjadi -750,terhubung o

Gambar 84. Ketika Setpoin di Dashboard Node-RED dibuat -750 dan Pesan diisi terhubung ok, maka tampilan Setpoin di Dashboard Adafruit IO menjadi -750, begitu pula isi Pesan menjadi terhubung ok

21. Sampai di sini Cara kedua untuk membuat Arduino terhubung ke Adafruit IO dengan bantuan Node-RED melalui protokol MQTT. Agar lebih jelas, berikut ini video pembuatan Cara kedua ini. 

Video pembuatan koneksi Arduino ke IoT dengan bantuan Node-RED & Adafruit IO


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


Cara 3: Koneksi ke Adafruit IO dengan ESP8266

Gambaran koneksi Arduino Uno/Nano/Mega ke Adafruit IO melalui ESP8266 dapat dilihat pada diagram berikut ini:

Gambar 85. Diagram komunikasi antara  Arduino Uno/Nano/Mega dan Adafruit IO dengan bantuan ESP8266, yang juga terhubung dengan IoT MQTT Panel 

Berikut ini langkah-langkah pembuatannya:
1. Siapkan komponen berikut ini:
Catatan: Regulator 3V3 di sini diperlukan karena suplai tegangan 3,3V dari kaki 3V3 Arduino tidak cukup memadai untuk memberi suplai ke ESP8266-01. Sebagai alternatif ESP8266-01, rekan-rekan bisa menggunakan NodeMCU (ESP8266-12E). Apabila menggunakan NodeMCU, rekan-rekan tidak perlu menggunakan Regulator 3,3V.

2. Tambahkan ESP8266-01 dan Regulator 3.3V ke rangkaian Gambar 4 di atas, seperti gambar pengawatan berikut ini. Untuk Arduino Uno dan Arduino Mega, tidak digambar di sini karena pada dasarnya sama, yaitu menghubungkan Tx-Rx Arduino ke Tx-Rx ESP8266, secara bersilangan, yaitu Tx ke Rx, Rx ke Tx, dan suplai daya 3V3 dan Ground. 

Gambar 86. Penambahan ESP8266-01 dan Regulator 3V3 pada rangkaian Gambar 4

3. Sebagai alternatif, rekan-rekan bisa menggunakan NodeMCU sebagai pengganti ESP8266-01 dan Regulator 3V3, seperti gambar pengawatan berikut ini. Sebenarnya, apabila sudah menggunakan NodeMCU, tidak perlu lagi Arduino. Namun agar sesuai dengan judul di halaman ini, terpaksa kita menggunakan Arduino. Di samping itu, anggap saja bahwa Arduino di sini diperlukan untuk menyediakan kaki Input Output yang lebih banyak. Apabila hanya menggunakan NodeMCU, hanya tersedia 8 kaki IO, tetapi bila ditambah dengan Arduino Uno/Nano, bisa bertambah 20 kaki IO, lebih lagi apabila menggunakan Arduino Mega, maka bisa bertambah 70 kaki IO. Untuk penggunaan hanya NodeMCU, akan saya bahas di halaman lain.

Gambar 87. Alternatif pengganti ESP8266-01 bisa menggunakan NodeMCU (ESP8266-12E)

4. Setelah rangkaian selesai dibuat, langkah berikutnya adalah program Arduino dan ESP8266-01 (atau NodeMCU). Untuk program Arduino, silahkan menggunakan KodeProgram_02 di atas (lihat langkah no. 6 di Cara 1). Untuk program ESP8266-01 (atau NodeMCU) adalah seperti berikut:

Nama file: KodeProgram_ESP8266
  1. #include <ESP8266WiFi.h>
  2. #include "Adafruit_MQTT.h"
  3. #include "Adafruit_MQTT_Client.h"
  4. #define WLAN_SSID "FALCONJR"
  5. #define WLAN_PASS "08251027"
  6. #define AIO_SERVER "io.adafruit.com"
  7. #define AIO_SERVERPORT 1883
  8. #define AIO_USERNAME "aplikasi5"
  9. #define AIO_KEY "aio_jmsi76AKCUlCAF0LP0yuvzPaXGFV"
  10. WiFiClient client;
  11. Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
  12. Adafruit_MQTT_Publish suhu = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/suhu");
  13. Adafruit_MQTT_Publish kelembaban = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/kelembaban");
  14. Adafruit_MQTT_Publish potensio = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/potensio");
  15. Adafruit_MQTT_Subscribe setpoin = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/setpoin");
  16. Adafruit_MQTT_Subscribe pesan = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/pesan");
  17. void MQTT_connect();
  18. String inputString = "";
  19. String sp = "";
  20. String psn = "";
  21. void setup() {
  22.   Serial.begin(9600);
  23.   delay(10);
  24.   WiFi.begin(WLAN_SSID, WLAN_PASS);
  25.   while (WiFi.status() != WL_CONNECTED) {
  26.     delay(500);
  27.   }
  28.   mqtt.subscribe(&setpoin);
  29.   mqtt.subscribe(&pesan);
  30. }
  31. void loop() {
  32.   MQTT_connect();
  33.   Adafruit_MQTT_Subscribe *subscription;
  34.   while ((subscription = mqtt.readSubscription(10000))) {
  35.     if (subscription == &setpoin) {
  36.       sp = String((char *)setpoin.lastread);
  37.     }
  38.     if (subscription == &pesan) {
  39.       psn = String((char *)pesan.lastread);
  40.     }
  41.   }
  42.   Serial.print(sp);
  43.   Serial.print(",");
  44.   Serial.println(psn);
  45.   while (Serial.available()) {
  46.     char inChar = (char)Serial.read();
  47.     inputString += inChar;
  48.     if (inChar == 13) {
  49.       String d1 = getValue(inputString, ',', 0);
  50.       String d2 = getValue(inputString, ',', 1);
  51.       String d3 = getValue(inputString, ',', 2);
  52.       if (!suhu.publish(d1.c_str())) {};
  53.       if (!kelembaban.publish(d2.c_str())) {};
  54.       if (!potensio.publish(d3.c_str())) {};
  55.       inputString = "";
  56.     }
  57.   }
  58. }
  59. void MQTT_connect() {
  60.   int8_t ret;
  61.   if (mqtt.connected()) {
  62.     return;
  63.   }
  64.   uint8_t retries = 3;
  65.   while ((ret = mqtt.connect()) != 0) {
  66.     mqtt.disconnect();
  67.     delay(10000);
  68.     retries--;
  69.     if (retries == 0) {
  70.       while (1)
  71.         ;
  72.     }
  73.   }
  74. }
  75. String getValue(String data, char separator, int index) {
  76.   int found = 0;
  77.   int strIndex[] = { 0, -1 };
  78.   int maxIndex = data.length() - 1;
  79.   for (int i = 0; i <= maxIndex && found <= index; i++) {
  80.     if (data.charAt(i) == separator || i == maxIndex) {
  81.       found++;
  82.       strIndex[0] = strIndex[1] + 1;
  83.       strIndex[1] = (i == maxIndex) ? i + 1 : i;
  84.     }
  85.   }
  86.   return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
  87. }

CatatanKode program di atas memerlukan library Adafruit MQTT. Kode program di atas dapat diunduh di akhir tulisan ini, dengan nama file KodeProgram_ESP8266.ino. Jangan lupa mengganti WLAN_SSID, WLAN_PASS, AIO_USERNAME dan AIO_KEY, sesuaikan dengan yang dimiliki.

5. Upload kode program di atas ke ESP8266. Apabila rekan-rekan menggunakan USB Adapter yang seperti gambar berikut ini, maka rekan-rekan harus menambahkan sambungan antara kaki GPIO.0 dengan Ground saat Upload program. Setelah program berhasil diupload, lepas kembali sambungan tersebut. Jadi ketika upload, kaki GPIO.0 harus dalam kondisi LOW.

Gambar 88(a). ESP8266-01 dan USB Adapter tampak atas

Gambar 88(b). USB Adapter tampak bawah, dengan kaki GPIO.0 dan Ground dihubungkan

6. Setelah upload berhasil, pasangkan ESP8266-01 ke rangkaian dengan menghubungkan kaki Tx-Rx ESP8266 ke kaki Tx-Rx Arduino secara bersilangan. Hubungkan juga kaki Gnd ke Gnd Arduino. Untuk kaki 3V3 dan kaki EN (Chip_En) ESP8266, hubungkan ke output Regulator 3V3, seperti Gambar 86 di atas. Kemudian buka Dashoard Adafruit IO. Tunggu sekitar 10 detik (karena versi gratis membatasi data rate, maka update data ke Adafruit IO dibuat setiap 10 detik agar koneksi MQTT-nya tidak diputus). Apabila semua berjalan dengan baik, maka tampilannya akan seperti ini:

Gambar 89. Terlihat komunikasi Arduino Nano ke Adafruit IO dengan bantuan ESP8266-01

7. Ubah Potensio, dan amati perubahan nilai pada grafik di Adafruit IO. Geser Slider Setpoin dan ketik sebuah kata di kolom Pesan di Dashboard Adafruit IO, dan amati tampilan LCD I2C di rangkaian Arduino, seharusnya apabila komunikasi berjalan dengan baik, baik tampilan LCD I2C maupun tampilan di Dashboard Adafruit IO, keduanya akan menampilkan nilai yang sama. Rekan-rekan juga dapat menggunakan aplikasi IoT MQTT Panel di HP untuk mengubah tampilan LCD I2C dan Dashboard Adafruit IO.

8. Hal yang menarik, rekan-rekan dapat men-simulasikan Cara3 ini dengan software  Proteus. Jadi tidak masalah apabila rekan-rekan tidak memiliki hardware Arduino, DHT11, Potensio dan LCD I2C, asalkan teman-teman memiliki software Proteus, dan sebuah hardware ESP8266 dengan USB Adapter-nya, atau sebuah NodeMCU, maka teman-teman akan dapat menjalankan Cara 3 ini, seperti ditunjukkan pada gambar berikut ini.

Gambar 90. Terlihat komunikasi antara rangkaian Arduino yang disimulasikan di Proteus dengan Adafruit IO dengan bantuan ESP8266-01/NodeMCU yang terhubung ke port USB Komputer

Catatan: Agar bisa terhubung seperti Gambar 90 di atas, lakukan langkah-langkah berikut ini:
  1. Hubungkan NodeMCU atau ESP8266 dan USB Adapternya ke port USB Komputer. Upload KodeProgram_ESP8266 di atas ke NodeMCU atau ke ESP8266. Apabila menggunakan ESP8266 dengan USB Adapter, jangan lupa menghubungkan jumper GPI0.0 ke Ground untuk upload program, setelah upload program berhasil, lepas jumper agar ESP8266 bisa berjalan. 
  2. Buka Proteus, jalankan RangkaianArduino2. Namun sebelum dijalankan, isi Physical Port di COMPIM dengan COM yang digunakan ESP8266/NodeMCU (lihat di Device Manager), seperti ditunjukkan Gambar 91 berikut ini. Gunakan KodeProgram_02 untuk komponen ATmega328 (jangan lupa mengubah angka 100 menjadi 10000, agar update data tidak terlalu cepat).
  3. Buka Dashboard Adafruit IO, lakukan pengubahan di Slider Setpoin dan  ketik sebuah kata di kolom Pesan di Dashboard Adafruit IO, dan juga lakukan pengubahan nilai di DHT11 dan Potensio di Proteus, amati kedua tampilan tersebut (Dashboard Adafruit IO dan LCD I2C Proteus), seharusnya apabila komunikasi berjalan dengan baik, kedua tampilan akan menampilkan nilai yang sama.
Gambar 91. Isi Physical Port di COMPIM Proteus dengan COM yang digunakan, untuk mengetahui COM yang digunakan, buka Device Manager

9. Sampai di sini langkah-langkah pembuatan untuk Cara3 ini selesai. Agar lebih jelas, berikut ini video pembuatan Cara ketiga ini. 

Video pembuatan koneksi Arduino ke IoT dengan bantuan ESP8266 dan Adafruit IO


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


File Download


  1. File download Cara1: Cara1
  2. File download Cara2: Cara2
  3. File download Cara3: Cara3

Catatan: Bagi rekan-rekan yang belum memiliki software LabVIEW, bisa mengunduh versi 2015 di link ini: LabVIEW 2015 (Sekalipun versinya Evaluation, namun kemampuannya sama dengan yang versi Profesional, hanya saja memang waktu penggunaannya terbatas. Namun demikian, waktu penggunaan ini bisa diperpanjang, dengan cara, sebelum menjalankan LabVIEW, mundurkan dulu tanggal di komputer ke tahun 2000 misalnya, baru kemudian membuka LabVIEW, setelah halaman awal LabVIEW muncul, kembalikan waktu komputer ke waktu yang sekarang). Berikutnya agar LabVIEW bisa mengakses port Serial komputer silahkan menginstal VISA di link ini: VISA 530.

No comments:

Post a Comment