본문 바로가기

ESP32

Xiao ESP32 S3를 사용한 지오펜스 기능이 있는 GPS 추적기 Seeed Studio

반응형

Seeed Studio를 사용하여 XIAO ESP32-S3 및 지오펜싱 기능을 갖춘 GPS 추적기를 제작하세요.

 

 

Xiao ESP32 S3를 사용한 지오펜스 기능이 있는 GPS 추적기

 

이 프로젝트는 Seeed Studio XIAO ESP32-S3 마이크로컨트롤러를 사용하여 자신만의 GPS 추적기를 만드는 방법을 다룹니다 . 일반적으로 GPS 추적기를 만들려면 SIM 카드, GSM 모듈, 그리고 위치 데이터를 휴대폰이나 컴퓨터로 전송하기 위한 통신 도구와 같은 추가 부품이 필요합니다. 하지만 Seeed Studio XIAO를 사용하면 GPS 추적기를 만드는 것이 그 어느 때보다 쉬워집니다. 이제 더 이상 문제가 되지 않습니다. Circuit Digest에서 개발한 GeoLinker 라는 효과적인 솔루션이 있기 때문입니다. GeoLinker를 사용하면 마이크로컨트롤러가 현재 GPS 좌표를 GeoLinker 서버로 직접 전송할 수 있으며, 서버에서는 지도에 위치를 표시하고 추적할 수 있습니다. 가장 좋은 점은 GeoLinker를 무료로 사용할 수 있다는 것입니다. 따라서 GSM 모듈의 비용과 복잡성 없이 GPS 프로젝트를 제작하고 테스트하려는 학생, 아마추어 및 엔지니어에게 매우 유용한 도구입니다. 이 종합 가이드에서는 SIM 카드나 고가의 GSM 모듈 없이도 지오펜싱 및 SMS 알림과 같은 고급 기능을 갖춘 완벽한 GPS 추적기를 Seeed Studio XIAO ESP32-S3를 사용하여 만드는 방법을 자세히 설명합니다.

 

Circuit Digest에서는 이미 ESP32Raspberry Pi Pico를 이용한 간단한 GPS 추적기를 제작했습니다 . 그렇다면 이번 프로젝트는 무엇이 특별할까요? 바로 GPS 추적 시스템을 더욱 효율적으로 만들어주는 기능이 추가되었기 때문입니다. 어떤 기능인지 궁금하신가요? 바로 SMS 알림 기능을 갖춘 지오펜스 설정 기능입니다. 그럼 이제 프로젝트를 자세히 살펴보겠습니다.

 

목차

샤오 ESP32-S3를 이용한 GPS 추적기는 무엇인가요?

└ 주요 특징

샤오 ESP32-S3 시스템을 이용한 GPS 추적기의 작동 방식

필요한 구성 요소

회로도

└ 핀 구성 및 연결 세부 정보

실시간 하드웨어 연결

GeoLinker 설정 및 API 구성

소스 코드 설명

작동 데모

GitHub 저장소

 

샤오 ESP32-S3를 이용한 GPS 추적기는 무엇인가요?

 

샤오 ESP32-S3를 이용한 GPS 추적기 로 휴대폰 요금제 없이도 Wi-Fi를 통해 기기와 반려동물의 위치를 ​​추적할 수 있습니다. 샤오 ESP32-S3는 Seeed Studio에서 제작한 소형 고성능 마이크로컨트롤러로, Neo-6M GPS 모듈과 호환됩니다. 이를 통해 GPS 위치 데이터가 샤오 ESP32-S3에서 클라우드 서버로 Wi-Fi를 통해 직접 전송됩니다.

 

샤오 ESP32-S3 GPS 트래커의 주요 특징

 

✓ 셀룰러 서비스 불필요 - 휴대폰 요금을 구매하지 않아도 되므로 비용을 절약할 수 있습니다.

✓ 지오펜싱 기술 - 지정된 영역을 벗어나면 자동으로 감지하여 알림을 보냅니다.

✓ SMS 알림 - 지오펜스를 벗어났을 때 기기의 정확한 위치 정보를 SMS로 알려줍니다.

✓ 오프라인 위치 저장 - Wi-Fi 연결이 끊어지면 위치 정보가 저장됩니다. Wi-Fi에 연결되면 저장된 위치 정보가 클라우드 서비스와 자동으로 동기화됩니다.

✓ 실시간 지도 - GeoLinker를 사용하여 대화형 지도에서 기기의 위치를 ​​추적할 수 있습니다.

✓ 무료 서비스 - GeoLinker 신규 사용자는 10,000건의 위치 기록을 무료로 저장할 수 있습니다.

 

샤오 ESP32-S3 시스템을 이용한 GPS 추적기의 작동 방식

 

Seeed Studio XIAO ESP32-S3를 사용하는 GPS 추적기는 기존 GSM 기반 추적기에 비해 여러 가지 장점을 제공합니다.

 

 

 

 

