• Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
Kamis, Juni 19, 2025
mikroavr.com
No Result
View All Result
  • Login
  • Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
  • Arduino
    • Sensor
    • program Arduino
  • Project
  • Produk
  • IOT
No Result
View All Result
mikroavr
No Result
View All Result
Home IOT

Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

Jimmi Sitepu by Jimmi Sitepu
April 14, 2022
0 0
0
Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G
0
SHARES
901
VIEWS
Share on FacebookShare on Twitter

Pemilihan Jenis GPS

Membuat Logger GPS yang baik, tentu faktor utama nya adalah pemilihan jenis GPS yang akan kita gunakan. Akurasi GPS nya, kesetabilan pembacaan kordinate atau dari segi dimensi GPS itu sendiri.

Saya secara pribadi sudah mencoba beberapa jenis GPS, seperti

READ ALSO

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

  • Ublox Neo-6M, Neo-7M, dan Neo-8M
  • Quectel L80 dan Quectel L86

Dari semua jenis itu, yang terbaik menurut saya adalah Quectel L86, karena pembacaan GPS nya stabil, beda dengan yang lain, pembacaan GPS nya berpindah pindah. Dari sisi Akurasi juga hampir 3-4m dari titik sebenar nya.

Struktur nya juga bagus karena include antenna dalam board. Jika memerlukan antenna tambahan juga bisa di tambah. Baca-baca datasheet nya, ketika antenna external di tambah maka auto switch ke antenna external

Membaca GPS dengan Arduino

Sebelum membaca data GPS dari Quectel L86, kita akan lihat rangkaian dari GPS logger yang kita design ini

Rangkaian GPS

Pada Rangkaian sangat jelas terlihat, GPS_RXD terhubung ke GPIO16 dari ESP32, dan GPS_TXD terhubung ke GPIO17.

GPS_RXD terhubung ke GPIO16 dari ESP32, dan GPS_TXD terhubung ke GPIO17

Selanjut nya adalah tambah library berikut ke arduino, Download di link berikut ini,

download library gps arduino

Setelah di add library nya ke arduino IDE, langkah selanjut nya adalah membuat program seperti di bawah ini,

#include <TinyGPS++.h>
TinyGPSPlus gps;

// The serial connection to the GPS device
//SoftwareSerial ss(RXPin, TXPin);
#define ss Serial1
#define rst 32

String str_lat="";
String str_lon="";
String str_date="";
String str_time="";

void setup()
{
  Serial.begin(115200);
  pinMode(rst, OUTPUT);
  ss.begin(9600, SERIAL_8N1, 17, 16);
  delay(100);
  digitalWrite(rst, LOW);delay(500);
  //digitalWrite(rst, HIGH);delay(500);
  //digitalWrite(rst, LOW);delay(500);
  
}

void loop()
{
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while (true);
  }
}

void displayInfo()
{
  String str_buf_lat = "";
  String str_buf_lon = "";
  String str_buf_date = "";
  String str_buf_time = "";

  Serial.print(F("Location: "));
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
    str_buf_lat = String(gps.location.lat(), 6);
    str_buf_lat = String(gps.location.lng(), 6);
    str_lat = str_buf_lat;
    str_lon = str_buf_lon;
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
    str_buf_date = String(gps.date.month()) + "/" + String(gps.date.day()) + "/" + String(gps.date.year());
    str_date = str_buf_date;
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    str_buf_time = String(gps.time.hour()) + ":" + String(gps.time.minute()) + ":" + String(gps.time.second());
    str_time = str_buf_time;
    Serial.print(str_time);
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.println();
}

Buka Serial monitor dan lihat titik GPS yang terdeteksi.

Pastikan berada di luar gedung agar GPS terdeteksi

Akses SD Card Untuk Logger

Setelah GPS terdeteksi dengan baik, maka langkah selanjut nya adalah akses SD Card untuk penyimpanan data GPS dan timestamp ke dalam memory SD Card. Seperti di atas, kita check rangkaian nya dulu

Rangkain SD Card

Perhatikan rangkaian di atas, pin SD card terhubung ke GPIO ESP32, untuk mengkases SD card nya kita akan menggunakan HSPI dari ESP32, Program nya adalah sebagai berikut,

Pastikan SD card sudah terhubung ke SD card holder,

#include "FS.h"
#include "SD.h"
#include "SPI.h"
SPIClass spiSD(HSPI);
#define SD_CS 13
#define SDSPEED 27000000
File root;

