Jumat, 28 Oktober 2022

IMPLEMENTASI IoT dengan Arduino dan Thingspeak

IoT atau Internet of Things banyak digunakan untuk me-remote atau memonitor perangkat melalui internet menggunakan sebuah smartphone, laptop atau tablet. Karena transmisi data dilakukan melalui internet maka kita dapat menghubungi perangkat dimana saja dan kapan saja asal kita dan perangkat kita sama-sama terhubung dengan internet

Sekilas tentang IoT

IoT adalah sebuah teknologi transfer data melalui internet yang tidak membutuhkan IP public di sisi client. Asal terhubung internet maka perangkat kita sudah terhubung ke IoT cloud. Menggunakan ip private yang dynamic pun tidak ada masalah (jika kita menggunakan modem GPRS/3G/4G, biasanya sim card operator seluler hanya akan memberi ip tipe ini).

 

IoT dan Arduino

Teknologi IoT mendukung transmisi data (payload) yang sangat kecil. Kurang lebih sekali kirim hanya akan menghabiskan data 15 kb saja. Ini tentunya sangat cocok diterapkan pada embedded system client semacam Arduino, Raspberry, Teensy, dll yang memiliki memori yang terbatas.

Khusus untuk Arduino, sudah tersedia beberapa library yang akan memudahkan kita untuk join ke IoT network. Jika kita menggunakan pure MQTT server (public broker) semacam test.mosquitto.org atau broker.mqttdashboard.com, Kita dapat menggunakan library PubSub Client.h yang sudah tersedia di Arduino IDE secara gratis (built-in). Sudah tersedia contoh programnya sehingga kitaa dapat mencobanya sendiri. Untuk contoh sketch yang tersedia hanya untuk koneksi internet menggunakan Ethernet shield dan ESP8266 ya (ESP8266 sebagai serial to WIFI), jika Anda menggunakan modem GSM Anda harus menggunakan library yang lain.

 

IoT, Arduino dan Thingspeak

Jika kita menggunakan pure MQTT server atau disebut juga public broker, ada sedikit kelemahan, yaitu kita harus membangun server sendiri untuk menyimpan data (history/log). Karena sifat dasar dari IoT menggunakan protokol MQTT adalah data akan hilang begitu dikirim ke broker (real time data). Perangkat client harus secepat mungkin mengolah data yang datang. Nah, jika Anda ingin menyimpan data, Anda harus membangun semacam database server sendiri yang bertindak sebagai ‘subscriber’ MQTT.

MQTT merupakan sebuah protocol yang di terapkan pada IOT, protocol ini sangat mendukung untuk jaringan WAN. Karena WAN mencakup area yang luas . Protokol MQTT mempunyai kelebihan yaitu dapat bekerja dengan energy dan media penyimpanan yang minimum.

Dalam terminology IoT dengan protokol MQTT, dikenal tiga macam network element, yakni publisher (pengirim data), subscriber (penerima data) dan broker (penghubung subscriber dan publisher)

Jika kitaa tidak ingin ribet membangun infrastruktur IoT, kita dapat memanfaatkan layanan dari Thingspeak.com, yakni semacam opensource IoT server. Dengan Thingspeak kita dapat memanfaatkan semua layanan IoT secara gratis termasuk di dalamnya adalah free broker, free logging, free API (Application Programming Interface), dll.

 

Contoh Penggunaan IoT dengan Arduino dan Thingspeak

Berikut ini akan di contohkan penggunaan IoT dengan Arduino dan Thingspeak. Arduino di sini berfungsi sebagai publisher dengan Thingspeak sebagai broker dan datalog server. sebagai subscriber, Kita dapat menggunakan smartphone Android kita sendiri. Di sini smartphone akan digunakan untuk memonitor data dalam bentuk chart yang dikirim oleh Arduino client., menarik, bukan? Kita dapat melihat grafik datalogging sensor dimana saja dan kapan saja, asal smarphone Android kita memiliki kuota internet. Kurang lebih begini ilustrasi penggunaan Thingspeak untuk sistem IoT yang akan kita bangun, ‘Monitoring Sensor Arus dan Suhu menggunakan IoT

 