GPS 추적기 워크플로 다이어그램은 Neo-6M GPS 모듈에서 XIAO ESP32-S3를 거쳐 GeoLinker 클라우드 플랫폼으로 데이터가 흐르는 방식을 보여줍니다.

 

시스템 작동 단계별 안내

 

1. GPS 신호 수집: Neo-6M GPS 모듈은 GPS 위성 신호를 수신하여 정확한 위도 및 경도 좌표를 결정합니다.

 

2. 데이터 처리: XIAO ESP32-S3 마이크로컨트롤러는 9600bps의 속도로 작동하는 직렬 통신 채널(UART)을 통해 GPS 정보를 처리합니다.

 

3. Wi-Fi 전송: ESP32-S3는 15초마다(ESP32-S3에서 설정 가능) GPS 좌표를 GeoLinker 클라우드로 전송합니다.

 

4. 온라인 데이터 보관: GeoLinker 클라우드는 모든 위치 정보와 해당 타임스탬프를 저장하여 이동 기록을 완벽하게 보관합니다.

 

5. 지오펜스 모니터링: 하버사인 공식을 사용하여 설정된 홈 위치에서 현재 위치까지의 거리를 항상 계산합니다.

 

6. 알림: 장치가 설정된 50미터 경계(설정 가능)를 벗어나면 Circuit Digest 클라우드 SMS API를 통해 SMS 알림이 전송됩니다.

 

7. 오프라인 데이터 버퍼링: Wi-Fi 네트워크 연결이 끊어질 경우, ESP32-S3는 GPS 데이터를 데이터 버퍼에 저장합니다.

 

8. 데이터 동기화: 인터넷 연결이 복구되면 버퍼링된 데이터가 먼저 업로드됩니다. 이후 '실시간' 데이터 업로드가 순차적으로 진행됩니다.

 

비슷한 아이디어를 바탕으로 프로젝트를 진행해보고 싶으시다면, 저희의 다른 ESP32 프로젝트들을 살펴보세요 .

 

GPS 추적기에 필요한 구성 요소

 

필수 하드웨어

 

XIAO ESP32-S3를 사용하여 GPS 추적기를 제작할 때는 부품 품질이 중요합니다.

 

S.No Components Quantity Details
1. Xiao-ESP32-S3 1 Main microcontroller used for processing, Wi-Fi connectivity, and sending GPS data to the cloud.
2. Neo-6m Module 1 Receives satellite signals and provides real-time latitude and longitude coordinates.
3. Breadboard 1 Used to prototype the circuit without soldering.
4. Connecting Wires Required Amount  To establish connections between the ESP32-S3 and GPS module.
5. External GPS Antenna 1 Connects to the NEO-6M module to ensure strong and stable GPS satellite reception

 

1. 메인 마이크로컨트롤러는 처리, Wi-Fi 연결 및 GPS 데이터를 클라우드로 전송하는 데 사용됩니다.

2.  위성 신호를 수신하고 실시간 위도 및 경도 좌표를 제공합니다.

3. 납땜 없이 회로 프로토타입을 제작하는 데 사용됩니다.

4. 전선 연결 ESP32-S3와 GPS 모듈 간의 연결을 설정합니다.

5. 외부 GPS 안테나 NEO-6M 모듈에 연결하여 강력하고 안정적인 GPS 위성 수신을 보장합니다.

 

필수 소프트웨어

 

아두이노 IDE

필수 라이브러리:

GeoLinker 라이브러리(클라우드 통신용)

TinyGPSPlus 라이브러리(GPS 데이터 분석용),

WiFiClientSecure 라이브러리(HTTPS 연결용)

 

GPS 추적기 회로도

 

이제 회로도를 자세히 살펴보고 각 구성 요소가 어떻게 연결되고 전체 시스템이 어떻게 작동하는지 이해해 보겠습니다. 샤오 ESP32-S3를 사용한 GPS 추적기 제작을 위한 전체 회로 연결입니다.

 

 

 

 

GPS 추적기 프로젝트를 위한 샤오 ESP32-S3와 네오-6M GPS 모듈 간의 핀 연결을 보여주는 상세 회로도입니다.

 

회로도는 GPS 데이터 수신을 위해 Neo-6M 모듈이 ESP32-S3 에 연결되어 있음 을 보여줍니다. GPS 모듈은 ESP32-S3의 5V 및 접지 핀에서 전원을 공급받습니다. 시리얼 통신을 위해 모듈의 TX 핀은 ESP32-S3의 RX 핀 에 , 모듈의 RX 핀은 ESP32-S3의 TX 핀에 연결되어 원활한 데이터 전송이 가능합니다. 안정적인 GPS 신호 수신을 위해 외부 패치 안테나가 모듈에 연결되어 있습니다. Seeed Studio XIAO ESP32-S3를 사용한 이 GPS 추적기 회로 설계는 간단한 구조를 따릅니다.

 

핀 구성 및 연결 세부 정보

 