unsigned long cur_time, old_time ;
bool stateLed = 0;

void setup() {
  Serial.begin(115200);
  pinMode(23, OUTPUT);
  
  spiSD.begin(14, 2, 15, 13); //SCK,MISO,MOSI,ss // инициализируем HSPI1
  while (!SD.begin( SD_CS, spiSD, SDSPEED)) {
    // if(!SD.begin()){
    Serial.println("Card Mount Failed");
    delay(1000);
  }
  Serial.println("found SD card");
  root = SD.open("/");
  printDirectory(root, 0);
  Serial.println("SD card Done");

}

void loop() {
  cur_time= millis();
  if(cur_time - old_time &amp;gt;= 1000){
    Serial.print("led millis: ");
    Serial.println(stateLed);
    stateLed = !stateLed;
    digitalWrite(23, stateLed);
    old_time = cur_time;
  }
}

void printDirectory(File dir, int numTabs) {
  while (true) {

    File entry =  dir.openNextFile();
    if (! entry) {
      // no more files
      break;
    }
    for (uint8_t i = 0; i &amp;lt; numTabs; i++) {
      Serial.print('\t');
    }
    Serial.print(entry.name());
    if (entry.isDirectory()) {
      Serial.println("/");
      printDirectory(entry, numTabs + 1);
    } else {
      // files have sizes, directories do not
      Serial.print("\t\t");
      Serial.println(entry.size(), DEC);
    }
    entry.close();
  }
}

Perhatikan Serial Monitor, jika sd card sudah terhubung dengan baik, maka akan terlihat seperti gambar di bawah ini

Serial Monitor SD Card

Logger GPS To SD Card

Sekarang saat nya kita logging data GPS ke SD card per 5 detik, yuk, gimana cara nya

#include "FS.h"
#include "SD.h"
#include "SPI.h"
SPIClass spiSD(HSPI);
#define SD_CS 13
#define SDSPEED 27000000
File root;

unsigned long cur_time, old_time;
unsigned long cur_time_log, old_time_log;
unsigned long cur_time_read, old_time_read;

bool stateLed = 0;

#include <TinyGPS++.h>
TinyGPSPlus gps;
#define ss Serial1

String str_lat = "";
String str_lon = "";
String str_date = "";
String str_time = "";

bool flag_gps, flag_date, flag_time = 0;
byte flag_sd_read = 0;


void setup() {
  Serial.begin(115200);
  ss.begin(9600, SERIAL_8N1, 17, 16);

  pinMode(23, OUTPUT);

  spiSD.begin(14, 2, 15, 13); //SCK,MISO,MOSI,ss // инициализируем HSPI1
  while (!SD.begin( SD_CS, spiSD, SDSPEED)) {
    // if(!SD.begin()){
    Serial.println("Card Mount Failed");
    Serial.println("please insert sd card");
    delay(1000);
  }
  delay(10000);
  Serial.println("read sd card log");
  //deleteFile(SD, "/logGps.csv");

}

void loop() {
  cur_time = millis();
  if (cur_time - old_time >= 1000) {
    stateLed = !stateLed;
    digitalWrite(23, stateLed);
    read_gps();
    old_time = cur_time;
  }

  cur_time_log=millis();
  if (cur_time_log - old_time_log >= 5000) {
    log_sd();
    old_time_log = cur_time_log;
  }

}

void read_gps() {
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      get_gps();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while (true);
  }
}

void get_gps() {
  String str_buf_lat = "";
  String str_buf_lon = "";
  String str_buf_date = "";
  String str_buf_time = "";

  Serial.print(F("Location: "));
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
    str_buf_lat = String(gps.location.lat(), 6);
    str_buf_lon = String(gps.location.lng(), 6);
    str_lat = str_buf_lat;
    str_lon = str_buf_lon;
    flag_gps = 1;
  }
  else
  {
    Serial.print(F("INVALID"));
    flag_gps = 0;
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
    str_buf_date = String(gps.date.month()) + "/" + String(gps.date.day()) + "/" + String(gps.date.year());
    str_date = str_buf_date;
    flag_date = 1;
  }
  else
  {
    flag_date = 0;
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    str_buf_time = String(gps.time.hour()) + ":" + String(gps.time.minute()) + ":" + String(gps.time.second());
    str_time = str_buf_time;
    Serial.print(str_time);
    flag_time = 1;
  }
  else
  {
    Serial.print(F("INVALID"));
    flag_time = 0;
  }
  flag_sd_read = flag_gps + flag_date + flag_time;
  Serial.print(", flag_sd: ");
  Serial.println(flag_sd_read);
}

