> For the complete documentation index, see [llms.txt](https://docs.antares.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.antares.id/contoh-kode-dan-library/stm32-lora-arduino-ide/mengirim-data-sederhana-ke-antares.md).

# Mengirim Data Sederhana ke Antares

Pada project ini anda akan diarahkan untuk mengirim data dummy dari **STM32 LoRa Discovery Kit** ke **Antares IoT Platform** menggunakan konektivitas LoRa dengan protokol LoRaWAN.&#x20;

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="/pages/2drjc2iLUddplq9EcqUq" %}
[LoRaWAN Class](/contoh-kode-dan-library/esp32-lora/lorawan-class.md)
{% endcontent-ref %}

### Prasyarat

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

{% content-ref url="/pages/awmPvFN4cHjM3Q2bhxDH" %}
[Prasyarat Umum STM32 (LoRa) Arduino IDE](/contoh-kode-dan-library/stm32-lora-arduino-ide/prasyarat-umum-stm32-lora-arduino-ide.md)
{% 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.**

```cpp
#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();
  }
}
```

### 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="/files/kR1yf4ZCkt3R95IudHy9" alt=""><figcaption></figcaption></figure>

{% tabs %}
{% tab title="Class A" %}
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 STM32** 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="/files/Cz8SbEPlJi44mMP9WQpc" alt=""><figcaption><p>Gambar Form berisi Parameter Set LoRa Class A.</p></figcaption></figure>

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

{% tab title="Class C" %}
Masukan parameter LoRaWAN dengan **Lora Device Class C, 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 STM32** 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="/files/03zf5EdOZ2SyNXaG0Tnh" alt=""><figcaption><p>Gambar Form berisi Parameter Set LoRa Class C.</p></figcaption></figure>

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

### 4. Set LoRaWAN Parameter pada Kode Program

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

```
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="/files/cO4kysHdtLxpNSZOsHpO" alt=""><figcaption><p>Gambar Halaman Console Antares Setelah berhasil Set LoRa.</p></figcaption></figure>

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

```
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
```

{% endhint %}

### 5. Compile dan Upload Program

Hubungkan **STM32 LoRa Discovery Kit**  dengan komputer anda dan pastikan **Communication Port** terbaca.

{% hint style="info" %}
Pada sistem operasi Windows pengecekan dapat dilakukan melalui **Device Manager.** Jika **STM32 LoRa Discovery Kit** Anda terbaca maka tampil **STMicroelectronics STLink Virtual COM Port** dengan port menyesuaikan ketersediaan port (pada kasus ini terbaca **COM5**).
{% endhint %}

<figure><img src="/files/UPoZDe7UcQ1b4Lhw8chb" alt=""><figcaption><p>Gambar Device Manager pada Windows.</p></figcaption></figure>

Atur board **STM32 LoRa Discovery Kit** dengan klik **Tools > Board > STM32 MCU Based Board** pada Arduino IDE, kemudian pastikan yang digunakan adalah **Discovery .** Ubah Board Part Number menjadi **B-L072Z-LRWAN1 .** Ubah Upload Method menjadi **STM32CUBEProgrammer (SWD)** Pilih port sesuai communication port yang terbaca (dalam kasus ini COM5). Hasilnya akan terlihat seperti gambar berikut.

<figure><img src="/files/Ses2qHCWw4DS93bhfN8F" alt="" width="457"><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

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

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

<figure><img src="/files/lOoQIx9cnr989D7C12Ma" alt=""><figcaption><p>Gambar Icon Verify dan Upload pada Arduino IDE.</p></figcaption></figure>

Jika upload program berhasil maka akan terlihat seperti gambar berikut.

<figure><img src="/files/rHIAGuQkc6PIPxSxkm5z" 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 pada gambar berikut.

<figure><img src="/files/WLlnTGc3RXGzWbPm4Klc" 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="/files/NLWDuaq6LZBOaRTzZTqa" alt=""><figcaption><p>Gambar Serial Monitor </p></figcaption></figure>

### **5. Periksa Data di Antares**

Setelah upload program berhasil, selanjutnya buka halaman device antares kemudian lihat apakah data sudah berhasil dikirim.

<figure><img src="/files/L5uvMvNzHVbU6G5uCCK3" alt=""><figcaption><p>Gambar Halaman Console Antares Ketika Data Berhasil Diterima.</p></figcaption></figure>

Bentuk data yang diterima oleh antares akan berbentuk JSON seperti format berikut

```json
{
  "type": "uplink",
  "port": 5,
  "data": "Lora Counter-0",
  "counter": 0,
  "devEui": "b9dc778f871ed781",
  "radio": {
    "gps_time": null,
    "hardware": {
      "snr": 9.3,
      "rssi": -53
    },
    "datarate": 2,
    "modulation": {
      "bandwidth": 125000,
      "spreading": 10
    },
    "delay": 0.0010647773742675781,
    "freq": 922,
    "size": 27
  }
}
```

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