Neo-6M GPS Module Pin XIAO ESP32-S3 Pin Connection Type Notes
VCC 5V Power Supply Neo-6M requires 3.3V-5V; XIAO provides stable 5V output
GND GND Ground Reference Common ground essential for reliable communication
TX (Transmit) GPIO 44 (RX) Serial Data (GPS → ESP32) Transmits NMEA sentences at 9600 baud rate
RX (Receive) GPIO 43 (TX) Serial Data (ESP32 → GPS) Optional: for sending configuration commands to GPS

 

 

VCC 5볼트 전원 공급 장치 Neo-6M은 3.3V~5V의 전압이 필요하며, XIAO는 안정적인 5V 출력을 제공합니다.

접지 접지 지상 기준점 신뢰할 수 있는 소통을 위해서는 공통의 기반이 필수적입니다.

TX (송신) GPIO 44 (수신) 직렬 데이터(GPS → ESP32) NMEA 문장을 9600 보드율로 전송합니다.

RX (수신) GPIO 43 (TX) 직렬 데이터(ESP32 → GPS) (선택 사항: GPS에 구성 명령을 전송하기 위한 용도)

 

GPS 추적기의 실시간 하드웨어 연결

 

GPS 추적기의 실시간 하드웨어 연결은 모든 구성 요소가 어떻게 결합되어 완전한 작동 시스템을 형성하는지 보여줍니다.

 

 

 

브레드보드에 XIAO ESP32-S3와 외부 안테나가 장착된 Neo-6M GPS 모듈이 연결된 실시간 하드웨어 구성 화면입니다.

 

이 화면은 ESP32-S3 컨트롤러에 연결된 Neo-6M 모듈의 실시간 설정 화면을 보여줍니다. 보시는 바와 같이 외부 안테나가 모듈에 연결되어 GPS 신호를 수신하고 있습니다. 이것이 시스템의 전체 설정입니다.

 

GeoLinker 설정 및 API 구성

 

지오링커와 SMS 기능을 사용하려면 API 키가 필요합니다. API 키를 발급받으려면 아래 단계를 따르세요.

 

Circuit Digest 클라우드 계정 가입하기

 

Seeed Studio XIAO와 함께 GeoLinker의 GPS 추적기 시각화 및 SMS 기능을 사용하려면 Circuit Digest Cloud에서 API 키를 받아야 합니다.

 

Circuit Digest 클라우드 계정 생성 단계

 

Circuit Digest Cloud 홈페이지에 로그인 버튼과 GPS 추적기 API 접근을 위한 플랫폼 기능이 표시되어 있습니다.

 

 

 

⇒ 1단계: Circuit Digest 클라우드 플랫폼에 접속합니다.

 

Circuit Digest 클라우드 페이지를 방문하세요. 오른쪽 상단에 있는 " 로그인 " 버튼을 클릭하면 로그인 페이지로 이동합니다.

 

 

 

GeoLinker GPS 추적기 API에 접근하기 위한 새 계정 생성용 Circuit Digest 클라우드 등록 양식

 

⇒ 2단계: 새 계정 등록

 

이미 계정이 있으시면 기존 로그인 정보를 사용하여 로그인하세요. 계정이 없으시면 회원가입 페이지로 이동하여 필요한 정보를 입력하고 계정을 생성하세요. 완료되면 " 지금 등록하기 "를 클릭하여 가입하세요.

 

회원가입 후, 이메일 주소와 비밀번호를 사용하여 로그인 페이지에 로그인하세요. 다음 단계는 API 키를 생성하는 것입니다.

 

 

 

Circuit Digest Cloud의 API 키 생성 인터페이스에서 캡차 인증 및 사용 제한 사항을 보여줍니다.

 

⇒ 3단계: GeoLinker API 키 생성

 

로그인 후 오른쪽 상단에 있는 " 내 계정 "을 클릭하세요.

 

API 키를 생성할 수 있는 페이지로 이동합니다. 제공된 상자에 캡차 텍스트를 입력한 다음 " API 키 생성 " 버튼을 클릭하세요.

 

⇒ 4단계: SMS 알림을 위한 휴대폰 번호 연결하기

 

캡차가 올바르면 API 키, 만료일 , 사용 횟수가 표시된 표가 나타납니다. API 키 옆에 있는 복사 아이콘을 누르면 키가 클립보드에 즉시 복사됩니다. 이제 사이트에 휴대폰 번호를 연결하여 SMS 알림을 받으세요.

 

Circuit Digest Cloud는 XIAO ESP32-S3 기반 GPS 추적기에 대해 넉넉한 무료 데이터 사용량 제한을 제공합니다.

 

GPS 추적 데이터: API 키당 10,000개 데이터 포인트,

SMS API 호출: API 키당 100개 메시지,

ANPR API 호출: API 키당 100개 요청(향후 프로젝트용)

 

이 사용량 제한은 서버 과부하를 방지하기 위해 설정되었습니다.

 

GPS 추적기 소스 코드 설명

 