void log_sd(){
  char chr_log[100];
  String str_log = "";
  
  if(flag_sd_read == 3){
    str_log = str_time + ", " + str_date + "," + str_lat + "," + str_lon + "\n";
    str_log.toCharArray(chr_log, str_log.length()+1);
    Serial.print("chr: ");
    Serial.println(chr_log);
    appendFile(SD, "/logGps.csv", chr_log);
    readFile(SD, "/logGps.csv");
  }
  
}

void appendFile(fs::FS &fs, const char * path, const char * message){
    Serial.printf("Appending to file: %s\n", path);

    File file = fs.open(path, FILE_APPEND);
    if(!file){
        Serial.println("Failed to open file for appending");
        return;
    }
    if(file.print(message)){
        Serial.println("Message appended");
    } else {
        Serial.println("Append failed");
    }
    file.close();
}

void readFile(fs::FS &fs, const char * path){
    Serial.printf("Reading file: %s\n", path);

    File file = fs.open(path);
    if(!file){
        Serial.println("Failed to open file for reading");
        return;
    }

    Serial.print("Read from file: ");
    while(file.available()){
        Serial.write(file.read());
    }
    file.close();
}

void deleteFile(fs::FS &fs, const char * path){
    Serial.printf("Deleting file: %s\n", path);
    if(fs.remove(path)){
        Serial.println("File deleted");
    } else {
        Serial.println("Delete failed");
    }
}

Hasil CSV seperti gambar di bawah ini

jika tertarik dengan produk kita di atas, cukup click whatsapp di bawah ini

whatsapp kami
ShareTweet
Previous Post

Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Next Post

Mendapatkan Waktu Akurat dengan NTP GPS

Jimmi Sitepu

Jimmi Sitepu

Hobbyist Embedded System, Robotic, IOT and write all about them. So we have nice quote "Learning and Sharing"

Related Posts

sensor URM14 Arduino
ESP32

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega
Arduino

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
Mendapatkan Waktu Akurat dengan NTP GPS
ESP32

Mendapatkan Waktu Akurat dengan NTP GPS

Mei 8, 2022
Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32
Arduino

Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Maret 9, 2022
saklar sms arduino sim800
Arduino

Saklar SMS Arduino dengan SIM800 Untuk Kontrol Jarak Jauh, Download Program nya

Februari 23, 2022
LoRa Shield Arduino Support Arduino Uno, Arduino mega dan Arduino Mega128
Arduino

LoRa Shield Arduino Support Arduino Uno, Arduino mega dan Arduino Mega128

Oktober 15, 2020
Next Post
Mendapatkan Waktu Akurat dengan NTP GPS

Mendapatkan Waktu Akurat dengan NTP GPS

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Please login to join discussion

Tulisan Terbaru

sensor URM14 Arduino

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
Mendapatkan Waktu Akurat dengan NTP GPS

Mendapatkan Waktu Akurat dengan NTP GPS

Mei 8, 2022
Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

Custome GPS Logger Arduino dengan Akeses Internet SIM7600 4G

April 14, 2022
Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Tutorial Menggunakan Weather Station DFRobot SEN0186 dengan Arduino ESP32

Maret 9, 2022
ethernet arduino

Arduino Ethernet Tutorial, Project dengan Arduino Uno dan Mega

Februari 24, 2022

Browse by Category

  • Arduino
  • Ebook
  • ESP32
  • IOT
  • jasa
  • Komponen
  • PCB
  • Produk
  • program Arduino
  • Project
  • Rangkaian
  • Sensor
  • Tips
  • Uncategorized

Recent News

sensor URM14 Arduino

Membaca Sensor URM14 RS485 dengan ESP32 Arduino

Juli 7, 2022
4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

4G GSM Modul Arduino SIM7600 Cocok Untuk ESP32, STM32 atau Arduino Mega

Juni 13, 2022
  • About US
  • Blog
  • MIKROAVR

© 2020 mikroavr.com - Learning and sharing.

Welcome Back!

Sign In with Google
OR

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist

No Result
View All Result
  • About US
  • Blog
  • MIKROAVR

© 2020 mikroavr.com - Learning and sharing.