# Perkenalan

Disini kamu akan dikenalkan dengan CoreX, sebuah platform yang ditujukan untuk anak bangsa agar dapat belajar mulai membuat proyek IoT dengan mudah. Dokumentasi ini dibuat dengan bahasa santai :D

{% hint style="success" %}
**Catatan Penting:** Pastikan kamu mencari informasi melalui dokumentasi ini terlebih dahulu sebelum mulai bertanya di forum ataupun mencari jawaban di Internet.&#x20;
{% endhint %}

### Apa itu CoreX?

CoreX adalah platform IoT yang diperuntukan bagi para developer untuk dapat membuat proyek IoT siap pakai dalam waktu singkat khususnya pemula **agar dapat belajar membuat proyek IoT sampai dengan mempublikasikannya** sebagai produk jadi. CoreX dapat menampilkan data sensor dan mengendalikan aktuator secara *realtime* melalui jaringan internet. Sensor apapun dan aktuator apapun dapat digunakan pada CoreX.

CoreX menyediakan pustaka untuk perangkat embedded agar kamu dapat dengan mudah membuat kode program pada berbagai framework misalnya Arduino atau Platform.io.

Dengan menggunakan CoreX, siapapun bisa membuat perangkat IoT tanpa harus bersusah payah menyiapkan infrastruktur IoT. Kamu bisa mengundang rekan tim dengan jumlah personil tak terbatas untuk bersama membuat proyek di CoreX sehingga proyek dapat dikerjakan secara kolaborasi.

