> 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/nb-iot/nb-lynx-7000/mengambil-data-gnss-global-navigation-satellite-system.md).

# Mengambil Data GNSS (Global Navigation Satellite System)

Pada project ini Anda akan diarahkan untuk mengambil data GNSS (Global Navigation Satellite System) berupa data lokasi dan waktu menggunakan board **NB-LYNX-7000** yang dipasang dengan GPS Antenna.

## Prasyarat

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

{% content-ref url="/pages/vwuqCWerZgdnW0cSSfeC" %}
[Prasyarat Umum NB-Lynx-7000](/contoh-kode-dan-library/nb-iot/nb-lynx-7000/prasyarat-umum-nb-lynx-7000.md)
{% endcontent-ref %}

## Langkah Kerja

### 1. Setup Peralatan

Hal yang perlu Anda lakukan pertama kali adalah melakukan setup peralatan dengan cara menghubungkan board NB-LYNX-7000 dengan GPS Antenna. Selanjutnya board dapat dihubungkan ke perangkat laptop/komputer Anda menggunakan kabel USB-C.&#x20;

{% hint style="info" %}
Anda perlu menghubungkan GPS Antenna pada port antena GPS yang terletak pada board NB-LYNX-7000
{% endhint %}

Berikut adalah rangkaian peralatan yang sudah dihubungkan ke laptop/komputer.&#x20;

<figure><img src="/files/lcE7kok9J3YR8C7ulz8k" alt="" width="563"><figcaption><p>NB-LYNX-7000 yang Dihubungkan dengan GPS Antenna</p></figcaption></figure>

### 2. Jalankan Arduino IDE

### 3. Menginputkan Kode Program

Untuk mengambil data GNSS, Anda perlu menginputkan kode program di bawah pada Arduino IDE.&#x20;

{% code lineNumbers="true" %}

```arduino
#include <Arduino.h>

// Configurable macros
#define SIM7000_POWER_KEY 27

String sendCommand(String command, uint32_t timeout, char delimiter)
{
 while (Serial2.available())
  Serial2.read();

 uint32_t T = millis();
 String res = "";
 Serial.print("[SYS CMD] ");
 Serial.print(command);
 Serial.println("=========");
 Serial2.print(command);
 while ((millis() - T) < timeout)
 {
  while (Serial2.available())
  {
   res = Serial2.readStringUntil(delimiter);
   res.trim();
   if (res.length() > 0)
   {
    Serial.print("[SYS RES] ");
    Serial.println(res);
    return res;
   }
  }
 }
 return "TIMEOUT";
}

String receiveAddCommand(int32_t timeout)
{
 String res = "";
 uint32_t T = millis();
 while ((millis() - T) < timeout)
 {
  while (Serial2.available())
  {
   res = Serial2.readStringUntil('\0');
   res.trim();
   if (res.length() > 0)
   {
    Serial.print("[SYS RES] ");
    Serial.println(res);
    return res;
   }
  }
 }
 return res;
}

bool checkResponse(String response, String expected_response)
{
 if (response.indexOf(expected_response) != -1)
  return true;
 else
  return false;
}

bool sim7000_powerOn()
{
 pinMode(SIM7000_POWER_KEY, OUTPUT);
 delay(100);
 digitalWrite(SIM7000_POWER_KEY, LOW);
 delay(1000);
 digitalWrite(SIM7000_POWER_KEY, HIGH);
 delay(1000);
 for (uint8_t i = 0; i < 5; i++)
 {
  String response = sendCommand("AT\r\n", 200, '\n');
  if (checkResponse(response, "AT"))
  {
   sendCommand("ATE0\r\n", 200, '\n');
  }
  else if (checkResponse(response, "OK"))
  {
   return true;
  }

  delay(1000);
 }
 return false;
}

bool sim7000_powerOnGNSS()
{
 if (!checkResponse(sendCommand("AT+CGNSPWR=1\r\n", 200, '\n'), "OK"))
  return false;
 if (!checkResponse(sendCommand("AT+CGNSURC=1\r\n", 200, '\n'), "OK"))
  return false;

 return true;
}

void sim7000_parseGNSS(String input)
{
 // Serial.println(input);
 int firstCommaIndex = input.indexOf(",");
 int secondCommaIndex = input.indexOf(",", firstCommaIndex + 1);
 int thirdCommaIndex = input.indexOf(",", secondCommaIndex + 1);
 int fourthCommaIndex = input.indexOf(",", thirdCommaIndex + 1);
 int fifthCommaIndex = input.indexOf(",", fourthCommaIndex + 1);
 int sixthCommaIndex = input.indexOf(",", fifthCommaIndex + 1);

 int isGnssRun = input.substring(0, firstCommaIndex).toInt();
 if (isGnssRun == 0)
 {
  Serial.println("[SIM7000] GNSS is not running");
  return;
 }
 
 int isGnssFix = input.substring(firstCommaIndex + 1, secondCommaIndex).toInt();
 if (isGnssFix == 0)
 {
  Serial.println("[SIM7000] GNSS is not fixed");
  return;
 }

 Serial.print("Latitude : ");
 Serial.println(input.substring(thirdCommaIndex + 1, fourthCommaIndex));
 Serial.print("Longitude : ");
 Serial.println(input.substring(fourthCommaIndex + 1, fifthCommaIndex));
 Serial.print("Altitude : ");
 Serial.println(input.substring(fifthCommaIndex + 1, sixthCommaIndex));

 Serial.print("Date & Time : ");
 String datetime = input.substring(secondCommaIndex + 1, thirdCommaIndex);
 Serial.print(datetime.substring(6, 8));
 Serial.print("/");
 Serial.print(datetime.substring(4, 6));
 Serial.print("/");
 Serial.print(datetime.substring(0, 4));
 Serial.print(" ");
 Serial.print(datetime.substring(8, 10));
 Serial.print(":");
 Serial.print(datetime.substring(10, 12));
 Serial.print(":");
 Serial.print(datetime.substring(12, 14));
 Serial.print("\n");
}

bool gnssSetup()
{
 Serial2.begin(9600);
 Serial2.flush();
 Serial.println("[SIM7000] Turning ON...");
 if (sim7000_powerOn())
  Serial.println("Success");
 else
 {
  Serial.println("Failed");
  Serial.println("Hold PWRKEY for 3 seconds and press RST");
  return false;
 }

 Serial.println("[SIM7000] Turning ON GNSS...");
 if (sim7000_powerOnGNSS())
  Serial.println("Success");
 else
 {
  Serial.println("Failed");
  return false;
 }

 return true;
}

void setup()
{
 Serial.begin(115200);
 if (!gnssSetup())
 {
  while (1)
   delay(1000);
 }
}

void loop()
{
 String res = "";
 while (Serial2.available())
 {
  res = Serial2.readStringUntil('\0');
  res.trim();
  if (checkResponse(res, "+UGNSINF:"))
  {
   res.replace("+UGNSINF:","");
   sim7000_parseGNSS(res);
  }
 }
}


```