Untuk membangun sistem IoT di atas, setidaknya ada tiga langkah yang harus Anda siapkan, yakni:

1.      Menyiapkan sisi client (publisher), dalam hal ini adalah Arduino, agar dapat mengukur parameter lingkungan menggunakan sensor dan mengirimnya ke IoT broker/server

2.      Menyiapkan sisi IoT server, dalam hal ini adalah Thingspeak agar dapat menerima data dari Arduino (publisher), menyimpan data dan menampilkannya dalam bentuk grafik

3.      Menyiapkan sisi subscriber, dalam hal ini adalah smartphone Android agar dapat memonitor data sensor (dari Arduino) secara real time dan interaktif.

Baiklah, pelan-pelan akan di jelaskan:

A.    Menyiapkan IoT Publisher (Arduino + Sensor)
Untuk sisi publisher, kurang lebih yang harus kita siapkan adalah:

a.       Script handler untuk sensor

Script handler adalah source code dalam bahasa C yang dapat menyebabkan hardware IC mikrokontroller dalam papan Arduino dapat berinteraksi dengan sensor melalui port-port nya. Script handler ini sangat spesifik terhadap tipe sensornya. Antara sensor yang satu dengan sensor lainnya akan berbeda. Sebagai contoh, jika Anda ingin mengukur suhu maka Anda dapat memilih menggunakan sensor LM35 atau DHT11. Nah, script handler untuk kedua sensor ini sangatlah berbeda, menyesuaikan karakteristik masing-masing sensor.

 

b.       Library untuk mengirim data ke Thingspeak

Untuk mengirim data ke Thingspeak, caranya cukup mudah. Jika kita menggunakan Ethernet shield untuk mengirim data melalui internet, kita dapat menggunakan library bawaan SPI.h dan Ethernet.h. Namun saat mengirim data, kita harus menyertakan header yang berisi API dari Thingspeak (lihat point no 2 di bawah).

Berikut ini adalah contoh sketch Arduino untuk mengirim data ke IoT server menggunakan Thingspeak. Sketch di bawah akan mengirim data pembacaan tegangan analog dari pin A0 ke Thingspeak

 

#include <SPI.h>

#include <Ethernet.h>

 // mac address

byte mac[] = { 0xA1, 0x37, 0xA5, 0x11, 0xB1, 0xC3 };

 // settingan API ThingSpeak

char thingSpeakAddress[] = "api.thingspeak.com";

String writeAPIKey = "write_API_Thingspeak_Anda";

const int updateThingSpeakInterval = 30 * 1000; //update data tiap 30 detik sekali

 long lastConnectionTime = 0;

boolean lastConnected = false;

int failedCounter = 0;

 EthernetClient client; //inisialisasi arduino sbg Ethernet client

 void setup()

{

Serial.begin(9600); //inisialiasi port serial utk debugging

 startEthernet();

}

void loop()

{

// baca tegangan analog di pin A0

String analogValue0 = String(analogRead(A0), DEC);

 if (client.available())

{

char c = client.read();

Serial.print(c);

}

 // Disconnect dari ThingSpeak

if (!client.connected() && lastConnected)

{

Serial.println("...disconnected");

Serial.println();

 client.stop();

}

 // Update data ke ThingSpeak

if(!client.connected() && (millis() - lastConnectionTime > updateThingSpeakInterval))

{

updateThingSpeak("field1="+analogValue0);

}

 // Check if Arduino Ethernet needs to be restarted

if (failedCounter > 3 ) {startEthernet();}

 lastConnected = client.connected();

}

 void updateThingSpeak(String tsData)

{

if (client.connect(thingSpeakAddress, 80))

{

client.print("POST /update HTTP/1.1\n");

client.print("Host: api.thingspeak.com\n");

client.print("Connection: close\n");

client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n");

client.print("Content-Type: application/x-www-form-urlencoded\n");

client.print("Content-Length: ");

client.print(tsData.length());

client.print("\n\n");

client.print(tsData);

lastConnectionTime = millis();

if (client.connected())

{

Serial.println("Connecting to ThingSpeak...");

Serial.println();

failedCounter = 0;

}

else

{

failedCounter++;

Serial.println("Connection to ThingSpeak failed ("+String(failedCounter,    DEC)+")");

Serial.println();

}

}

else

{

failedCounter++;

Serial.println("Connection to ThingSpeak Failed ("+String(failedCounter,

DEC)+")");

Serial.println();

lastConnectionTime = millis();

}

}