이 코드는 Xiao ESP32-S3를 초기화하고, Neo-6M GPS 모듈을 구성하며 , Wi-Fi를 통해 위치 데이터를 전송하기 위한 GeoLinker API를 설정합니다. setup() 함수는 GPS 통신을 설정하고, Wi-Fi 자격 증명을 로드하며, 업데이트 간격과 오프라인 저장소를 설정하여 GeoLinker 서비스를 준비합니다. 메인 루프는 GPS 좌표를 지속적으로 읽고, 유효한 데이터를 클라우드에 업로드하며, 장치가 미리 정의된 지오펜스 반경을 벗어났는지 확인합니다. 지오펜스 이탈이 감지되면 sendSMS() 함수는 Circuit Digest SMS API를 사용하여 경고 메시지를 전송합니다 . 또한, 이 코드는 하버사인 공식을 사용하여 거리를 계산하고, Wi-Fi 연결이 끊어질 경우 데이터를 임시로 저장하는 기능을 제공합니다.

 

아두이노 코드 전체 분석

 

Seeed Studio XIAO ESP32-S3를 사용하는 이 GPS 추적기의 펌웨어는 여러 라이브러리를 통합하고 정교한 지오펜싱 로직을 구현합니다.

 

#include <GeoLinker.h>
#include <TinyGPSPlus.h>
#include <WiFiClientSecure.h>
HardwareSerial gpsSerial(1);  
#define GPS_RX 44
#define GPS_TX 43
#define GPS_BAUD 9600

 

 

이 라이브러리들은 클라우드 통신, GPS 데이터 디코딩 및 보안 HTTPS를 처리합니다.Serial1은 44번 핀(수신) 과 43번 핀(송신) 을 사용하여 9600bps 의 전송 속도로 Neo-6M GPS 모듈용으로 구성되어 있습니다.

 

이 상수들은 XIAO ESP32-S3를 탑재한 GPS 추적기의 Wi-Fi 자격 증명 및 GeoLinker 구성을 정의합니다.

 

const char* ssid = "Yourname";
const char* password = "yourpassword";
const char* apiKey = "youruniqueapikey";
const char* deviceID = "ESP-32_Tracker";
const uint16_t updateInterval = 15;
const bool enableOfflineStorage = true;

 

 

이 섹션에서는 GPS 데이터를 GeoLinker 클라우드에 업로드하는 데 필요한 Wi-Fi 자격 증명과 API 세부 정보를 설정합니다 . ESP32는 15초 마다 한 번씩 업데이트를 전송하고 Wi-Fi 연결이 끊어진 경우 데이터를 오프라인에 저장합니다.

 

const float homeLat = 11.011160;
const float homeLon = 77.013080;
bool alertSent = false;
double distanceBetween(double lat1, double lon1, double lat2, double lon2) {
 double R = 6371000;
 double dLat = radians(lat2 - lat1);
 double dLon = radians(lon2 - lon1);  
...}

 

집 좌표는 지오펜스의 중심을 정의합니다.

 

distanceBetween() 함수는 하버사인 공식을 사용하여 트래커와 설정된 지오펜스 영역 사이의 거리를 계산합니다.

 

Circuit Digest 클라우드 API를 이용한 SMS 알림 기능

 

void sendSMS(float latitude, float longitude) {
 WiFiClientSecure client;
 client.setInsecure();
 HTTPClient http;
 String apiUrl = "https://www.circuitdigest.cloud/send_sms?ID=" + String(templateID);
 http.begin(client, apiUrl);
 http.addHeader("Authorization", apiKey);
 http.addHeader("Content-Type", "application/json");
 String payload = "{\"mobiles\":\"" + String(mobileNumber) +
                  "\",\"var1\":\"ESP32\",\"var2\":\"" +
                  String(latitude, 6) + "," + String(longitude, 6) + "\"}";
 http.POST(payload);
}

 

 

샤오 ESP32-S3 장치가 내장된 GPS 추적기가 울타리를 넘으면, 이 기능은 Circuit Digest Cloud SMS API를 통해 현재 GPS 위치 정보를 포함한 SMS 알림을 전송 합니다 .

 

uint8_t status = geo.loop();
while (gpsSerial.available()) gps.encode(gpsSerial.read());
if (gps.location.isUpdated()) {
 float latitude = gps.location.lat();
 float longitude = gps.location.lng();
 double dist = distanceBetween(homeLat, homeLon, latitude, longitude);
 if (dist > 50 && !alertSent) {
   sendSMS(latitude, longitude);
   alertSent = true;
 }
 if (dist <= 50 && alertSent) alertSent = false;
}

 

 

GeoLinker 루프는 데이터 업로드 및 오프라인 버퍼링을 자동으로 처리합니다.

 

새로운 GPS 데이터가 도착하면 거리가 계산됩니다.

  • 거리가 50m를 초과 하면 SMS 알림이 전송됩니다.
  • 추적기가 경계선 안으로 돌아오면 알림이 초기화됩니다.

 

좋습니다, 이제 코드를 업로드하고 시스템이 어떻게 작동하는지 확인해 보겠습니다.

 

코드 최적화 및 사용자 정의

 

