Tutorial
ini mungkin sudah kadaluwarsa, karena service AgnosThings sudah
shutdown. Teknis program boleh jadi masih dapat digunakan, meskipun
belum dites ulang.
Pada tutorial ini, Saya akan menunjukkan satu kasus implementasi IoT yang dapat Kamu coba dengan tingkat kesulitan yang rendah dan budget yang ekonomis. Skenarionya adalah membuat perangkat yang dapat menyalakan dan mematikan lampu melalui komputer atau handphone yang terhubung ke internet. Kalo Kamu belum punya gambaran tentang IoT atau Internet of Things, Kamu bisa baca ulasan tentang gambaran umum IoT pada artikel Penjelasan Sederhana mengenai Internet of Things atau CodePolitan Magazine edisi Internet of Things.
Berikut adalah video demo hasil akhir dari tutorial ini:
Baiklah! Klik halaman selanjutnya untuk memulai tutorial! :D
Persiapan Perangkat dan Alat
Untuk dapat mengikuti tutorial ini, Kamu harus mempersiapkan beberapa perangkat berikut:- Wemos D1 Mini
Board ini adalah board wifi kecil berbasis ESP8266. ESP8266 dikenal sebagai modul WiFi yang handal, ekonomis dan komunitas yang besar. ESP8266 inilah yang akan menghubungkan perangkat kita dengan internet via WiFi. Ada banyak varian prototype board berbasis ESP8266, seperti NodeMCU, Adafruit HUZZAH ESP8266, ESPDuino, SparkFun ESP8266 Thing, dan Wemos. Kita sebenarnya bisa langsung memprogram ESP8266 langsung tanpa menggunakan yang breakout board. Tapi kali ini saya menggunakan Wemos D1 Mini karena board ini adalah yang paling murah dan mudah didapatkan dibanding board sejenisnya. Selain itu board ini sudah dilengkapi dengan onboard microUSB dan Serial driver sehingga tidak perlu lagi USB to TTL atau FTDI adapter. Cocok untuk belajar.
Board Wemos D1 Mini
- Relay module
Modul relay
- Breadboard
- Kabel jumper
- Set lampu
Rangkaian lampu lengkap dengan dudukan lampu, kabel dan stekernya. Perhatikan bahwa bagian tengah dari salah satu line kabelnya kita putus untuk nantinya dihubungkan ke relay.
Rangkaian lampu. Potong salah satu jalur kabelnya untuk nanti dihubungkan ke relay
Install Hardware Package ESP8266
ESP8266 dapat diprogram dengan Arduino IDE. Untuk itu kita akan menginstal terlebih dahulu hardware package untuk ESP8266 pada Arduino IDE. Ada dua jalan untuk itu, yakni melalui board manager pada Arduino IDE, atau mengunduh source code atau git clone dari repo Github. Saya asumsikan Kamu sudah menginstal Arduino IDE di komputermu. Dan untuk menggunakan ESP8266 disarankan untuk menggunakan Arduino IDE v1.6.7 ke atas. Kalo Kamu belum menginstal Arduino IDE, unduh terlebih dahulu installernya di sini lalu jalankan untuk menginstal di komputermu. Setelah itu ikuti salah satu langkah di bawah ini untuk menginstal hardware package untuk ESP8266.- Via Board Manager
- Jalankan Arduino IDE
- Pilih menu File > Preferences
- Pada kolom "Additional Boards Manager URLs", isikan tautan berikut:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Kalo kolom Boards Manager sudah ada isinya sebelumnya, pisahkan dengan koma. - Pilih menu Tools > Board: > Boards Manager..., akan muncul jendela Boards Manager. Pilih "esp8266 by ESP8266 Community" lalu klik tombol install di sebelah kanan bawahnya.
- Via Git
- Masuk ke folder Sketchbook location untuk Arduino IDE. Lokasi Sketchbook location dapat dilihat pada menu File > Preferences, pada jendela Preferences bagian atas.
- Buat folder hardware/esp8266com/ lalu masuk ke dalam folder tersebut.
- Di dalam folder hardware/esp8266com/ clone repository ESP8266 dengan perintah berikut:
git clone --depth=1 https://github.com/esp8266/Arduino.git esp8266
- Unduh binary tools untuk ESP8266. (Untuk tahap ini kita akan menjalankan script python, maka komputermu harus terisntall python 2.7 ke atas). Masuk ke folder esp8266/tools/ lalu jalankan perintah berikut:
python get.py
- Restart Arduino IDE
Merangkai Alat
Rangkai semua perangkat menjadi seperti bagan berikut:Hubungkan 5V pada Wemos ke VCC relay, GND ke GND dan pin D1 ke pin input signal pada relay.
Perhatian: karena kita bermain dengan listrik AC bertegangan tinggi, maka pastikan Kamu memasang kabel ke steker dan dudukan lampu dengan rapi, dan masukkan kedua ujung kabel ke relay dengan rapi agar tidak tersentuh saat arus tertutup.
Hubungkan kabel listrik ke port C dan NO. Pastikan serabut kabel masuk dengan rapi agar aman dan tidak tersentuh.
Pada umumnya ada 3 port pada relay, yang diberi simbol C, NC dan NO. C singkatan dari Common Connection, NC singkatan dari Normally Closed dan NO singkatan dari Normally Opened. Jadi bila kita menghubungkan kedua ujung kabel ke C dan NC, maka rangkaian listrik akan tertutup pada awalnya, dan bila dihubungkan ke C dan NO, maka rangkaian listrik akan terbuka. Kita akan gunakan C dan NO agar lampu tidak menyala saat pertama kali listrik dihubungkan.
Membuat Project di AgnosThings
Sebenarnya ESP8266 dapat berlaku sebagai Access Point, sehingga perangkat lain seperti komputer dan smartphone dapat terhubung langsung ke ESP8266 dan mengirimkan sinyal perintah tertentu. Namun bila skenarionya demikian, maka kita hanya bisa mengontrol ESP8266 dalam jarak yang terbatas. Pada tutorial kali ini kita akan memanfaatkan salahsatu platform IoT yakni AgnosThingsyang akan kita gunakan untuk menyimpan nilai untuk mengindikasikan lampu menyala dan mati. Nantinya perangkat Wemos kita akan kita hubungkan ke internet dan mengambil nilai dari server AgnosThings untuk menentukan apakah lampu harus menyala atau mati.Pertama-tama mauk terlebih dahulu ke website AgnosThings di http://agnosthings.com kemudian registrasi. Setelah proses registrasi selesai, login dengan akun yang sudah Kamu buat melalui halaman login. Kamu akan diarahkan ke halaman dashboard AgnosThings.
Sekarang kita akan membuat project di AgnosThings. Project yang kita buat akan menyimpan data yang kita simpan untuk kebutuhan proyek IoT kita. Pilih menu untuk membuat Project/Channel baru. Kamu akan diarahkan ke halaman form untuk membuat project. Isi setiap field form seperti pada gambar di bawah ini. Bagian paling penting adalah kolom Field(s). Kolom ini berisi field apa saja yang akan disimpan datanya. Karena tutorial kita hanya memerlukan pengecekan satu nilai saja --lampu menyala atau mati, maka kita hanya akan mengisi kolom ini dengan satu field bernama 'switch'.
Form untuk membuat project baru di AgnosThings
Daftar project/channel dapat diakses melalui menu Channel List. Setiap project/channel akan memiliki setidaknya tiga halaman fitur yang bisa diamati: Info, Raw Data dan Chart. Halaman Info berisi informasi seputar project kita beserta daftar API yang dapat kita gunakan untuk menyimpan dan mengambil data dari server. Halaman Raw Data menampilkan tabel berisi data yang sudah tersimpan di server. Halaman Chart menampilkan grafik data yang sudah tersimpan di server dari mulai data pertama hingga data terakhir yang masuk.
Setiap project memiliki ID dan GUID yang akan digunakan pada API.
Pada halaman Info, ditampilkan beberapa data project
Coba masuk ke halaman Info dan perhatikan bagian Channel API. Salin URL API yang berlabel 'Sending data to channel' dan panggil pada browser lain. Atau Kamu dapat menggunakan aplikasi seperti Postmanuntuk memanggil API tersebut. Kamu dapat mengganti tag {value} pada URL API dengan nilai yang ingin disimpan. Karena kita hanya akan menyalakan dan mematikan lampu, maka kita hanya perlu menyimpan nilai 0 dan 1.
Contoh pemanggilan API menggunakan aplikasi Postman
Kamu dapat mengecek data yang sudah masuk pada halaman Raw Data dan Chart.
Kamu juga dapat memanggil data yang sudah tersimpan dengan menggunakan URL API yang ada di bawah label 'Getting data back from channel' pada halaman Info. Kamu dapat mencoba berbagai API yang tersedia dan melihat hasilnya.
Contoh pemanggilan data dari AgnosThings. Data dikembalikan dalam format JSON
Menuliskan Kode
Kita sudah mendapatkan API untuk mengambil data dari server AgnosThings. Sekarang kita akan gunakan pada program ESP8266.Buka Arduino IDE dan hubungkan board Wemos D1 Mini ke komputer menggunakan kabel MicroUSB.
Pada menu Tools > Board:, pilih WeMos D1 R2 & mini.SetCPU Frequencyke 80MHz. Pilih Flash Size ke 4M (1M SPIFFS). Pilih Upload Speed ke 115200. Terakhir set Port ke port USB dimana WeMos terhubung.
Setelah itu tuliskan kode program berikut:
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
ESP8266WiFiMulti WiFiMulti;
void setup()
{
Serial.begin(115200);
// set Wifi SSID dan passwordnya
WiFiMulti.addAP("SSID", "Password");
}
void loop()
{
// tunggu koneksi Wifi
if((WiFiMulti.run() == WL_CONNECTED))
{
HTTPClient http;
// ganti dengan URL API Last Feed punyamu sendiri
http.begin("http://agnosthings.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/field/last/feed/xx/switch");
// mulai koneksi dan ambil HTTP Header
int httpCode = http.GET();
// httpCode akan bernilai negatif bila error
if(httpCode > 0)
{
// cetak httpCode ke Serial
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
// bila nilai dari server diterima
if(httpCode == HTTP_CODE_OK)
{
// cetak string json dari server
String json = http.getString();
Serial.println(json);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
// tutup koneksi HTTP
http.end();
}
delay(5000);
}
Penjelasan program:
Kita menggunakan dua library milik ESP8266, yakni ESP8266WiFiMulti untuk terkoneksi dengan jaringan WiFi, dan ESP8266HTTPClient untuk mengakses halaman HTTP. Pada fungi setup(), set parameter addApp() dengan SSID dan password jaringan WiFi yang ingin digunakan untuk terhubung ke Internet. Pada fungsi loop(), set parameter fungsi http.begin() dengan URL API project AgnosThings Kamu. API yang digunakan adalah API untuk mengambil data terakhir (last feed). Apabila koneksi berhasil dan server mengirimkan respon, respon server akan kita ambil dengan fungsi http.getString(). Value dari respon ini adalah string json dari value terakhir. Di akhir program, kita memanggil fungsi delay(5000) agar program mengulang memanggil API setelah jeda 5 detik. Kamu dapat mengeset waktu tunggu ini lebih cepat atau lebih lambat tergantung kebutuhan nantinya.
Upload kode program Kamu kemudian setelah proses upload selesai, buka jendela Serial Monitor melalui menu Tools > Serial Monitor. Bila programmu benar, mestinya WeMos akan mencetak data seperti pada gambar berikut:
Sembari program jalan dan terus mengecek API setiap 5 detik, coba Kamu perbaharui valuenya menggunakan API untuk mengirim data. Ubah value switch dari 1 menjadi 0, kemudian update lagi menjadi 1, dan mestinya data terakhir yang diterima oleh program kita pun berubah sesuai dengan data terakhir yang sudah kita update ke server.
Menyalakan dan Mematikan Lampu
Kita sudah bisa memanggil data switch kita dari server AgnosThings. Sampai sini kita masih belum bisa menyalakan dan mematikan lampu. Kita hanya perlu menambahkan pengecekan value jsonnya. Bila valuenya{"value":"1","code":200}
maka kita nyalakan lampu dan bila valuenya {"value":"0","code":200}
kita matikan lampu.#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
ESP8266WiFiMulti WiFiMulti;
// set variabel pin untuk lampu
int lamp = LED_BUILTIN;
void setup()
{
Serial.begin(115200);
// set Wifi SSID dan passwordnya
WiFiMulti.addAP("SSID", "Password");
// set pin mode ke output
pinMode(lamp, OUTPUT);
}
void loop()
{
// tunggu koneksi Wifi
if((WiFiMulti.run() == WL_CONNECTED))
{
HTTPClient http;
// ganti dengan URL API Last Feed punyamu sendiri
http.begin("http://agnosthings.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/field/last/feed/xx/switch");
// mulai koneksi dan ambil HTTP Header
int httpCode = http.GET();
// httpCode akan bernilai negatif bila error
if(httpCode > 0)
{
// cetak httpCode ke Serial
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
// bila nilai dari server diterima
if(httpCode == HTTP_CODE_OK)
{
// cetak string json dari server
String json = http.getString();
Serial.println(json);
// cek value json
if(json == "{\"value\":\"1\",\"code\":200}"){
// set ke LOW untuk menyalakan
digitalWrite(lamp, LOW);
} else {
// set ke HIGH untuk mematikan
digitalWrite(lamp, HIGH);
}
}
} else {
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
// tutup koneksi HTTP
http.end();
}
delay(5000);
}
Penjelasan program:
Sebelum fungsi setup(), kita deklarasikan variable ingeger
lamp
untuk menyimpan nomor pin yang akan kita gunakan untuk menyalakan dan mematikan lampu. Saya set variabel ini dengan LED_BUILTIN
yakni nomor pin LED yang ada pada onboard ESP8266 agar kita mudah dalam
proses pengecekan. Bila program sudah berfungsi dengan baik, maka kita
bisa kemudian mengubah nilai variabel ini menjadi D1 seperti pada bagan
rangkaian pada step 4.Pada fungsi setup() kita set pin mode untuk variabel
lamp
ke mode OUTPUT
. dan pada fungsi loop(), setelah kode Serial.println(json);
, kita menambahkan kode untuk mengecek nilai json yang nantinya digunakan untuk mengeset nilai digital pin lamp
.Upload program dan tes dengan mengupdate nilai switch menggunakan API update value. Bila Kamu set value ke 1 dan LED menyala, begitu juga bila value diset ke 0 dan LED mati, berarti program Kamu selesaaaai! :D
Langkah Terakhir
Pastikan rangkaian lampu sudah terhubung dengan relay dan pin D1 pada WeMos terhubung ke pin input signal relay. Kemudian update baris kodeint lamp = LED_BUILTIN;
menjadi int lamp = D1;
. Kemudian Upload lagi programmmu. Apakah lampu besarmu menyala dan mati sesuai harapan?? :DKamu dapat bergabung dengan komunitas programmer ESP8266 di websitenya www.esp8266.com untuk berkomunikasi, berdiskusi dan mencari ide IoT lainnya menggunakan board ESP8266. ESP8266 hingga detik ini sudah dapat diprogram dengan menggunakan bahasa pemrograman C, Arduino, Lua dan MicroPython. Kedepannya kemungkinan besar perangkat ini akan menjadi perangkat yang paling banyak digunakan karena harganya yang sangat ekonomis dan juga mudah didapatkan.
Dan buat Kamu yang menyukai tantangan dalam belajar atau berkreasi. Kamu juga bisa mengikuti dua tantangan dari XL Axiata untuk membuat karya IoT, yaitu AgnosThings Savvy Home IOT Challenges dan AgnosThings Smart Power Monitoring IOT Challenges. Tentunya akan ada hadiah bagi kamu yang berhasil memenangkannya.
Semoga tutorial ini bermanfaat untuk Kamu dan mendorong Kamu untuk mencoba hal lain yang lebih menantang. Salam coders!
SOURCE
No comments:
Post a Comment