# Mengirim Data Sederhana ke Antares

***

## Pendahuluan

Pada project ini anda akan diarahkan untuk mengirim data dummy dari **Development Board Lynx-32** ke **Antares IoT Platform** menggunakan konektivitas LoRa dengan protokol LoRaWAN.&#x20;

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/2bbblhLAWiqVVahQLccz/Mengirim%20Data%20Sederhana%20ke%20Antares.png" alt=""><figcaption></figcaption></figure>

Dalam protokol LoRaWAN terbagi menjadi dua kelas yaitu Class A dan Class C, masing masing kelas memiliki kekurangan dan kelebihannya masing-masing, untuk lebih detailnya dapat mengunjungi laman berikut.

{% content-ref url="lorawan-class" %}
[lorawan-class](https://docs.antares.id/contoh-kode-dan-library/esp32-lora/lorawan-class)
{% endcontent-ref %}

## Prasyarat

Material yang dibutuhkan mengikuti dengan **Prasyarat Umum** pada laman sebelumnya. Jika anda belum menyiapkan kebutuhan pada laman tersebut, maka anda dapat mengunjungi laman berikut.

{% content-ref url="prasyarat-umum-esp32-lora" %}
[prasyarat-umum-esp32-lora](https://docs.antares.id/contoh-kode-dan-library/esp32-lora/prasyarat-umum-esp32-lora)
{% endcontent-ref %}

## Langkah Kerja

### 1. Jalankan Aplikasi Arduino IDE

### 2. Membuka Contoh Program

{% hint style="info" %}
Kode program dapat anda buka pada Arduino IDE melalui **File > Examples > Antares LoRaWAN > send-class-A-ABP.**
{% endhint %}

Berikut adalah kode program dari contoh **send-class-A-ABP.**

{% code lineNumbers="true" fullWidth="false" %}

```arduino
#include <lorawan.h>

//ABP Credentials
/*
  Notes:
  - select ABP Activation on ANTARES
  - select inherit to generate your keys
  - nwkSKey: 32 digit hex, you can put 16 first digits by first 16 digits your access key and add 16 digits with 0 (ex : abcdef01234567890000000000000000)
  - appSKey: 32 digit hex, put 16 first digits by 0 and put last 16 digits by last 16 digit your access key (ex : 0000000000000000abcdef0123456789)
*/
const char *devAddr = "Lora-Device-Address"; // Replace with the Device Address that you have in the Antares console
const char *nwkSKey = "Network-Session-Key"; // Replace with the Network Session Key that you have in the Antares console
const char *appSKey = "Application-Session-Key"; // Replace with the Application Session Key that you have in the Antares console

const unsigned long interval = 10000;    // 10 s interval to send message
unsigned long previousMillis = 0;  // will store last time message sent
unsigned int counter = 0;     // message counter

char myStr[50];
char outStr[255];
byte recvStatus = 0;
int channel;

#if defined (ARDUINO_ESP32_DEV)
const sRFM_pins RFM_pins = {
  .CS = 5,    //LYNX32 to RFM NSS
  .RST = 0,   //LYNX32 to RFM RST
  .DIO0 = 27, //LYNX32 to RFM DIO0
  .DIO1 = 2,  //LYNX32 to RFM DIO1
};
#elif defined (ARDUINO_B_L072Z_LRWAN1)
const sRFM_pins RFM_pins = {
  .CS = PA15,   //STM32L0 to NSS
  .RST = PC0,   //STM32L0 to RST
  .DIO0 = PB4,  //STM32L0 to DIO0
  .DIO1 = PB1,  //STM32L0 to DIO1
};
#else
#error *** ONLY SUPPORTS LYNX32 AND B-L072Z-LRWAN1 ***
#endif

void setup() {

#if defined (ARDUINO_B_L072Z_LRWAN1)
  SPI.setMOSI(PA7);
  SPI.setMISO(PA6);
  SPI.setSCLK(PB3);
  SPI.begin();
#elif !defined (ARDUINO_ESP32_DEV)
  #error *** ONLY SUPPORTS LYNX32 AND B-L072Z-LRWAN1 ***
#endif

  // Setup loraid access
  Serial.begin(115200);
  delay(2000);
  if (!lora.init()) {
    Serial.println("RFM95 not detected");
    delay(5000);
    return;
  }

  // Set LoRaWAN Class change CLASS_A or CLASS_C
  lora.setDeviceClass(CLASS_A);

  // Set Data Rate
  lora.setDataRate(SF10BW125);

  // set channel to random
  lora.setChannel(MULTI);

  // Set TxPower to 15 dBi (max)
  lora.setTxPower1(15);

  // Put ABP Key and DevAddress here
  lora.setNwkSKey(nwkSKey);
  lora.setAppSKey(appSKey);
  lora.setDevAddr(devAddr);
}

void loop() {
  // Check interval overflow
  if (millis() - previousMillis > interval) {
    previousMillis = millis();

    sprintf(myStr, "Lora Counter-%d", counter);

    Serial.print("Sending : ");
    Serial.println(myStr);

    lora.sendUplink(myStr, strlen(myStr), 0, 5);
    counter++;
    channel = lora.getChannel();
    Serial.print(F("Ch : "));    Serial.print(channel); Serial.println(" ");
  }

  // Check Lora RX
  lora.update();

  recvStatus = lora.readData(outStr);
  if (recvStatus) {
    int counter = 0;

    for (int i = 0; i < recvStatus; i++)
    {
      if (((outStr[i] >= 32) && (outStr[i] <= 126)) || (outStr[i] == 10) || (outStr[i] == 13))
        counter++;
    }
    if (counter == recvStatus)
    {
      Serial.print(F("Received String : "));
      for (int i = 0; i < recvStatus; i++)
      {
        Serial.print(char(outStr[i]));
      }
    }
    else
    {
      Serial.print(F("Received Hex : "));
      for (int i = 0; i < recvStatus; i++)
      {
        Serial.print(outStr[i], HEX); Serial.print(" ");
      }
    }
    Serial.println();
  }

}
```

{% endcode %}

### 3. Set LoRaWAN Parameter di Antares

Pada halaman Device console Antares lakukan Set LoRa dengan menekan button **Set LoRa** seperti gambar berikut.

<figure><img src="https://3995702122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRkxjRLeqOm0pNhLfsus%2Fuploads%2FsyprxAyDcgBPEI5NPcPK%2Fsetlora%201.png?alt=media&#x26;token=e49c923b-be8e-4f78-8587-3004b6f99a37" alt=""><figcaption></figcaption></figure>

Masukan parameter LoRaWAN dengan **Lora Device Class A, Activation Mode ABP, ABP Parameters Inherit** seperti pada gambar berikut.

{% hint style="info" %}
Ketika memilih **ABP Parameters Inherit** maka parameter LoRa akan digenerate oleh Antares. Dari sisi perangkat, **Development Board Lynx32** perlu menyesuaikan parameter LoRa tersebut.
{% endhint %}

{% hint style="warning" %}
Jangan lupa untuk menyimpan **(copy)** parameter **Network Session Key** dan **Application Session Key** sebelum klik **Set LoRa** untuk memudahkan proses selanjutnya.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/RWESRt60bfuG1IZVAlYG/kotak%20setlora.png" alt=""><figcaption><p>Gambar Form berisi Parameter Set LoRa.</p></figcaption></figure>

{% hint style="danger" %}
Pastikan akun antares anda memiliki paket LoRa yang aktif.
{% endhint %}

### 4. Set LoRaWAN Parameter pada Kode Program

Ubah parameter LoRaWAN ABP pada variabel berikut **`*devAddr`** , **`*nwkSkey`** , dan **`*appSKey`**. Sesuaikan dengan parameter di console Antares.

```arduino
const char *devAddr = "Lora-Device-Address";
const char *nwkSKey = "Network-Session-Key";
const char *appSKey = "Application-Session-Key"
```

{% hint style="info" %}
Parameter **\*devAddr** yang telah digenerate oleh Antares dapat dilihat pada halaman device setelah selesai **Set LoRa.**
{% endhint %}

{% hint style="info" %}
Parameter **\*nwkSKey**  dan **\*appSKey** didapatkan saat **Set LoRa** pada langkah sebelumnya.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/BZ9rwQRupCz0eNzlBVh2/berhasil%20lora%20beneran.png" alt=""><figcaption><p>Gambar Halaman Console Antares Setelah berhasil Set LoRa.</p></figcaption></figure>

<figure><img src="https://3995702122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRkxjRLeqOm0pNhLfsus%2Fuploads%2FWT02gmg7U0lzwd8GsWr7%2Fsetlora%202.png?alt=media&#x26;token=fe83472e-cb98-4754-ad82-c5ff4a598140" alt=""><figcaption><p>Gambar Halaman Console Antares Setelah berhasil Set LoRa.</p></figcaption></figure>

{% hint style="danger" %}
Jika anda lupa menyimpan \***nwkSkey** dan **\*appSKey** pada langkah sebelumnya maka lihat accesskey pada akun antares anda kemudian ikuti format berikut.

{% code overflow="wrap" %}

```arduino
Example Accesskey = "aaaaaaaaaaaaaaaa:bbbbbbbbbbbbbbbb"; //32 digit accesskey

const char *nwkSKey = "aaaaaaaaaaaaaaaa0000000000000000"; //16 digit first accesskey plus 16 digit zero

const char *appSKey = "0000000000000000bbbbbbbbbbbbbbbb"; //16 digit zero plus 16 digit last acesskey
```

{% endcode %}
{% endhint %}

### 5. Compile dan Upload Program

Hubungkan **Development Board Lynx-32**  dengan komputer anda dan pastikan **Communication Port** terbaca.

{% hint style="info" %}
Pada sistem operasi Windows pengecekan dapat dilakukan melalui **Device Manager.**&#x20;

Jika **Development Board Lynx-32** anda terbaca maka akan tampil **USB-Serial CH340** dengan port menyesuaikan ketersediaan port (pada kasus ini terbaca **COM4**).
{% endhint %}

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/XAiXBxxXUFVX8swfWA0c/comport.png" alt=""><figcaption><p>Gambar Device Manager pada Windows.</p></figcaption></figure>

Atur Board **Lynx-32** dengan klik **Tools > Board > ESP32 Arduino** pada Arduino IDE, kemudian pastikan board yang digunakan adalah **ESP32 Dev Module.** Pilih port sesuai communicaion port yang terbaca (dalam kasus ini COM4). Hasilnya akan terlihat seperti gambar berikut.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/OwDK0KcQBb2Ac10nFxG4/4_Board%20Setup.png" alt=""><figcaption><p>Gambar Menu Tools pada Arduino IDE.</p></figcaption></figure>

Setelah semua setup selesai, lakukan upload program dengan menekan icon panah seperti gambar berikut. Tunggu hingga selesai proses compile dan upload.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/sb2IFSdUHPnt0SFD7WNR/5_Upload%20and%20Compile.png" alt=""><figcaption><p>Gambar Icon Verify and Upload pada Arduino IDE.</p></figcaption></figure>

{% hint style="info" %}
**Icon Centang** pada Arduino IDE hanyalah proses verify. Biasanya digunakan untuk **Compile** program untuk mengetahui apakah terdapat error atau tidak.

**Icon Panah** pada Arduino IDE adalah proses verify and upload. Biasanya digunakan untuk **Compile** program sekaligus **Flash program** kedalam target board.
{% endhint %}

Jika upload program berhasil maka akan terlihat seperti gambar berikut.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/0OF6UAOfhw7B3CfQNRLa/doneupload.png" alt=""><figcaption><p>Gambar Halaman Arduino IDE Setelah Upload berhasil.</p></figcaption></figure>

Setelah selesai upload program, anda dapat melihat **serial monitor** untuk melakukan debug program. Icon **serial monitor** terlihat seperti pada gambar berikut.

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/8vxUEIyChnPyrywbN6sF/8_Serial%20Monitor.png" alt=""><figcaption><p>Gambar Icon Serial Monitor pada Arduino IDE.</p></figcaption></figure>

Atur **serial baud rate** menjadi 115200 dan pilih BothNL & CR. Hasilnya akan terlihat seperti gambar berikut.

{% hint style="danger" %}
Pastikan **serial baud rate** sesuai dengan nilai yang terdefinisi di kode program. Jika **serial baud rate** tidak sama, antara **kode program** dan **serial monitor** maka karakter ASCII tidak akan terbaca dengan baik.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/rRkxjRLeqOm0pNhLfsus/blobs/BAZOipzj2AUe4aqf5ttj/Serial%20Com.png" alt=""><figcaption><p>Gambar Serial Monitor.</p></figcaption></figure>

### 6. Periksa Data di Antares

Setelah upload program berhasil, selanjutnya buka halaman device antares kemudian lihat apakah data lora sudah berhasil dikirim.&#x20;

<figure><img src="https://3995702122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRkxjRLeqOm0pNhLfsus%2Fuploads%2FPpGKZZOStJo8M4fxDfy2%2F153.png?alt=media&#x26;token=197809ca-fd50-435f-8312-2f7a2b383240" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3995702122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FrRkxjRLeqOm0pNhLfsus%2Fuploads%2FNXTn87qoKqiIzoKDAuvn%2F154.png?alt=media&#x26;token=63799d65-021d-4f30-a4f6-16634388092c" alt=""><figcaption><p>Gambar Halaman Console Antares Ketika Data LoRa Berhasil Diterima.</p></figcaption></figure>

{% hint style="info" %}
Data yang dikirimkan dari **Development Board Lynx-32** berupa **`"counter"`**, **`"port"`**, dan pesan yang berada didalam JSON field **`"data".`** Sementara parameter lainnya adalah parameter pendukung yang dihasilkan oleh Infrastruktur LoRaWAN Antares.
{% endhint %}
