Belajar IoT - Menyalakan dan Mematikan Lampu Via Internet Menggunakan AgnosThings dan ESP8266

Toni Haryanto 4 Februari 2019

Belajar IoT - Menyalakan dan Mematikan Lampu Via Internet Menggunakan AgnosThings dan ESP8266
Tutorial ini mungkin sudah kadaluwarsa, karena service AgnosThings sudah shutdown. Teknis program boleh jadi masih dapat digunakan, meskipun belum dites ulang.

Internet of Things kian marak. Perangkat IoT yang murah meriah dan canggih sudah banyak dan akan terus bermunculan. Berbagai layanan platform IoT pun semakin berkembang dan saling berkompetisi. Ekosistem yang semakin meluas ini berdampak pada membludaknya jumlah penggiat IoT untuk membuat berbagai kreasi. Vision Mobile dalam salah satu reportnya menyebutkan bahwa pada hingga penghujung tahun 2015 ada sekitar 4,5 juta individu developer aktif di seluruh dunia yang mengembangkan perangkat IoT.

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:

  1. 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 NodeMCUAdafruit 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.
Image
  1. Relay module

Modul ini berfungsi sebagai sakelar digital untuk lampu yang on-offnya akan kita kendalikan menggunakan ESP8266 board.

Image
  1. Breadboard
  2. Kabel jumper
  3. 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

Selain perangkat-perangkat di atas, Kamu akan memerlukan Wifi Access Point yang terhubung ke internet. Access Point ini yang nantinya akan digunakan oleh ESP8266 untuk terkoneksi ke internet. Kamu bisa menggunakan jaringan Wifi rumah kalo punya, sekolah, kantor atau melalui tethering hotspot dari smartphone atau wireless router. Selain itu, Kamu juga bakal memerlukan beberapa alat seperti obeng dan gunting.

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.

  1. 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.
  2. 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:

Image

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.

Image

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 AgnosThings yang 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'.

Image

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.

Image

Setiap project memiliki ID dan GUID yang akan digunakan pada API.

Image

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 Postman untuk 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.

Image

Kamu dapat mengecek data yang sudah masuk pada halaman Raw Data dan Chart.

Image

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.

Image

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.

Image

Pada menu Tools > Board:, pilih WeMos D1 R2 & mini. Set CPU Frequency ke 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:

Image

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 kode int lamp = LED_BUILTIN; menjadi int lamp = D1;. Kemudian Upload lagi programmmu. Apakah lampu besarmu menyala dan mati sesuai harapan?? :D

Kamu 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!