Siap untuk memulai proyek IoT kamu? [Buat akun](https://corex.id/register) CoreX terlebih dahulu dan kita akan mulai membuat proyek IoT menggunakan CoreX.

### Langkah Selanjutnya

Selamat, kamu telah berhasil membuat akun CoreX, disini kamu bisa mengatur proyek dengan CoreX.

CoreX menggunakan sistem yang disebut dengan **Token**. Dimana token ini adalah saldo yang terdapat pada akun kamu. Token ini digunakan untuk **menampilkan** data dari perangkat keras IoT kamu (misalnya sensor) ataupun untuk **mengendalikan** aktuator dan *display* pada perangkat keras IoT kamu (misalnya Servo dan LCD). Semakin banyak data yang ingin kamu tampilkan, maka semakin banyak juga Token yang dibutuhkan. Begitu juga untuk mengendalikan aktuator.

Token terbagi menjadi 2 jenis.

| Jenis Token  | Penjelasan                                                                                                                                                                                                                                                                                                                                           |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Token Akun   | Token yang dimiliki oleh setiap akun di CoreX. Token ini dapat diubah menjadi Token Proyek maupun ditransfer ke akun lain. Token akun tidak dapat digunakan oleh akun lain kecuali melakukan transfer token.                                                                                                                                         |
| Token Proyek | Token yang terdapat pada setiap proyek yang dibuat. Token ini dapat diubah menjadi Token Akun dan dapat digunakan oleh seluruh akun personil tim yang terlibat pada pembuatan proyek, **Token proyek tidak bisa diubah menjadi token akun**. Token ini yang akan berkurang seiring dengan banyaknya tampilan untuk mengambil data dan mengirim data. |

Selain Token, pada CoreX juga kamu perlu mengenal istilah lain yaitu **Proyek, Halaman, Widget, Auth Project, Device ID, Bucket, Send dan Receive**.


# Proyek

Proyek adalah aplikasi yang ingin kamu buat menggunakan CoreX. Bayangkan kamu memiliki 2 (dua) klien dimana masing-masing klien ingin dibuatkan sistem yang berbeda.

> Klien A ingin dibuatkan sistem pemantau suhu di semua gudang milik perusahaannya.
>
> Klien B ingin dibuatkan sistem penyiram taman di seluruh taman yang ada di Kota Jakarta.

Maka kamu perlu membuat 2 (dua) buah proyek. Proyek pertama untuk klien A dan proyek kedua untuk klien B.

{% hint style="success" %}
**CoreX tidak membatasi jumlah proyek yang dapat dibuat. Untuk membuat proyek, Token TIDAK AKAN dikurangi.**
{% endhint %}


# Halaman

Halaman adalah segmentasi atau bisa dikatakan sebagai sub-proyek. Setiap halaman dapat menampilkan data yang beragam sesuai kebutuhan sekaligus dapat menampilkan tombol sebagai input untuk mengendalikan aktuator.

Kita ambil contoh pada klien A yang ingin dibuatkan sistem pemantau suhu di semua gudang milik perusahaannya. Ternyata klien A memiliki 10 gudang yang tersebar di seluruh Indonesia, maka kamu bisa membuat 10 halaman dimana setiap halaman akan berisi informasi mengenai suhu dari 1 (satu) gudang. Jika dibutuhkan, kamu juga bisa menampilkan data lain sesuai sensor dan aktuator yang ingin digunakan di setiap gudang nya.

{% hint style="success" %}
**Dashboard tidak membatasi jumlah halaman yang dapat dibuat. Untuk membuat halaman, Token TIDAK AKAN dikurangi.**
{% endhint %}


# Widget

Widget adalah sebuah komponen yang dapat digunakan untuk menampilkan data maupun untuk mengirim data. Satu halaman dapat berisi banyak Widget, setiap widget yang kamu buat maka akan mengurangi saldo Token Proyek sesuai dengan jumlah token yang dibutuhkan pada setiap widget.

Jika proyek kamu kekurangan token, maka kamu dapat mengubah Token Akun menjadi Token Proyek.

{% hint style="info" %}
**Hanya pemilik proyek yang dapat mengubah Token Proyek menjadi Token Akun.**
{% endhint %}


# Auth Project

Setiap proyek yang dibuat akan memililki Auth Project yang bersifat unik yang artinya setiap proyek akan memiliki Auth Project yang berbeda. Jaga baik-baik Auth Project ini karena akan digunakan untuk melakukan pengiriman dan penerimaan data.

{% hint style="danger" %}
**Jangan berikan Auth Project pada siapapun** kecuali rekan tim kamu. Seluruh data yang dikirim dan diterima melalui CoreX akan menggunakan Auth Project sebagai kunci nya.
{% endhint %}


# Device ID

Setiap perangkat IoT (misalnya ESP32, ESP8266, Arduino, dll) harus terdaftar pada proyek yang kamu buat dengan cara menambahkan device tersebut melalui menu Daftar Perangkat. Kamu akan mendapatkan Device ID yang perlu kamu masukan pada kode program yang dibuat.

Device ID ini berfungsi agar kamu dapat memanage setiap perangkat IoT sekaligus mengetahui apakah perangkat tersebut memiliki kendala misalnya koneksi internet ataupun yang lainnya.

{% hint style="warning" %}
Satu Device ID hanya bisa digunakan oleh satu perangkat IoT saja.
{% endhint %}


# Bucket

Bucket adalah tempat kamu menampung data di CoreX. Setiap kali perangkat mengirimkan data maka data tersebut disimpan dalam sebuah bucket dan setiap kali perangkat ingin mengambil data maka data tersebut harus diambil dari bucket.

Kita harus menentukan nama bucket setiap kali kita mengirim data. Sebagai contoh kita akan mengirim data temperatur dalam satuan celcius maka kita bisa memberi nama bucket kita dengan `suhu`. Setiap kali perangkat mengirim data maka harus dikirim ke bucket `suhu` dan setiap perangkat yang ingin mendapatkan data maka harus mengambil dari bucket `suhu`.


# Send dan Receive

Pada CoreX terdapat istilah Send dan Receive untuk melakukan komunikasi data dari perangkat IoT ke server dan dari perangkat IoT ke perangkat IoT lainnya.

### Send

Send adalah istilah yang ada pada CoreX <mark style="color:blue;">untuk melakukan pengiriman data</mark> ke Bucket. Data terakhir yang dikirim ke bucket akan disimpan pada server secara sementara.

### Receive

Receive adalah istilah yang ada pada CoreX <mark style="color:blue;">untuk melakukan pengambilan data</mark> dari Bucket. Data yang diambil adalah data yang terakhir disimpan pada Bucket.


# Skema Penggunaan CoreX

Setelah kamu mengetahui mengenai konsep pada CoreX, maka seluruh penjelasan tersebut dapat disimpulkan melalui diagram berikut.

![](/files/0eg56Q05opQwl0dSu1n9)

Suatu proyek dapat berisi banyak halaman, suatu halaman dapat berisi banyak widget. Setiap widget akan berinteraksi dengan bucket yang sudah kita tentukan.


# Buat Proyek Pertama Kamu

Panduan untuk kamu agar dapat secara cepat menghubungkan perangkat ke CoreX.

### Untuk memulai

{% hint style="info" %}
Kamu akan mendapatkan URl khusus untuk dapat menggunakan proyek yang sudah dibuat yaitu: <https://corex.id/project/contohProyek> dimana <mark style="color:blue;">contohProyek</mark> adalah nama dari proyek yang kamu buat.
{% endhint %}

Sebelum memulai, kamu setidaknya perlu menyiapkan beberapa hal berikut.

1. Buat akun CoreX melalui <https://corex.id>.
2. Memiliki perangkat keras yang didukung (kami merekomendasikan menggunakan ESP32 ataupun ESP8266 untuk memulai).
3. Familiar dengan dasar elektro, mampu memasang library, serta setidaknya mampu membuat kode program untuk mengedipkan LED, dan kemampuan dasar lainnya. Jika kamu belum memahami dasar mengenai ini, bisa kamu pelajari di <https://nusabot.id>.
4. Sudah terpasang Arduino IDE ataupun Platform.io (manapun sesuai keinginan).

Jika sudah siap semuanya, mari pelajari bagaimana menghubungkan ke CoreX.


# Membuat proyek mengendalikan LED

Kami ucapkan selamat karena kamu sudah memiliki niat untuk belajar. Selanjutnya kita akan mulai membuat proyek di CoreX. :100:

### Buat Akun / Login

Masuk pada halaman <https://corex.id> lalu klik pada tombol `Daftar`. Setelah itu isi email kamu, username, nama, dan password.

<figure><img src="/files/twRxPXU0mIPflqClr9Yt" alt=""><figcaption><p>Membuat akun baru</p></figcaption></figure>

Setelah berhasil login kamu bisa membuka <mark style="color:orange;">**`Atur Proyek`**</mark> yang ada pada sidebar untuk membuat proyek baru.

![](/files/lZX9BH9ZCTZTru5RFZaa)

### Membuat Proyek Baru

{% tabs %}
{% tab title="Text" %}
Pada menu ini kamu bisa membuat proyek dan mengatur seluruh proyek `yang sudah dibuat`. Untuk menambahkan proyek baru kamu bisa meng-klik tombol `Klik Untuk Membuat Proyek Baru.`

<figure><img src="/files/sWBU19RxXRoXBktlIX7P" alt=""><figcaption></figcaption></figure>

Pastikan <mark style="color:orange;">**semua**</mark> field terisi. Setelah membuat proyek maka kamu bisa melihat seluruh proyek yang sudah dibuat.
{% endtab %}

{% tab title="Video" %}
Akan datang. Silahkan akses tab Teks terlebih dahulu.
{% endtab %}
{% endtabs %}

Sekarang kamu bisa melihat pada sidebar seluruh proyek yang sudah dibuat. Klik pada proyek tersebut untuk mengatur proyek kamu seperti menambahkan halaman dan mengatur widget.

<figure><img src="/files/ryNJCBOL0O4pIBVVNe8l" alt=""><figcaption></figcaption></figure>


# Membuat halaman

Setelah membuat proyek maka kamu sekarang perlu membuat sebuah halaman dimana halaman ini akan berfungsi sebagai tempat untuk meletakkan widget. Kamu bisa membuat lebih dari satu halaman.

{% tabs %}
{% tab title="Teks" %}
Untuk dapat membuat halaman, klik pada menu <mark style="color:orange;">`Proyek Kamu`</mark> dan pilih proyek yang baru dibuat sebelumnya. Setelah itu maka akan terbuka konfigurasi dari proyek.

<figure><img src="/files/b5YHIqor4fLZqkfxix7r" alt=""><figcaption></figcaption></figure>

Pada bagian ini akan ditampilkan <mark style="color:orange;">`Sisa Token Proyek`</mark> yang dapat nantinya digunakan untuk menambahkan widget pada halaman.

<mark style="color:orange;">**Auth Project**</mark> akan ditampilkan disini.

Klik pada tombol <mark style="color:blue;">`Klik Untuk Tambah Laman Baru`</mark>. Isikan sesuai keinginan kamu atau sesuaikan dengan tutorial ini.

<div align="left"><figure><img src="/files/Wd1tWXlQWMRtiofgaDCk" alt="" width="379"><figcaption></figcaption></figure></div>

Nama dari halaman adalah <mark style="color:blue;">`Halaman Awal`</mark>. Setiap halaman akan ditampilkan berurutan berdasarkan field urutan halaman dari angka terkecil sampai terbesar. Setelah kita membuat halaman, maka seluruh halaman yang dibuat akan ditampilkan.

<figure><img src="/files/HxQT3HBymr89YZBjvKZi" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Video" %}
Akan datang. Silahkan akses tab Teks terlebih dahulu.
{% endtab %}
{% endtabs %}


# Menambah token proyek

{% tabs %}
{% tab title="Teks" %}
Untuk dapat menambah token proyek yang nantinya akan digunakan untuk membuat widget, maka klik pada tombol <mark style="color:orange;">Tambah Token Proyek</mark>.

<div align="left"><figure><img src="/files/5pcVV11XFLHqJhPgnsvZ" alt="" width="376"><figcaption></figcaption></figure></div>

Isikan jumlah token yang ingin kamu masukan pada proyek ini. Untuk permulaan ini kamu cukup **memasukan token sebanyak 150** untuk membuat 1 buah widget.
{% endtab %}

{% tab title="Video" %}
Akan datang. Silahkan akses tab Teks terlebih dahulu.
{% endtab %}
{% endtabs %}


# Menambah widget

{% tabs %}
{% tab title="Teks" %}
Widget diletakan pada setiap halaman berbeda, artinya setiap halaman memiliki tampilan dan widget yang berbeda-beda. Untuk menambah, mengubah, serta menghapus widget maka dapat dilakukan dengan mengklik tombol widget yang ada pada halaman terkait.

<div align="left"><img src="/files/l7h7NwxOZ4XbZ4gkGVqt" alt=""></div>

Saat ini di halaman <mark style="color:blue;">**Halaman Awal**</mark> belum ada widget sama sekali, maka kita akan menambahkan 1 (satu) buah widget yaitu untuk mengirim data ke perangkat IoT.

<figure><img src="/files/1RYqLIkhK7ZQKwjDYLPW" alt=""><figcaption></figcaption></figure>

### Menambah Widget Untuk Mengendalikan LED

Klik pada tombol <mark style="color:blue;">**`Tambah`**</mark> untuk menambah widget baru. Kita akan membuat widget untuk mengendalikan LED pada perangkat.

Isikan <mark style="color:blue;">Judul Widget</mark> dengan <mark style="color:orange;">LED</mark> atau sesuai dengan keinginan dan pilih <mark style="color:blue;">Jenis Widget</mark> yang akan digunakan adalah <mark style="color:orange;">Tombol Switch</mark> yang membutuhkan 150 token.

<div align="left"><figure><img src="/files/sFw6N9yPhKtHBXvfLC3F" alt=""><figcaption></figcaption></figure></div>

Isikan judul sesuai dengan keinginan, pada dokumentasi ini judul diisi dengan LED.

Klik pada tombol <mark style="color:blue;">**`Tambah Widget`**</mark> untuk mengkonfirmasi widget yang kita pilih. Isi properti dari widget tersebut sesuai dengan kebutuhan. Pada dokumentasi ini kebutuhan kita adalah untuk mengendalikan nyala dan mati LED maka kamu dapat menyesuaikan dengan contoh berikut:

| Bagian                                                           | Nilai / Isi              | Penjelasan                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ---------------------------------------------------------------- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <mark style="background-color:orange;">Urutan / Prioritas</mark> | 1                        | Setiap widget memiliki urutan / prioritas. Widget dengan nomor urut paling kecil akan ditampilkan paling atas dan paling awal.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| <mark style="background-color:orange;">Ukuran</mark>             | Sesuai Keinginan         | Atur ukuran lebar widget sesuai keinginan kamu.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| <mark style="background-color:orange;">Bucket</mark>             | led                      | Bucket adalah tempat kita menampung data, setiap tempat harus kita beri nama sehingga kita bisa menentukan data akan disimpan di penampungan mana dan akan diambil dari penampungan mana. Pada data untuk mengatur LED ini akan kita simpan pada bucket dengan nama `led`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| <mark style="background-color:orange;">Opsi Tombol</mark>        | Nyala=1,Mati=0           | <p>Widget Tombol Switch adalah widget yang dapat menampung banyak tombol seperti saklar. Pilihan saklar yang bisa kita buat bisa berjumlah lebih dari 1 (satu) dimana pada proyek untuk mengendalikan LED membutuhkan 2 (dua) pilihan yaitu nyala atau mati.<br><br>Saat kita menekan tombol <mark style="color:orange;">Nyala</mark> maka CoreX akan mengirim data <code>1</code> ke bucket dan saat kita menekan tombol <mark style="color:orange;">Mati</mark> maka CoreX akan mengirim data <code>0</code> ke bucket. Data yang disimpan di bukcet akan diambil oleh perangkat IoT kita sehingga perangkat tersebut tahu harus mengatur LED menyala atau mati.<br><br>Setiap tombol dipisahkan dengan simbol koma, setiap nilai dipisahkan dengan simbol sama dengan.</p> |
| <mark style="background-color:orange;">Warna</mark>              | Utama                    | Kita bisa mengatur warna dari widget yang kita buat.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| <mark style="background-color:orange;">Icon</mark>               | fa-solid fa-battery-full | CoreX menggunakan icon yang disediakan oleh Font Awesome, kamu dapat memilih font yang tersedia.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |

Jika sudah kita isi seluruh field maka dapat langsung menekan tombol <mark style="background-color:purple;">Buat Widget.</mark>
{% endtab %}

{% tab title="Video" %}
Akan datang. Silahkan akses tab Teks terlebih dahulu.
{% endtab %}
{% endtabs %}


# Hasil Akhir

Setelah kamu membuat widget, maka hasil akhir dari proyek kamu akan seperti berikut.

![](/files/iC4ZQ7cdG4ehd2ROzoPl)

Disini kamu dapat mengubah widget ataupun menghapus widget yang sudah berhasil dibuat. Kamu juga bisa menambahkan widget lainnya sesuai kebutuhan. Pastikan token proyek kamu mencukupi untuk membuat widget baru.


# Menambahkan Perangkat

Setiap perangkat IoT yang ingin kamu gunakan harus didaftarkan pada proyek yang kamu buat. Disini kita akan mendapatkan Device ID berupa 9 (sembilan) karakter berupa huruf dan angka yang nantinya Device ID ini akan dimasukan pada kode program kita.

### Membuat Device ID

Untuk membuat Device ID maka silahkan masuk ke menu Proyek Kamu -> Control\_LED atau sesuai dengan nama proyek yang kamu ingin buat Device ID nya.


# Deploy

Deploy adalah proses untuk mempublikasikan proyek yang sudah dibuat untuk dapat langsung digunakan.

Setelah kamu mengatur proyek, mengatur halaman, serta mengatur widget maka proyek sudah siap dipublikasikan kepada *end-user.*

{% hint style="success" %}
Untuk mengakses proyek yang sudah dibuat maka dapat menggunakan format URL berikut:

<mark style="color:green;">**`https://corex.id/project/{nama proyek}`**</mark>

Pastikan huruf besar dan kecil sesuai. Ubah bagian {nama proyek} sesuai dengan nama proyek yang sudah kamu buat (hilangkan simbol kurung kurawal).

<img src="/files/UznMlG5OrPyTsGA5CBzv" alt="" data-size="original">
{% endhint %}

Jika proyek kamu adalah privat maka pengguna diminta untuk login terlebih dahulu, namun jika proyek adalah publik maka siapapun bisa menggunakannya.

Sebelah kiri adalah menu berupa halaman yang ada pada proyek serta status dari perangkat yang sudah ditambahkan ke proyek sebelumnya. Widget dari halaman akan tampil pada bagian tengah layar.

<figure><img src="/files/j0W0chVgon4OvOyNNjNm" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/dKFsdi0xK2vDGPUjWiLn" alt=""><figcaption></figcaption></figure>

Pojok kanan atas adalah status dari koneksi antara perangkat kamu (web browser) dengan server CoreX.

> Status **Terputus** biasanya disebabkan karena ada kesalahan dari koneksi internet kamu.


# Membuat Kode Program

{% hint style="info" %}
**Kamu dapat memilih menggunakan framework Arduino jika baru mempelajari mengenai pemrograman di ranah IoT. Silahkan unduh dan install Arduino IDE di situs resmi.** [**https://www.arduino.cc/en/software**](https://www.arduino.cc/en/software)
{% endhint %}

Pada dokumentasi tutorial awal ini akan menggunakan ESP32 maupun ESP8266 pada Arduino IDE. Pastikan kamu sudah melakukan instalasi board ESP32 ataupun ESP8266 melalui Boards Manager pada Arduino IDE.


# Install Library

{% tabs %}
{% tab title="Text" %}

<figure><picture><source srcset="/files/c87fesezJPO2b8bWAvaE" media="(prefers-color-scheme: dark)"><img src="/files/HYV7889oP0wUKSn6lWWa" alt=""></picture><figcaption></figcaption></figure>

Library CoreX dapat diinstall melalui library manager. Kamu juga dapat melakukan instalasi library dengan cara mengunduh berkas zip dari repository resmi CoreX di Github.

<https://github.com/CoreX-IoT/corex-firmware>
{% endtab %}

{% tab title="Video" %}
Akan Datang
{% endtab %}
{% endtabs %}


# Mengendalikan LED

Untuk bisa mengendalikan LED maka kita perlu melakukan Receive menggunakan CoreX. Untuk sekarang kita bisa menggunakan kode program example terlebih dahulu yang sudah disertakan dalam library.

{% tabs %}
{% tab title="Text" %} <mark style="background-color:green;">File -> Example -> CoreX -> Espressif -> ReceiveLED</mark>

{% code title="ReceiveLED.ino" lineNumbers="true" fullWidth="true" %}

```cpp
#include <CoreX.h>
#include "Connection.h"

const char* AUTH_TOKEN = "..........";
const char* DEVICE_ID = "..........";

const char ssid[] = "......";
const char pass[] = "......";

void receive(String &bucket, String &data) {
  if(bucket == "led"){
    digitalWrite(BUILTIN_LED, data.toInt());
  
    if(data == "0"){
      Serial.println("LED ON");
    } else {
      Serial.println("LED OFF");
    }
  }
}

void setup() {
  pinMode(BUILTIN_LED, OUTPUT);
  Serial.begin(115200);
  WiFi.begin(ssid, pass);
  corex.begin(net);

  corex.onMessage(receive);       // Lakukan receive pada fungsi receive().

  setupCoreX();
}

void loop() {
  corex.loop();
  //delay(10);                          // Hapus komentar untuk memberikan delay 10 milidetik jika terjadi kendala pada stabilitas WiFi.

  if (!corex.connected()) {
    setupCoreX();
  }
}
```

{% endcode %}

Ubah parameter SSID dan Password sesuai dengan jaringan WiFi yang digunakan.

{% hint style="info" %}
Atur AUTH\_TOKEN sesuai dengan auth token proyek yang sudah dibuat sebelumnya.
{% endhint %}

{% hint style="info" %}
Atur DEVICE\_ID sesuai dengan Device ID yang sudah ditambahkan pada proyek sebelumnya.
{% endhint %}

Pada contoh kode program ini perangkat akan mengecek apakah ada data yang diterima dari Bucket dengan nama `led` atau tidak. Jika ada maka atur nyala dan mati LED menggunakan fungsi digitalWrite(). Lakukan konversi data yang diterima ke tipe integer sebagai parameter sinyal digital.

{% hint style="info" %}

#### Kamu bisa melakukan upload kode program dan buka serial monitor untuk memastikan apakah perangkat terhubung dengan server atau tidak. Lalu buka proyek CoreX kamu dan tekan tombol Nyala atau Mati pada widget yang sudah dibuat.

{% endhint %}

![](/files/EVPLhQ62Orh5I8V0unV9)
{% endtab %}

{% tab title="Video" %}
Akan datang.
{% endtab %}
{% endtabs %}


# Send dan Receive

{% content-ref url="/pages/LKpSvFoHhlzN6jqIHiLh" %}
[Mengirim Data Dari Hardware Ke CoreX](/send-dan-receive/mengirim-data-dari-hardware-ke-corex)
{% endcontent-ref %}

{% content-ref url="/pages/dib451FrBuhL8EFHkqvB" %}
[Mengendalikan Perangkat (Mengambil Data Dari Bucket)](/send-dan-receive/mengendalikan-perangkat-mengambil-data-dari-bucket)
{% endcontent-ref %}


# Mengirim Data Dari Hardware Ke CoreX

Bagaimana caranya mengirim data dari hardware ke CoreX.

## Bagaimana Alur Data Dari Hardware ke CoreX

Dengan CoreX kamu bisa mengirim data mentah dari <mark style="color:blue;">sensor apapun</mark> atau aktuator yang terhubung ke microcontroller.

Ketika kamu mengirim data ke CoreX maka data tersebut akan dikirim kemudian dimasukan kedalam sebuah Bucket. Data yang lama akan ditimpa oleh data terbaru kecuali kamu melakukan upgrade layanan CoreX dimana data dapat disimpan pada database CoreX.

Bucket adalah tempat ditampungnya data pada server CoreX.

## CoreX Dapat Bekerja Dengan Sensor Apapun

CoreX tidak peduli sensor apa yang kamu gunakan, oleh karena itu sensor apapun datanya dapat dikirim menggunakan CoreX.

{% hint style="success" %}
**Pertama, pastikan sensor dapat dibaca datanya oleh microcontroller tanpa menggunakan CoreX.**

Ada banyak sekali jenis sensor yang ada di seluruh dunia. Setiap sensor tersebut memiliki cara kerja yang berbeda-beda. Ada yang simple dengan hanya menggunakan Pin Analog, ada juga yang memerlukan library khusus agar data dapat dibaca secara benar.

Sebelum kamu mencoba mengirimkan data ke CoreX maka kamu **harus terlebih dahulu mencoba menampilkan data tersebut ke Serial Monitor** agar yakin bahwa pembacaan sensor tidak bermasalah.

&#x20;

* Cari tutorial mengenai bagaimana cara membaca sensor tersebut.
* Temukan library yang cocok dengan sensor tersebut.
* Install library untuk sensor yang kamu gunakan di Arduino IDE.
* Tampilkan nilai sensor di Serial Monitor menggunakan fungsi `Serial.println()`.

**Jika kamu tidak bisa membaca nilai sensor tanpa CoreX, maka sudah dipastikan kamu juga tidak akan bisa mengirim data sensor menggunakan CoreX.**
{% endhint %}

## Data Disimpan Pada Bucket

Kamu seharusnya sudah paham dengan pin Analog dan Digital yang digunakan pada hardware kamu untuk mentransfer data dari sensor yang sudah terhubung.

Bucket adalah abstraksi yang didesain untuk melakukan pertukaran data antara hardware kamu dengan CoreX dimana data yang terbaru akan disimpan sementara pada sebuah tempat di server yang disebut dengan Bucket. Setiap Bucket memiliki nama sendiri yang berbeda-beda, nama dari Bucket dibuat oleh kamu sendiri.

Apapun yang kamu hubungkan ke hardware maka akan bisa terhubung juga dengan CoreX. Dengan menggunakan Bucket kamu dapat mengirim sesuatu dari aplikasi, memprosesnya di microcontroller, dan mengirimnya kembali ke smartphone. Kamu dapat memicu fungsi, membaca perangkat I2C, mengubah nilai, mengendalikan servo, motor DC, dan lain-lain.

Bucket dapat berinteraksi dengan library lainnya (Servo, LCD, dll) dan mengimplementasikan fungsi custom.

### Mengirim Data

Kamu perlu membuat widget terlebih dahulu untuk mulai menggunakan Bucket. Siapkan nama dari Bucket yang ingin kamu gunakan. Nama Bucket dapat terdiri dari huruf dan angka namun tidak boleh menggunakan karakter khusus seperti !, @, #, $, %, ^, &, \*, (, ), -, +, {, }, \[, ] <, >, ?, /, \~.

Pada CoreX kamu bisa membuat widget terlebih dahulu. Ada 2 (dua) jenis widget yaitu widget yang mengambil data dari Bucket dan widget yang megirimkan data ke Bucket. Silahkan buka pada bagian [Mengatur Widget](/aksi/mengatur-widget). Kamu perlu membuat widget yang memiliki fungsi menampilkan data dari Bucket, karena data dikirim dari hardware ke Bucket kemudian ditampilkan ke Widget.&#x20;

[Mengatur Widget](/aksi/mengatur-widget)

Setelah membuat widget, maka kamu dapat menggunakan CoreX Library Firmware API untuk mengirim data menggunakan fungsi send().

```cpp
sensorData = analogRead(A0);
corex.send(sensorData, "nama_bucket");
```

Kamu juga dapat mengirim data dengan tipe data lain seperti ini:

```cpp
corex.send(123, "nama_bucket");
corex.send("abc", "nama_bucket");
corex.send(12.3, "nama_bucket");
```

### Gunakan Timer!

{% hint style="danger" %}
Sangat penting untuk dipahami bahwa jika kita meletakan kode program di `void loop()` maka data akan dikirim "jutaan kali". Hal ini dapat menyebabkan spam ke server CoreX dengan jutaan data tersebut dari hardware kamu. Jika ini terjadi, CoreX akan memutus koneksi antara hardware dengan server.
{% endhint %}

Untuk menghindari spam seperti ini, lakukan pengiriman data hanya pada saat dibutuhkan saja (event-based) atau gunakan timer untuk mengirim data setiap interval tertentu. Library CoreX memiliki fitur timer yang dapat kamu gunakan.

Berikut adalah contoh kode program mengenai bagaimana caranya mengirim data setiap 2 (dua) detik sekali dengan menggunakan timer.

```cpp
// Deklarasikan variabel global untuk data sensor
int dataSensor;

// Buat objek timer. Timer sudah termasuk bagian dari library CoreX
corexTimer timer;

void send(){
    // fungsi ini akan dieksekusi setiap 2 detik sekali
    // lihat pada bagian void setup() untuk memanggil fungsi nya
    corex.send(dataSensor, "nama_bucket");
}

void setup(){
    // Memulai menggunakan CoreX
    corex.begin(net);
    
    // Atur interval untuk mengirim data ke CoreX ke 2000ms.
    // Artinya data akan dikirim setiap 2 detik sekali
    timer.setInterval(2000, send);
}

void loop(){
    // Baca data sensor dari pin Analog A0
    dataSensor = analogRead(A0);
    
    // Jalankan timer
    timer.run();
}
```

## Mengirim Data Ke Bucket Lebih Dari Satu

Untuk mengirim data lebih dari satu sensor di waktu yang bersamaan, cukup tambahkan perintah corex.send() di fungsi yang telah dibuat.

```cpp
void send(){
    corex.send(sensorSatu, "bucket_satu");
    corex.send(sensorDua, "bucket_dua");
    corex.send(sensorTiga, "bucket_tiga");
}
```

## Mengirim Data Ke Bucket Lebih Dari Satu Dengan Interval Berbeda

Untuk mengirim data lebih dari satu namun perlu dengan interval berbeda, maka cukup dengan buat timer lebih dari satu. Kamu bisa membuat timer sebanyak mungkin yang terpenting adalah microcontroller yang kamu gunakan memiliki spesifikasi yang cukup.

```cpp
void setup(){
    timer.setInterval(1000, sendSatu);
    timer.setInterval(2000, sendDua);
}

void sendSatu(){
    // sendSatu() akan dieksekusi setiap 1 detik sekali
    corex.send(sensorSatu, "bucket_satu");
    corex.send(sensorDua, "bucket_dua");
}

void sendDua(){
    // sendDua() akan dieksekusi setiap 2 detik sekali
    corex.send(sensorTiga, "bucket_tiga");
}

```

## Mengirim Data Hanya Sekali Setelah Beberapa Detik Perangkat Mulai Dinyalakan

Untuk dapat mengirim data ke Bucket 1 (satu) kali saja setelah beberapa detik perangkat dinyalakan maka dapat menggunakan `timer.setTimeout()`.

```cpp
void setup(){
    timer.setTimeout();
}
```


# Mengendalikan Perangkat (Mengambil Data Dari Bucket)

Bagaimana caranya mengambil data dari CoreX ke hardware kita.

## Bagaimana Data Diambil Dari CoreX ke Perangkat

<mark style="color:blue;">Kamu dapat mengendalikan aktuator apapun dengan menggunakan CoreX</mark>. Untuk mengendalikan aktuator atau mengirim data dari CoreX ke microcontroller maka kamu harus membuat widget yang memiliki fungsi mengirim data ke Bucket.

Bucket adalah tempat ditampungnya data pada server CoreX.

Ketika kamu mengirim data ke Bucket melalui widget maka data terakhir akan disimpan pada Bucket. Data pada Bucket tersebut kemudian diambil oleh microcontroller untuk diolah salah satunya data digunakan untuk mengendalikan aktuator misalnya LED, Servo, Motor DC, LCD, dsb.

Sebagai contoh, kamu dapat membuat widget Tombol Switch untuk mengatur Pin Digital (Pin GPIO) pada microcontroller dimana widget akan mengirim data 0 atau 1.

## CoreX Dapat Bekerja Dengan Aktuator Apapun

CoreX tidak peduli aktuator apa yang kamu gunakan, oleh karena itu aktuator apapun dapat dikendalikan menggunakan CoreX.

{% hint style="info" %}
**Pertama, pastikan aktuator dapat dikendalikan microcontroller tanpa menggunakan CoreX.**

Ada banyak sekali aktuator yang ada di seluruh dunia. Setiap aktuator tersebut memiliki cara kerja yang berbeda-beda. Ada yang simple dengan hanya menggunakan Pin Digital, ada juga yang memerlukan library khusus agar aktuator dapat dikendalikan secara benar.

Sebelum kamu mencoba mengambil data dari CoreX maka kamu **harus terlebih dahulu mencoba mengendalikan aktuator tersebut tanpa CoreX** agar yakin bahwa cara mengendalikan aktuator tidak ada masalah.

&#x20;

* Cari tutorial mengenai bagaimana cara mengendalikan aktuator tersebut.
* Temukan library yang cocok dengan aktuator tersebut.
* Install library untuk aktuator yang kamu gunakan di Arduino IDE.
* Tampilkan nilai aktuator di Serial Monitor menggunakan fungsi `Serial.println()`.

**Jika kamu tidak bisa mengendalikan aktuator tanpa CoreX, maka sudah dipastikan kamu juga tidak akan bisa mengendalikan aktuator menggunakan CoreX.**
{% endhint %}

## Data Diambil Dari Bucket

Kamu seharusnya sudah paham dengan pin yang digunakan pada hardware kamu untuk mengendalikan aktuator yang sudah terhubung.

Bucket adalah abstraksi yang didesain untuk melakukan pertukaran data antara hardware kamu dengan CoreX dimana data yang terbaru akan disimpan sementara pada sebuah tempat di server yang disebut dengan Bucket. Setiap Bucket memiliki nama sendiri yang berbeda-beda, nama dari Bucket dibuat oleh kamu sendiri.

Apapun yang kamu hubungkan ke hardware maka akan bisa terhubung juga dengan CoreX. Dengan menggunakan Bucket kamu dapat mengirim sesuatu dari aplikasi, memprosesnya di microcontroller, dan mengirimnya kembali ke smartphone. Kamu dapat memicu fungsi, membaca perangkat I2C, mengubah nilai, mengendalikan servo, motor DC, dan lain-lain.

Bucket dapat berinteraksi dengan library lainnya (Servo, LCD, dll) dan mengimplementasikan fungsi custom.

## Mengambil Data

Kamu perlu membuat widget terlebih dahulu untuk mulai menggunakan sebuah Bucket. Siapkan nama dari Bucket yang ingin kamu gunakan. Nama Bucket dapat terdiri dari huruf dan angka namun tidak boleh menggunakan karakter khusus seperti !, @, #, $, %, ^, &, \*, (, ), -, +, {, }, \[, ] <, >, ?, /, \~.

Pada CoreX kamu bisa membuat widget terlebih dahulu. Ada 2 (dua) jenis widget yaitu widget yang mengambil data dari Bucket dan widget yang megirimkan data ke Bucket. Silahkan buka pada bagian [Mengatur Widget](/aksi/mengatur-widget). Kamu perlu membuat widget yang memiliki fungsi mengirim data ke Bucket, karena data dikirim dari widget ke Bucket yang kemudian hardware akan mengambil data tersebut dari Bucket.&#x20;

[Mengatur Widget](/aksi/mengatur-widget)

Setelah membuat widget, maka kamu dapat menggunakan CoreX Library Firmware API untuk mengambil data menggunakan fungsi `corex.onMessage()`.

Server CoreX akan mengirim data dari Bucket ke perangkat kita setiap kali ada yang mengirim data ke Bucket. Untuk menerima data tersebut kamu perlu menyiapkan sebuah fungsi yang akan dieksekusi setiap kali data diterima.

```cpp
void setup(){
    // fungsi receive() akan dieksekusi setiap kali ada data yang diterima dari Bucket
    corex.onMessage(receive);
}

void receive(String &bucket, String &data){
    // Tampilkan data dari Bucket ke serial monitor
    Serial.println("Bucket: " + bucket);
    Serial.println("Data: "+ data);
}
```

### Menggunakan Pengkondisian Untuk Mengendalikan Aktuator

```cpp
void receive(String &bucket, String &data) {
  // Jika ada data diterima dari Bucket "led"
  if(bucket == "led"){  
    if(data == "1"){
      // Atur sinyal ke HIGH jika data yang diterima bernilai "1"
      digitalWrite(BUILTIN_LED, HIGH);
    } else {
      // Atur sinyal ke LOW jika data yang diterima bernilai BUKAN "1"
      digitalWrite(BUILTIN_LED, LOW);
    }
  }
}

void setup() {
  // Inisialisasi penggunaan pin
  pinMode(BUILTIN_LED, OUTPUT);

  // Fungsi receive akan dieksekusi setiap kali ada data yang diterima dari Bucket
  corex.onMessage(receive);
}
```

{% hint style="info" %}
Setiap kali perangkat berhasil terhubung ke server, maka perangkat akan menerima semua data dari Bucket yang pernah dibuat sebelumnya sesaat setelah berhasil terhubung.
{% endhint %}

## Jangan Gunakan Nomor Pin PadaLabel di Beberapa Development Board ESP8266

Beberapa development board contohnya adalah NodeMCU memiliki nomor pin yang ditulis tidak sesuai dengan nomor Pin GPIO ESP8266. Kita harus menghindari penggunaan nomor pin yang tertulis di label NodeMCU. Gunakanlah nomor pin sesuai dengan nomor GPIO dari ESP8266.


# Mengatur Proyek

Kamu bisa membuat proyek dan mengatur seluruh proyek milik kamu sendiri. Untuk menambahkan proyek baru kamu perlu membuka menu <mark style="color:blue;">`Atur Proyek`</mark> lalu meng-klik tombol <mark style="color:blue;">`Klik Untuk Membuat Proyek Baru`</mark>.

| Nama Masukan    | Keterangan                                                                                                                                                                                                                                                                                                  | Nilai           | Wajib |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | ----- |
| Nama Proyek     | Nama dari proyek yang akan dibuat (nama proyek harus unik alias nama proyek tidak boleh ada yang pernah menggunakan sebelumnya)                                                                                                                                                                             | Teks            | Ya    |
| Status Proyek   | Status dari proyek yang akan dibuat. Jika memilih `Privat`maka untuk dapat menggunakan proyek klien kamu harus melakukan login terlebih dahulu, namun tidak dengan `Publik` dimana siapapun dapat menggunakan proyek yang kamu buat.                                                                        | Publik / Privat | Ya    |
| Deskripsi       | Sebagai penjelasan singkat tentang proyek yang dibuat agar lebih mudah diingat dan dipahami terutama oleh personil tim.                                                                                                                                                                                     | Teks            | Ya    |
| Kategori Proyek | Kamu dapat mengkategorikan setiap proyek yang dibuat baik berdasarkan nama klien, jenis proyek, atau apapun sesuai dengan yang kamu inginkan. Kategori proyek untuk memudahkan kamu mencari proyek mana yang akan diatur.                                                                                   | Teks            | Ya    |
| Ikon            | Ikon dari proyek kamu menggunakan Font Awesome yang dapat dipilih [disini](https://fontawesome.com/search?m=free).                                                                                                                                                                                          | Teks            | Ya    |
| Kolaborator     | <p>Daftar seluruh kolaborator dari proyek. Kolaborator adalah akun yang memiliki akses untuk membuat halaman dan widget pada proyek. Biasanya kolaborator adalah personil tim kamu.</p><p>Kamu bisa menambahkan sebanyak apapun kolaborator. Pastikan kolaborator sudah memiliki akun CoreX sebelumnya.</p> | Data            | Tidak |
| Pengguna        | <p>Daftar seluruh pengguna dari proyek. Pengguna adalah akun yang memiliki akses untuk menggunakan proyek Kamu. Biasanya pengguna adalah klien kamu.</p><p>Kamu bisa menambahkan sebanyak apapun pengguna. Pastikan pengguna telah memiliki akun pada CoreX sebelumnya.</p>                                 | Data            | Tidak |

Setelah membuat proyek maka kamu bisa melihat seluruh proyek yang sudah dibuat.

![](/files/DG0RevwgkZgdLVYABZSm)

Sekarang seluruh proyek kamu juga akan tampil pada menu <mark style="color:blue;">Proyek Kamu</mark>. Klik pada proyek tersebut untuk mengatur proyek kamu seperti menambahkan halaman dan mengatur widget.


# Membuat Halaman

Untuk mengatur halaman yang ada pada proyek, kamu perlu membuka menu <mark style="color:blue;">`Proyek Kamu`</mark> yang ada pada sidebar lalu pilih proyek yang ingin diatur. Pada saat proyek baru dibuat, maka Token Proyek berjumlah 0. Kamu harus menambahkan token proyek dengan cara mengklik tombol <mark style="color:blue;">`Tambah Token Proyek`</mark>, CoreX akan melakukan konversi dari Token Akun menjadi Token Proyek sesuai dengan jumlah yang dimasukan.

{% hint style="warning" %}
Token Proyek tidak dapat diubah kembali menjadi Token Akun.
{% endhint %}

Untuk menambah halaman dapat dilakukan dengan mengklik tombol <mark style="color:blue;">`Klik Untuk Tambah Laman Baru`</mark>`.`

| Nama Masukan        | Keterangan                                                                                                                                                                 | Wajib |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| Judul Laman         | Nama dari laman yang akan digunakan, Judul Laman akan ditampilkan pada aplikasi yang diakses oleh *end-user* atau klien kamu.                                              | Ya    |
| Deskripsi           | Sebagai penjelasan singkat tentang halaman yang dibuat agar lebih mudah diingat dan dipahami terutama oleh personil tim.                                                   | Ya    |
| Urutan Posisi Laman | Daftar halaman pada tampilan *end-user* akan diurutkan posisi nya berdasarkan masukan ini. Halaman dengan angka Urutan Posisi Laman terkecil akan ditampilkan paling atas. | Ya    |
| Ikon                | Ikon dari halaman menggunakan Font Awesome yang dapat dipilih [disini](https://fontawesome.com/search?m=free).                                                             | Ya    |

Setelah membuat halaman maka kamu bisa melihat seluruh halaman yang sudah dibuat.

<figure><img src="/files/091SHNv0CHDfCVdu7R4U" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Untuk menghapus halaman kamu harus menghapus terlebih dahulu seluruh widget yang ada pada halaman tersebut.
{% endhint %}


# Mengatur Perangkat

Kamu dapat menambah dan menghapus perangkat atau Device ID melalui menu <mark style="background-color:blue;">Proyek Kamu</mark> dan klik pada tombol <mark style="background-color:blue;">Klik Untuk Melihat Daftar Perangkat</mark>.

Untuk menambah perangkat baru, klik pada tombol <mark style="background-color:blue;">Klik Untuk Tambah Device Baru</mark>. Kita bisa menghapus perangkat yang sudah ditambahkan dengan cara&#x20;


# Mengatur Widget

Kamu bisa mengklik tombol atur widget yang ada pada halaman. Disini kamu bisa menambah dan menghapus widget. Untuk menambah widget maka perlu mengklik tombol <mark style="color:blue;">`Tambah`</mark>.

| Nama Masukan | Keterangan                                                                                                                                          | Wajib |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| Judul Widget | Judul widget akan tampil pada sisi *end-user*. Judul widget memudahkan *end-user* untuk mengetahui widget ini digunakan untuk menampilkan data apa. | Ya    |
| Jenis Widget | Pilihan jenis widget yang ingin digunakan untuk menampilkan atau mengirim data.                                                                     | Ya    |


# Mengenai Widget

Widget adalah sebuah komponen yang dapat digunakan untuk menampilkan data maupun untuk mengirim data. Widget diletakan pada sebuah halaman.

Terdapat 2 (dua) fungsi widget yang berbeda secara umum yaitu widget yang digunakan untuk mengirim data ke Bucket serta widget yang digunakan untuk menampilkan data dari Bucket.


# Kotak

<figure><img src="/files/v2fnruAnjwVfxTCWoFoc" alt=""><figcaption></figcaption></figure>

## Konsumsi Token: 100

## Fungsi: Menampilkan data dari Bucket.

| Properti           | Keterangan                                                                                                                                               | Wajib |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| Urutan / Prioritas | Widget dengan nilai urutan / prioritas terkecil akan ditampilkan terlebih dahulu pada halaman.                                                           | Ya    |
| Ukuran             | Lebar dari widget yang akan ditampilkan.                                                                                                                 | Ya    |
| Bucket             | Nama dari Bucket yang akan diambil datanya.                                                                                                              | Ya    |
| Satuan Unit        | Satuan yang akan ditampilkan setelah data. Sebagai contoh, widget yang akan digunakan untuk menampilkan data suhu maka satuan unit bisa diisi dengan ºC. | Tidak |
| Warna              | Warna dari widget yang ingin digunakan.                                                                                                                  | Ya    |
| Ikon               | Ikon dari widget menggunakan Font Awesome yang dapat dipilih [disini](https://fontawesome.com/search?m=free).                                            | Ya    |


# Info

<figure><img src="/files/cSU1tCeNB3EXxlsNHW0e" alt=""><figcaption></figcaption></figure>

## Konsumsi Token: 100

## Fungsi: Menampilkan data dari Bucket.

| Properti           | Keterangan                                                                                                                                              | Wajib |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| Urutan / Prioritas | Widget dengan nilai urutan / prioritas terkecil akan ditampilkan terlebih dahulu pada halaman.                                                          | Ya    |
| Ukuran             | Lebar dari widget yang akan ditampilkan.                                                                                                                | Ya    |
| Bucket             | Nama dari Bucket yang akan diambil datanya.                                                                                                             | Ya    |
| Satuan Unit        | Satuan yang akan ditampilkan setelah data. Sebagai contoh widget yang akan digunakan untuk menampilkan data suhu maka satuan unit bisa diisi dengan ºC. | Tidak |
| Warna              | Warna dari widget yang ingin digunakan.                                                                                                                 | Ya    |
| Ikon               | Ikon dari widget menggunakan Font Awesome yang dapat dipilih [disini](https://fontawesome.com/search?m=free).                                           | Ya    |


# Tombol Switch

<figure><img src="/files/LfkA0HbvmzIrZDzgDJmV" alt=""><figcaption></figcaption></figure>

## Konsumsi Token: 150

## Fungsi: Mengirim data ke Bucket.

| Properti           | Keterangan                                                                                                                                                                                 | Wajib |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----- |
| Urutan / Prioritas | Widget dengan nilai urutan / prioritas terkecil akan ditampilkan terlebih dahulu pada halaman.                                                                                             | Ya    |
| Ukuran             | Lebar dari widget yang akan ditampilkan.                                                                                                                                                   | Ya    |
| Bucket             | Nama dari Bucket yang akan dikirim datanya.                                                                                                                                                | Ya    |
| Opsi Tombol        | Tombol yang digunakan pada widget. Setiap tombol dipisahkan dengan simbol "," atau simbol koma dan setiap nilai masing-masing tombol dipisahkan dengan simbol "=" atau simbol sama dengan. | Ya    |
| Warna              | Warna dari widget yang ingin digunakan.                                                                                                                                                    | Ya    |
| Ikon               | Ikon dari widget menggunakan Font Awesome yang dapat dipilih [disini](https://fontawesome.com/search?m=free).                                                                              | Ya    |


# Slider

<figure><img src="/files/kpPEIkRPK5i4HBHONrw4" alt=""><figcaption></figcaption></figure>

## Konsumsi Token: 150

## Fungsi: Menampilkan data dari Bucket.

| Properti           | Keterangan                                                                                                                                              | Wajib |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| Urutan / Prioritas | Widget dengan nilai urutan / prioritas terkecil akan ditampilkan terlebih dahulu pada halaman.                                                          | Ya    |
| Ukuran             | Lebar dari widget yang akan ditampilkan.                                                                                                                | Ya    |
| Jangkauan          | Nilai maksimum dan nilai minimum yang dapat diatur menggunakan slider.                                                                                  | Ya    |
| Bucket             | Nama dari Bucket yang akan dikirim datanya.                                                                                                             | Ya    |
| Satuan Unit        | Satuan yang akan ditampilkan setelah data. Sebagai contoh widget yang akan digunakan untuk menampilkan data suhu maka satuan unit bisa diisi dengan ºC. | Tidak |
| Warna              | Warna dari widget yang ingin digunakan.                                                                                                                 | Ya    |
| Ikon               | Ikon dari widget menggunakan Font Awesome yang dapat dipilih [disini](https://fontawesome.com/search?m=free).                                           | Ya    |


# Info Level

<figure><img src="/files/lhsGrRKtD90gazRAGbQL" alt=""><figcaption></figcaption></figure>

## Konsumsi Token: 100

## Fungsi: Menampilkan data dari Bucket.

| Properti           | Keterangan                                                                                                                                              | Wajib |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
| Urutan / Prioritas | Widget dengan nilai urutan / prioritas terkecil akan ditampilkan terlebih dahulu pada halaman.                                                          | Ya    |
| Ukuran             | Lebar dari widget yang akan ditampilkan.                                                                                                                | Ya    |
| Jangkauan          | Nilai maksimum dan minimum yang akan ditampilkan sebagai level pada widget.                                                                             | Ya    |
| Bucket             | Nama dari Bucket yang akan diambil datanya.                                                                                                             | Ya    |
| Satuan Unit        | Satuan yang akan ditampilkan setelah data. Sebagai contoh widget yang akan digunakan untuk menampilkan data suhu maka satuan unit bisa diisi dengan ºC. | Tidak |
| Warna              | Warna dari widget yang ingin digunakan.                                                                                                                 | Ya    |
| Ikon               | Ikon dari widget menggunakan Font Awesome yang dapat dipilih [disini](https://fontawesome.com/search?m=free).                                           | Ya    |


# CoreX Library - Firmware API

{% hint style="info" %}

* Maksimum data yang dapat dikirim adalah 128 byte secara default. Untuk mengubah ukuran buffer, gunakan pembuatan object seperti `CoreX corex(256);` atau `CoreX corex(256, 512);` tidak hanya sekedar memanggil `CoreX corex;` pada awal kode program kamu. Jika hanya memberikan satu parameter saja maka nilai tersebut berlaku untuk ukuran buffer pada send dan receive sekaligus, jika menggunakan dua parameter maka ukuran buffer send dan receive akan berbeda sesuai nilai yang ditulis.
* Pada ESP8266 menambahkan `delay(10);` setelah `client.loop();` dapat memperbaiki banyak masalah stabilitas WiFi.
  {% endhint %}

## Inisialisasi Penggunaan CoreX

```cpp
corex.begin(Client &client);
```

CoreX dapat digunakan di perangkat apapun selama perangkat tersebut menyediakan implementasi [Client](https://www.arduino.cc/en/Reference/ClientConstructor) based network.&#x20;

## Menghubungkan Ke Server

Untuk dapat terhubung ke CoreX gunakan fungsi `connect`.

```cpp
corex.connect();
```

Fungsi connect juga dapat digunakan untuk memeriksa apakah perangkat sudah berhasil terhubung ke server atau belum.

```cpp
// Tampilkan karakter titik setiap 1 detik selama perangkat tidak terhubung ke server
while (!corex.connect()) {
    Serial.print(".");
    delay(1000);
}
```

## Mendapatkan Data Dari Bucket

Untuk mendapatkan data dari Bucket gunakan fungsi `onMessage` dan buat fungsi receive:

```cpp
corex.onMessage(receive);
```

```cpp
void receive(String &bucket, String &data){
    Serial.println(bucket + " - " + data);
}
```

## Mengirim Data Ke Bucket

Untuk mengirim data dapat menggunakan fungsi `send()`.

```cpp
corex.send("data", "bucket");
```

Dapat juga menggunakan tipe data lainnya.

```cpp
corex.send("abc", "nama_bucket");
corex.send(123, "nama_bucket");
corex.send(12.3, "nama_bucket");
```

Kita juga bisa memeriksa apakah data berhasil dikirim atau tidak.

```cpp
if(corex.send("abc", "nama_bucket")){
    Serial.println("Data berhasil dikirim ke nama_bucket");
} else {
    Serial.println("Data gagal dikirim ke nama_bucket");
}
```

## Periksa Data Diterima

Fungsi ini harus dieksekusi pada `void loop()` agar terus memeriksa apakah ada data yang masuk atau tidak.

```cpp
corex.loop();
```

## Periksa Apakah Perangkat Masih Terhubung

Untuk memeriksa perangkat apakah masih terhubung ke CoreX atau tidak bisa menggunakan fungsi `connected()`.

```cpp
corex.connected();
```

Gunakan pengkondisian `if` untuk memeriksa status.

```cpp
if(!corex.connected()){
    Serial.println("Terputus dari server");
}
```

Fungsi ini dapat digunakan pada `loop()` agar perangkat dapat terus menerus memastikan masih terhubung ke CoreX. Jika tidak terhubung maka lakukan penghubungan ulang ke CoreX.

## Memutuskan Koneksi Dari CoreX

Untuk memutuskan koneksi dapat menggunakan fungsi `disconnected()`.

```cpp
corex.disconnected();
```

Gunakan pengkondisian `if` untuk memeriksa status.

```cpp
if(corex.disconnected()){
    Serial.println("Terputus dari server");
}
```

Fungsi ini dapat digunakan pada loop() agar perangkat dapat terus menerus memastikan masih terhubung ke CoreX. Jika tidak terhubung maka lakukan penghubungan ulang ke CoreX.

## Penggunaan Timer

CoreX menyediakan fitur timer dimana dengan fitur ini kamu bisa mengeksekusi kode program tanpa menggunakan `delay()` ataupun `milis()`.

{% hint style="danger" %}
Dalam proyek yang memerlukan operasi data realtime harus menghindari penggunaan `delay()` karena bersifat *blocking* yang artinya perangkat kamu akan "mogok kerja" tidak akan melakukan apapun selama jeda yang sudah ditentukan pada delay.
{% endhint %}

Untuk menggunakan timer maka kamu perlu membuat objek timer terlebih dahulu.

```cpp
CoreXTimer timer;
```

Selanjutnya pada `void loop()` perlu melakukan pemanggilan fungsi `run()` agar timer dapat dieksekusi.

```cpp
void loop(){
    timer.run();
}
```

### Eksekusi Fungsi Setiap Detik

```cpp
timer.setInterval(1000, namaFungsi);

void namaFungsi(){
    Serial.println("Dieksekusi setiap 1 detik");
}
```

### Eksekusi Fungsi Satu Kali Setelah Beberapa Detik Berlalu

```cpp
timer.setTimeout(1000, namaFungsi);

void namaFungsi(){
    Serila.println("Dieksekusi 1 kali setelah 1 detik berlalu");
}
```

### Eksekusi Fungsi Beberapa Kali Setiap Interval Tertentu

```cpp
timer.setTimer(1000, namaFungsi, 7);

void namaFungsi(){
    Serial.println("Dieksekusi sebanyak 7 kali setiap 1 detik");
}
```


# Menambah Token

Untuk menambah token, kamu bisa membelinya dari menu <mark style="color:blue;">Tambah Token</mark>.

Untuk membeli token, kamu bisa menggunakan metode pembayaran berikut:

* Bank Transfer
  * Bank Mandiri
  * Bank BNI
  * Bank Permata
  * Bank lainnya yang terdaftar di Indonesia
* GoPay / GoPayLater
* QRIS
  * Scan QRCode menggunakan e-wallet apapun. Dapat digunakan untuk seluruh e-wallet yang terdaftar di Indonesia termasuk scan QRCode melalui mobile banking.


# Transfer Token

Kamu dapat mengirimkan token ke rekanmu yang telah terdaftar di CoreX. Buka menu <mark style="color:blue;">Transfer Token</mark>, lalu masukan email tujuan kemana kamu ingin mengirim token serta jumlah token yang ingin dikirimkan. Masukan Password akun kamu dan klik <mark style="color:blue;">Kirim Token</mark>.

{% hint style="danger" %}
Kamu hanya dapat melakukan transfer token hanya jika jumlah token kamu diatas 500. Kamu tidak bisa melakukan transfer token jika saldo akhir token kamu dibawah 500.
{% endhint %}