Seeed Studio XIAO ESP32 S3를 사용하면 GPS 추적기용 펌웨어를 다른 용도로도 맞춤 설계할 수 있습니다.

 

  • 업데이트 간격 - 정확도와 데이터 사용량 간의 균형을 맞추려면 updateInterval 변수(범위: 1~60초)를 필요에 맞게 변경하십시오.
  • 지오펜스 반경 - 특정 모니터링 요구 사항에 맞게 지오펜스 반경을 조정하십시오. (10~5000미터)
  • 여러 개의 지오펜스 - 좌표 또는 위치 배열을 설정하여 적절한 지오펜스 영역을 계산함으로써 여러 개의 지오펜스를 모니터링할 수 있습니다.
  • 과속 경고 - 과속 경고 알림을 생성하려면 GPS.speed.kmph() 조건문을 추가하세요.
  • 배터리 모니터링 - 배터리 모니터링 장치를 사용하여 배터리 상태를 확인하고, 필요한 경우 배터리 잔량이 부족할 때 알림을 받도록 설정하십시오.

 

실시간 GPS 추적기 작동 시연

 

저는 스마트폰 핫스팟을 인터넷 소스로 사용했습니다. PC의 USB 포트를 통해 시스템에 전원을 공급한 후, 모바일 Wi-Fi 핫스팟을 활성화하자 ESP32-S3가 즉시 연결되었습니다.

 

 

 

샤오 ESP32-S3 GPS 트래커가 모바일 핫스팟에 성공적으로 연결되어 Wi-Fi 상태를 표시합니다.

 

네트워크 연결이 끊어지더라도 데이터는 로컬에 저장되므로 정보 손실은 없습니다. 네트워크 연결이 복구되면 로컬에 저장된 데이터가 클라우드 서버로 전송되고, 이후 새로운 데이터가 추가되면 클라우드에 업로드됩니다.

 

 

 

GPS 추적기의 오프라인 모드는 Wi-Fi 연결이 끊어졌을 때 로컬 데이터 버퍼링을 보여줍니다.

 

이제 사무실을 벗어나 지도가 어떻게 작동하는지 살펴보겠습니다. 아래 이미지는 GPS 추적 시스템이 원활하게 시작되는 모습을 보여줍니다. 데이터는 지도에 표시됩니다. 15초마다 데이터가 전송됩니다.

 

 

 

GeoLinker 지도 인터페이스는 경로 기록과 함께 실시간 GPS 추적 데이터를 보여줍니다.

 

이 시스템에는 지오펜스 기능이 추가되었습니다 . 집이나 사무실 위치와 같은 특정 좌표를 이미 입력해 두었고, 이 좌표는 코드에 포함되어 있습니다. 경계 범위도 설정했습니다. 시스템이 이 범위를 벗어나면 Circuit Digest의 SMS API가 Circuit Digest 클라우드에 등록된 번호로 문자 메시지를 전송합니다. 이 메시지에는 시스템의 현재 위도와 경도가 포함됩니다. 시스템이 경계 범위 내로 돌아오면 지오펜스가 재설정됩니다. 따라서 시스템이 다시 범위를 벗어나면 등록된 번호로 또 다른 알림 문자 메시지가 전송됩니다.

 

 

 

지오펜스 침입 시 GPS 좌표가 포함된 SMS 알림을 휴대전화로 수신했습니다.

 

위 이미지는 지오펜스 이탈 실시간 테스트 결과입니다. GPS가 경계 범위를 벗어나자 시스템이 자동으로 SMS 시스템을 작동시켜 이미지에 표시된 지정된 번호로 현재 좌표를 전송합니다. 시스템이 경계 안으로 다시 진입하면 지오펜스는 재설정됩니다.

 

긴 여정 끝에 사무실에 도착했습니다. 지도를 보면서 우리가 어디를 이동했는지 확인해 보겠습니다.

 

 

 

전체 여정과 모든 경유지를 보여주는 완벽한 GPS 추적 경로 지도

 

위 지도는 출발점에서 얼마나 이동했는지, 그리고 이동한 지역을 실시간으로 보여주는 실시간 데이터 입니다.

 

실제 적용 사례

 

» 차량 및 차량 관리: 이러한 실시간 추적 기능과 지오펜싱 알림 및 경로 기록 기능을 통합하면 배차 및 경로 계획이 크게 개선될 것입니다.

 

» 자산 보호: 고가의 장비를 카메라로 감시할 수 있으며, 누군가 허가 없이 장비를 이동시키면 문자 메시지로 알림을 받을 수 있습니다. 장비 크기가 작아 쉽게 숨길 수 있습니다.

 

» 아동 안전: 자녀의 위치를 ​​파악하고, 지정된 구역을 벗어나면 알림을 받고, 해당 데이터를 일상적으로 활용할 수 있습니다.

 

» 노인 모니터링: 간병인은 치매 또는 거동이 불편한 노인이 위험 구역에 접근했을 경우 알림을 받아 상황을 파악할 수 있으며, 데이터를 로컬에 저장하는 기능은 데이터 손실을 방지합니다.

 

