Belajar ArduinoJson

Format JSON sering digunakan untuk komunikasi data. Disini kita akan belajar ArduinoJson yang digunakan untuk parsing dan membuat data JSON.

Untuk kali ini saya akan mencoba nya di Wokwi.com . Jika belum pernah menggunakan Simulator Wokwi, silahkan bisa dipelajari disini terlebih dahulu.

Langkah 1 : Memilih Board

Saya pilih Arduino Nano saja untuk test program

Memilih Board

Langkah 2 : Menambahkan Library ArduinoJson

Untuk menambahkan Library ArduinoJson pada Wokwi Simulator :

  • Pilih Tab Library Manager
  • Tekan tanda +
  • Tulis : arduinojson
  • Nanti akan muncul, lalu pilih library tersebut
Library ArduinoJson

Setelah menambahkan library selesai, maka akan tampil sebagai berikut :

Library ArduinoJson

Langkah 3 : Menulis Program

Dalam program di bawah ini banyak comment yang saya gunakan agar saya pribadi lebih memahami baris-baris perintah yang ditulis.
Silahkan copy paste program berikut.

#include <ArduinoJson.h>

// Untuk Sample bisa dilihat di :
// https://arduinojson.org/v6/example/

void setup() {
  // Inisialisasi serial port
  Serial.begin(9600);
  while (!Serial) continue;

  // Alokasi JSON document
  //
  // Di dalam bracket, 200  adalah kapasitas memory pool dalam bytes.
  // Jangan lupa untuk mengganti nilai ini disesuaikan dengan isi JSON document.
  // Check arduinojson.org/v6/assistant untuk menghitung kapasitas memory.
  StaticJsonDocument<200> doc;

  // StaticJsonDocument<N> mengalokasikan memory pada stack, hal ini dapat diganti
  // dengan DynamicJsonDocument yang dialokasikan di heap memory.
  //
  // DynamicJsonDocument doc(200);

  // Ada dua jenis pengalokasian memori berdasarkan dari tipe data yang disimpan, 
  // yaitu alokasi memori stack di mana data akan disimpan dalam alamat memori secara berurutan, 
  // serta alokasi memori heap di mana data akan disimpan tanpa mempertimbangkan urutan alamat memorinya.
  // Biasanya untuk yang sementara dan kecil, disimpan di stack

  // JSON input string.
  //
  // Menggunakan char[], untuk enables "zero-copy" mode. Mode ini menggunakan memory seminimal mungkin
  // karena JsonDocument meyimpan pointers ke input buffer.
  // Jika menggunakan tipe lain untuk input, ArduinoJson harus copy strings dari
  // inputan ke JsonDocument, sehingga kita harus menambahkan kapasitas dari JsonDocument.
  char json[] =
      "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";

  // Deserialize the JSON document
  DeserializationError error = deserializeJson(doc, json);

  // Jika proses parsing tidak berhasil.
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return;
  }

  // Jika berhasil, ambil datanya
  //
  // disini ada beberapa contoh tipe data : string, angka, dan array
  const char* sensor = doc["sensor"];
  long time = doc["time"];
  double latitude = doc["data"][0];
  double longitude = doc["data"][1];

  // Tampilkan isinya.
  Serial.println(sensor);
  Serial.println(time);
  Serial.println(latitude, 6);
  Serial.println(longitude, 6);
}

void loop() {
  
}

Saat program di jalankan, maka tampilan Serial Monitor nya sebagai berikut :

Terlihat pada Serial Monitor sudah dapat menampilkan dari masing-masing nilai.

Sedikit catatan perihal StaticJsonDocument ada disini :

StaticJsonDocument adalah JsonDocument yang dialokasikan dalam stack . Karena tidak memanggil malloc() dan free(), StaticJsonDocument sedikit lebih cepat daripada DynamicJsonDocument.

Berhati-hatilah untuk tidak mengalokasikan kumpulan memori terlalu besar di dalam Stack, karena akan menyebabkan Stack Overflow. Gunakan StaticJsonDocument untuk dokumen kecil (di bawah 1KB) dan alihkan ke DynamicJsonDocument jika terlalu besar untuk muat dalam memori Stack.

Leave a Comment

Your email address will not be published. Required fields are marked *