void startEthernet()

{

client.stop();

Serial.println("Connecting Arduino to network...");

Serial.println();

delay(1000);

// Ckonek ke jaringan

if (Ethernet.begin(mac) == 0)

{

Serial.println("DHCP Failed, reset Arduino to try again");

Serial.println();

}

else

{

Serial.println("Arduino connected to network using DHCP");

Serial.println();

}

delay(1000);

}

Gambar rangkaian untuk sistem di atas:

 

Jika kita menggunakan Ethernet shield untuk sistem IoT, Anda harus mendesain topologi jaringan LAN Anda agar dapat terhubung ke internet.

Untuk konfigurasi jaringan di atas, kita terhubung ke internet menggunakan hub/switch dan atau router yang berlangganan internet melalui ISP (Internet Service Provider)

Ada alternatif lain, yakni dengan menggunakan sebuah router 3G/4G yang berisi sim card. Jadi koneksi internet di dapat dari tethering router 3G/4G, yang kemudian akan mengubahnya menjadi koneksi Ethernet (RJ45) ke Ethernet shield Arduino. Dengan demikan kita dapat mengatur kuota internetnya sesuai budget kita sendiri, beda dengan layanan dari ISP yang relatif lebih mahal (dan bulanan)

 

       

B. Menyiapkan IoT server (Thingspeak)

Untuk sisi IoT server menggunakan Thingspeak, kita harus menyiapkannya agar dapat menerima data dari Arduino. Berikut langkah-langkahnya:

Buka https://thingspeak.com dan daftarkan account Anda

 

Ø Membuat channel data

Isikan field yang diperlukan (satu channel maks 8 field), minimal yang harus diisikan adalah nama channel (‘Name’) dan ‘field1’ (centang opsi ‘Make Public’ jika data kita ingin dapat dilihat orang lain). Field ini nantinya akan berisi data sensor yang dikirim dari Arduino. Jika sudah, tekan tombol ‘Save Channel’

 

 

Ø Menyalin API ke sketch Arduino

Jika Channel sudah jadi, buka tab ‘Api Keys’, copy ‘Write API key’ dan salin ke sketch Arduino di atas (lihat point 1 di atas)

‘Write API Key’ digunakan untuk mengirim data, ‘Read API Key’ digunakan untuk membaca data

 

Sampai langkah di atas, kita sudah berhasil menyiapkan server IoT yang akan meng-handle pengiriman data dari Arduino. Untuk melihat tampilan grafik historical data, Anda dapat membuka tab ‘Public View’ (atau Private View

 

3. Menyiapkan IoT Subscriber (smartphone Android)

Berikut ini adalah langkah-langkah menyiapkan smartphone Android kita agar dapat memonitor data Arduino:

v Menginstal aplikasi ‘ThingsView’ di Google Play Store

Buka URL https://play.google.com/store/apps/details?id=com.cinetica_tech.thingview&hl=in atau search melalui Play Store langsung dari smartphone. Instal aplikasi tersebut

[AdSense-A]

v Mengisi ‘channel ID’ yang dibuat pada point 2 di atas

Jika aplikasi ‘ThingsView’ sudah terinstal, jalankan aplikasi tersebut dan isi Channel ID sesuai yang tertera di web Thingspeak

    

v  Menampilkan grafik dengan memilih channel tersebut

Selamat, channel data Arduino sudah didaftarkan di aplikasi ThingsView. Kini kita dapat membuka grafik pengukuran sensor langsung dari aplikasi Android kita

 

          

Demikian tutorial tentang IoT menggunakan Arduino dan Thingspeak, semoga dapat memicu kreativitas kita untuk membuat sistem-sistem IoT yang lain.

 

 


Tidak ada komentar:

Posting Komentar