» 반려동물 위치 추적: 지오펜싱 알림 시스템과 이동 경로 기록, 그리고 방수 기능이 있는 목걸이 부착 장치를 통해 잃어버린 반려동물을 신속하게 찾을 수 있습니다.

 

GitHub 저장소 및 소스 파일

 

Seeed Studio XIAO 프로젝트를 사용한 이 GPS 추적기의 전체 소스 코드, 회로도 및 문서를 확인하세요.

 

Xiao ESP32-S3 파일을 사용한 지오펜스 기능이 있는 GPS 추적기Xiao ESP32-S3 Zip Fly를 사용한 지오펜스 기능이 있는 GPS 추적기

 

Seeed Studio Xiao ESP32-S3를 사용하여 저렴하면서도 완벽하게 작동하는 GPS 추적기를 제작했습니다 . 이 시스템은 실시간 데이터를 전송하며, Geolinker 앱을 통해 간편하게 모니터링할 수 있습니다. 이전 프로젝트와 차별화되는 새로운 기능 중 하나는 지오펜싱 및 SMS 알림 기능 입니다 . 이러한 기능 덕분에 차량 모니터링, 자산 추적 등 실제 응용 분야에서 유용하게 활용할 수 있습니다. 이 프로젝트는 클라우드 기반 API를 통해 고가의 GSM 기반 하드웨어 없이도 IoT 개발을 간소화할 수 있음을 보여줍니다. Wi-Fi 기반 추적, 오프라인 안정성, 경로 시각화, SMS 알림 기능을 결합한 이 GPS 추적기는 다양한 위치 기반 애플리케이션에 효과적이고 유연하며 실용적인 솔루션을 제공합니다. XIAO ESP32-S3를 활용한 이 GPS 추적기 외에도 IoT 분야에 대한 전문성을 확장하고 싶은 엔지니어와 메이커라면 저희가 개발한 다양한 IoT 프로젝트들을 살펴보세요 . 배우고 영감을 얻을 수 있는 자료들이 많이 있습니다.

 

자주 묻는 질문(FAQ)

 

⇥ 1. GPS 추적기 프로젝트의 주요 목적은 무엇입니까?

 

이 프로젝트의 주요 목적은 누구나 쉽게 접근하고 복제할 수 있는 간단하고 저렴한 GPS 추적기를 개발하여 일상생활에서 활용할 수 있도록 하는 것입니다.

 

⇥ 2. 이 추적기는 왜 SIM 카드나 GSM 모듈이 필요하지 않나요?

 

ESP32-S3가 Wi-Fi 네트워크 연결을 직접 사용하기 때문입니다.

 

⇥ 3. Wi-Fi 연결이 끊어지면 어떻게 되나요?

 

추적기는 오프라인 데이터 저장 기능을 제공합니다. Wi-Fi를 사용할 수 없는 경우 GPS 좌표를 로컬에 임시로 저장하고 연결이 복구되면 자동으로 업로드합니다.

 

⇥ 4. 이 프로젝트에서 지오펜싱이란 무엇인가요? 지오펜싱을 사용하면 가상의 경계 (예: 반경 50m 또는 5km) 를

 

설정할 수 있습니다 . 추적기가 이 경계를 넘으면 시스템은 지정된 휴대폰 번호로 SMS 알림을 보냅니다 .

 

⇥ 5. 이 추적기는 실생활에 사용할 수 있나요?

 

네. 다음과 같은 용도에 적합합니다.

 

실시간 차량 추적

 

자산 모니터링

 

⇥ 6. 업데이트 간격을 변경할 수 있나요?

 

네, 데이터 업데이트 시간은 필요에 따라 조정할 수 있습니다.

 

⇥ 7. GPS 추적기와 Wi-Fi 액세스 포인트 사이의 최대 거리는 얼마입니까?

 

일반적으로 ESP32-S3를 Wi-Fi에 연결했을 때 두 장치가 시야 내에 있을 경우 약 50~100미터의 범위가 가능하며, 벽이나 기타 장애물을 통과할 경우 20~40미터까지 확장됩니다. 차량을 추적할 경우, 휴대폰에서 생성된 핫스팟에 연결하면 셀룰러 신호가 있는 곳이라면 어디든 차량을 추적할 수 있습니다. 영구 설치의 경우, 수백 미터까지 커버리지를 제공하는 Wi-Fi 범위 확장기를 사용할 수 있습니다.

 

⇥ 8. 하나의 GeoLinker 계정으로 여러 기기를 추적할 수 있나요?

 

네, 가능합니다. 단, 각 GPS 추적기에 대해 작성하는 코드에 고유한 기기 ID를 할당해야 합니다. 완료되면 모든 기기가 하나의 GeoLinker 지도 인터페이스에 표시되며, 각 기기의 추적 경로는 서로 다른 색상으로 구분됩니다. 모든 기기의 기록을 검토하고, 경로를 비교하고, 여러 개의 지오펜스를 관리할 수 있습니다. 모든 기기는 API 키에 할당된 10,000개의 데이터 포인트 용량을 동일하게 사용한다는 점에 유의하세요.

 

 