{% endcode %}

### 4. Penjelasan Kode Program

Supaya board **NB-LYNX-7000** dapat berkomunikasi dengan platform Antares, digunakan modul **SIM7000**. SIM7000 merupakan modul komunikasi seluler yang dikembangkan oleh SIMCom Wireless Solutions. Modul ini menerapkan beberapa protokol yang memungkinkan perangkat untuk terhubung ke jaringan menggunakan **AT command**. Berikut dijelaskan beberapa AT command yang digunakan pada kode program.

```
AT<CR><LF>
```

Pada kode program terdapat command "AT\r\n" yang dikirimkan sebagai starting point atau tahap inisialisasi modul SIM7000. \r merupakan carriage return , sedangkan \n merupakan line feed. Command ini dikirimkan untuk mendapatkan respons “OK”.

```
ATE0<CR><LF>
```

Pada kode program terdapat command "ATE0\r\n" yang dikirimkan setelah mendapatkan respons “OK”. Command ini digunakan untuk menonaktifkan echo mode yang menandakan bahwa inisialisasi telah berhasil.

```
AT+CGNSPWR=<mode><CR><LF>
```

Pada kode program terdapat command "AT+CGNSPWR=1\r\n" yang digunakan untuk melakukan power control modul GNSS. Parameter “1” digunakan untuk menyalakan power supply GNSS.&#x20;

{% hint style="info" %}
Berikut parameter \<mode> lainnya yang dapat digunakan.

* 0 = Mematikan power supply GNSS
* 1 = Menyalakan power supply GNSS
  {% endhint %}

```
AT+CGNSURC=<Navigation mode><CR><LF>
```

Pada kode program terdapat command "AT+CGNSURC=1\r\n" yang digunakan untuk menampilkan data navigasi. Parameter “1” digunakan untuk menampilkan data navigasi setiap kali GNSS menerima sinyal dari satelit.&#x20;

{% hint style="info" %}
Berikut beberapa parameter \<Navigation mode> lain yang dapat digunakan