#include <GeoLinker.h>
#include <TinyGPSPlus.h>
#include <WiFiClientSecure.h>
void sendSMS(float latitude, float longitude);
// ==================================================================
//                    HARDWARE CONFIGURATION
// ==================================================================
// GPS Serial Communication Setup
HardwareSerial gpsSerial(1);  // Using Serial1 for GPS communication
#define GPS_RX 44            // GPIO43 connected to GPS module TX pin
#define GPS_TX 43             // GPIO44 connected to GPS module RX pin
// GPS Communication Settings
#define GPS_BAUD 9600         // Standard NMEA GPS baud rate (9600 bps)
// ==================================================================
//                    NETWORK CONFIGURATION
// ==================================================================
// WiFi Network Credentials
const char* ssid = "Yourname";       // Your WiFi network name (SSID) 
const char* password = "yourpassword";    
// ==================================================================
//                   GEOLINKER CONFIGURATION
// ==================================================================
// API Authentication
const char* apiKey = "youruniqueapikey";    // Your unique GeoLinker API key 
const char* deviceID = "ESP-32_Tracker";
const char* templateID = "110";
const char* mobileNumber = "yournumber";
// Data Transmission Settings
const uint16_t updateInterval = 15;       // How often to send data (seconds)
const bool enableOfflineStorage = true; // Store data when offline
const uint8_t offlineBufferLimit = 20;  // Maximum offline records to store
                                      // Keep minimal for MCUs with limited RAM
// Connection Management
const bool enableAutoReconnect = true;  // Automatically reconnect to WiFi
                                      // Note: Only applies to WiFi, ignored with GSM
// Timezone Configuration
const int8_t timeOffsetHours = 5;       // Timezone hours offset from UTC
const int8_t timeOffsetMinutes = 30;
const float homeLat = 11.011160;
const float homeLon =77.013080;
bool alertSent = false;  
   // Timezone minutes offset from UTC
                                     // Example: IST = UTC+5:30