* 0 = Mematikan data navigasi yang ditampilkan
* 1 = Menampilkan data navigiasi setiap kali GNSS menerima sinyal
* 2 = Menampilkan data navigasi sekali setiap GNSS telah menerima sinyal sebanyak 2 kali
* …
* 256 = Menampilkan data navigasi sekali setiap GNSS telah menerima sinyal sebanyak 256 kali
  {% endhint %}

### **5. Upload Program ke Board NB-LYNX-7000**

Pertama, Anda harus mengatur board yang digunakan dengan memilih **ESP32 Dev Module** pada bagian **Tools > Board > esp32**.

<figure><img src="/files/d4pWEd1Tb9LdIAUTEJZn" alt=""><figcaption><p>Pemilihan Board</p></figcaption></figure>

Setelah itu, Anda perlu mengatur port yang digunakan dengan membuka **Tools > Port > COM(X)**. Nilai X menyesuaikan dengan nomor port yang digunakan oleh board NB-LYNX-7000.

<figure><img src="/files/WM1RiTIRDyMYy7hJFPrv" alt=""><figcaption><p>Pemilihan Port</p></figcaption></figure>

Setelah Anda mempersiapkan kode program, selanjutnya Anda dapat meng-upload kode program tersebut dengan menekan tombol upload seperti ditunjukkan pada gambar di bawah.

<figure><img src="/files/qBFKLB9plRt1UxdurzYz" alt="" width="563"><figcaption><p>Upload Kode Program</p></figcaption></figure>

Jika kode program sudah berhasil di-upload, Anda dapat membuka Serial Monitor dengan menekan icon seperti ditunjukkan pada gambar di bawah. Icon tersebut dapat Anda temukan pada bagian atas sebelah kanan.

<figure><img src="/files/1KMF1RDGrN3I3dnm7Dkj" alt="" width="132"><figcaption><p>Ikon Serial Monitor</p></figcaption></figure>

Anda perlu mengatur baud rate Serial Monitor menjadi 115200 supaya output-nya dapat terbaca.

<figure><img src="/files/eh4mjOLNYPqntoS191ec" alt=""><figcaption><p>Baud Rate</p></figcaption></figure>

Tampilan Serial Monitor akan menjadi seperti pada gambar di bawah yang menandakan proses inisiasi modul SIM7000 dan proses menyalakan GNSS untuk mendapatkan data navigasi.

<figure><img src="/files/pwrClj0oFXH7G3bmThyP" alt=""><figcaption><p>Output Serial Monitor yang Menunjukkan Proses Inisiasi Modul SIM7000 dan Menyalakan GNSS</p></figcaption></figure>

Selanjutnya, GPS Antenna akan bekerja untuk menerima sinyal dari satelit untuk mendapatkan data GNSS berupa informasi navigasi yang terdiri dari latitude, longtitude, altitude, dan date & time.&#x20;

{% hint style="info" %}
GPS Antenna terkadang membutuhkan waktu yang cukup lama untuk menerima sinyal dari satelit hingga pada akhirnya data GNSS berhasil diterima. Pada kondisi ini, Anda dapat menunggunya beberapa saat.
{% endhint %}

{% hint style="info" %}
Jika sudah menunggu beberapa saat namun data GNSS belum berhasil diterima, maka besar kemungkinan GPS Antenna tidak menerima cukup sinyal dari satelit.
{% endhint %}

Ketika GPS Antenna tidak menerima cukup sinyal dari satelit, tampilan pada serial monitor akan menjadi seperti pada gambar di bawah.

<figure><img src="/files/Dv55c0yNOTHRgNDsBR3K" alt=""><figcaption><p>Output Serial Monitor Ketika Antenna Tidak Menerima Cukup Sinyal</p></figcaption></figure>

{% hint style="info" %}
Jika GPS Antenna tidak menerima cukup sinyal dari satelit, Anda dapat membawa GPS Antenna ke ruangan terbuka atau dengan mendekatkannya ke jendela.
{% endhint %}

Ketika antena telah menerima cukup sinyal, maka data GNSS yang akan ditampilkan pada serial monitor menjadi seperti pada gambar di bawah.

<figure><img src="/files/A4gET2SiSGgkjLYH7PlS" alt=""><figcaption><p>Output Serial Monitor ketika Telah Berhasil Menerima data GNSS</p></figcaption></figure>

Pada kondisi ini, GPS Antenna akan terus menerus menerima sinyal dari satelit untuk menampilkan data GNSS pada serial montior.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.antares.id/contoh-kode-dan-library/nb-iot/nb-lynx-7000/mengambil-data-gnss-global-navigation-satellite-system.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