// Create GeoLinker instance
GeoLinker geo;
TinyGPSPlus gps;
// ==================================================================
//                    INITIALIZATION SETUP
// ==================================================================
// Calculate distance between two coordinates (in meters)
double distanceBetween(double lat1, double lon1, double lat2, double lon2) {
 double R = 6371000; // Earth radius in meters
 double dLat = radians(lat2 - lat1);
 double dLon = radians(lon2 - lon1);
 double a = sin(dLat/2) * sin(dLat/2) +
            cos(radians(lat1)) * cos(radians(lat2)) *
            sin(dLon/2) * sin(dLon/2);
 double c = 2 * atan2(sqrt(a), sqrt(1-a));
 return R * c;
}
void sendSMS(float latitude, float longitude) {
 Serial.println(" SMS FUNCTION CALLED");
 WiFiClientSecure client;
 client.setInsecure();  // Disable certificate check
 HTTPClient http;
 String apiUrl = "https://www.circuitdigest.cloud/send_sms?ID=" + String(templateID);
 Serial.print("SMS API URL: ");
 Serial.println(apiUrl);
 http.begin(client, apiUrl);
 http.addHeader("Authorization", apiKey);
 http.addHeader("Content-Type", "application/json");
 // JSON template
String payload = "{\"mobiles\":\"" + String(mobileNumber) +
                "\",\"var1\":\"ESP32" +
                "\",\"var2\":\"" + String(latitude, 6) + "," + String(longitude, 6) + "\"}";
 Serial.print("SMS JSON Payload: ");
 Serial.println(payload);
 int code = http.POST(payload);
 Serial.print(" SMS HTTP Response Code: ");
 Serial.println(code);
 String response = http.getString();
 Serial.print(" SMS Server Response: ");
 Serial.println(response);
 http.end();
}
void setup() {
// Initialize serial communication for debugging
Serial.begin(115200);
delay(1000);  // Allow serial to initialize
Serial.println("Starting GeoLinker GPS Tracker...");
// Initialize GPS serial communication with custom pins
gpsSerial.begin(GPS_BAUD, SERIAL_8N1, GPS_RX, GPS_TX);
Serial.println("GPS Serial initialized on pins 16(RX) and 17(TX)");
// ==================================================================
//                   GEOLINKER LIBRARY SETUP
// ==================================================================
// Initialize GeoLinker with GPS serial interface
geo.begin(gpsSerial);
Serial.println("GeoLinker library initialized");
// Configure API authentication
geo.setApiKey(apiKey);
Serial.println("API key configured");
// Set unique device identifier
geo.setDeviceID(deviceID);
Serial.println("Device ID set");
// Configure data transmission interval
geo.setUpdateInterval_seconds(updateInterval);
Serial.print("Update interval set to ");
Serial.print(updateInterval);
Serial.println(" seconds");
// Set debug verbosity level
// Options: DEBUG_NONE, DEBUG_BASIC, DEBUG_VERBOSE
geo.setDebugLevel(DEBUG_BASIC);
Serial.println("Debug level set to BASIC");
// Enable offline data storage capability
geo.enableOfflineStorage(enableOfflineStorage);
if(enableOfflineStorage) {
  Serial.println("Offline storage enabled");
}
// Enable automatic WiFi reconnection
geo.enableAutoReconnect(enableAutoReconnect);
if(enableAutoReconnect) {
  Serial.println("Auto-reconnect enabled");
}
// Set maximum offline buffer size (important for memory management)
geo.setOfflineBufferLimit(offlineBufferLimit);
Serial.print("Offline buffer limit set to ");
Serial.print(offlineBufferLimit);
Serial.println(" records");
// Configure timezone offset for accurate timestamps
geo.setTimeOffset(timeOffsetHours, timeOffsetMinutes);
Serial.print("Timezone offset set to UTC+");
Serial.print(timeOffsetHours);
Serial.print(":");
Serial.println(timeOffsetMinutes);
// ==================================================================
//                    NETWORK CONNECTION SETUP
// ==================================================================
geo.setNetworkMode(GEOLINKER_WIFI);
Serial.println("Network mode set to WiFi");
// Set WiFi network credentials
geo.setWiFiCredentials(ssid, password);
Serial.println("WiFi credentials configured");
// Attempt WiFi connection
Serial.print("Connecting to WiFi network: ");
Serial.println(ssid);
if (!geo.connectToWiFi()) {
  Serial.println("ERROR: WiFi connection failed!");
  Serial.println("Device will continue with offline storage mode");
} else {
  Serial.println("WiFi connected successfully!");
}
Serial.println("\n" + String("=").substring(0,50));
Serial.println("GeoLinker GPS Tracker setup complete!");
Serial.println("Starting main tracking loop...");
Serial.println(String("=").substring(0,50) + "\n");
}
// ==================================================================
//                   MAIN PROGRAM LOOP
// ==================================================================
void loop() {
uint8_t status = geo.loop();
if (status > 0) {
  Serial.print("[STATUS] GeoLinker Operation: ");
  switch(status) {
    case STATUS_SENT:
      Serial.println("✓ Data transmitted successfully to cloud!");
      break;
    case STATUS_GPS_ERROR:
      Serial.println("✗ GPS module connection error - Check wiring!");
      break;
    case STATUS_NETWORK_ERROR:
      Serial.println(" Network connectivity issue - Data buffered offline");
      break;
    case STATUS_BAD_REQUEST_ERROR:
      Serial.println(" Server rejected request - Check API key and data format");
      break;
    case STATUS_PARSE_ERROR:
      Serial.println(" GPS data parsing error - Invalid NMEA format");
      break;
    case STATUS_INTERNAL_SERVER_ERROR:
      Serial.println(" GeoLinker server internal error - Try again later");
      break;
    default:
      Serial.print("? Unknown status code: ");
      Serial.println(status);
      break;
  }
}
while (gpsSerial.available() > 0) {
 gps.encode(gpsSerial.read());
}
if (gps.location.isUpdated()) {
float latitude = gps.location.lat();
float longitude = gps.location.lng();
double dist = distanceBetween(homeLat, homeLon, latitude, longitude);
Serial.print("Distance from home (meters): ");
Serial.println(dist);
if (dist > 50 && !alertSent) {                                              
   Serial.println(" GEOFENCE BREACH! Sending SMS...");
   sendSMS(latitude, longitude);
   alertSent = true;
}
if (dist <= 50 && alertSent) {
   Serial.println("Bike returned inside geofence.");
   alertSent = false;
}
   }
delay(100);
}

 

 

다른 위치 추적 프로젝트도 시도해 보세요

위치를 추적하고 지도에 데이터를 표시하는 데 GPS와 마이크로컨트롤러를 사용하는 유사한 프로젝트들입니다.

STM32F103C8에서 GPS 모듈을 사용하여 위치 좌표를 얻는 방법

이 튜토리얼에서는 GPS 모듈을 STM32 기반 STM32F103C8 마이크로컨트롤러와 연결하여 위치 좌표를 찾고 16x2 LCD 디스플레이에 표시하는 방법을 설명합니다.

NodeMCU와 GPS 모듈을 활용한 IoT 기반 GPS 위치 추적기 - GPS 좌표 저장 및 구글 지도에서 보기

이 DIY 튜토리얼에서는 NEO-6M GPS 모듈을 사용하여 IoT 기반 GPS 위치 추적기를 제작합니다. 이 위치 추적기 보드는 NodeMCU, OLED 디스플레이 모듈, NEO-6M GPS 모듈 및 3.7V에서 6V로 전압을 높이는 부스터 회로로 구성됩니다. 위치 추적 및 자산 추적에 적합합니다.

GPS 및 GSM을 이용한 아두이노 기반 차량 추적기

이 차량 추적 시스템은 하드웨어와 소프트웨어를 약간만 변경하면 사고 감지 경보 시스템, 군인 추적 시스템 등 다양한 용도로 활용할 수 있습니다.

 

 

이 튜토리얼의 원문 문서는 다음 링크를 참고하세요. 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