아두이노 GPS 추적기 만들기 [esp8266/Blynk]
아두이노

아두이노 GPS 추적기 만들기 [esp8266/Blynk]

반응형

요즘 유용한 IOT 툴인 Blynk를 공부하는 중이다.

 

 

 

 

그 중 MAP 기능이 꽤나 쓸모있어 보인다. GPS 좌표값을 받아 지도에 표시해줄 수 있으므로 영화등에 자주 등장하는 GPS 추적기를 만드는데 제격일 것이다. 그래서 GPS모듈, esp8266, Blynk를 이용해 GPS 추적기를 만들어 보았다.

 

1. GPS 모듈

 


GPS 모듈의 가격은 천차만별인데, 이 프로젝트를 진행하기 위해 굳이 수만원의 비싼 (메X솔루션에 판매되는 것처럼) 비싼 모듈이 필요없다. 찾아보니 GY-GPS6MV2 (흔히 NEO-6M칩을 탑재한) 모듈이 자주 사용되는 듯 하다. 알리에서도 가격은 8천원 이하로 저렴한 편이다.

 

구입처 링크

반응형
 

4457.0₩ |1 pcs NEO 6M gps 모듈 GY GPS6MV2 neo6mv2 buit in eeprom arduino 비행 제어 3 v 5 v 용 apm2.5 안테나 rs232 tt

Smarter Shopping, Better Living! Aliexpress.com

ko.aliexpress.com

 

2. 회로

Wemos D1 mini와 위와 같이 연결하면 된다. RX와 TX의 핀 위치에 주의하자.

 

3. 소스코드

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

static const int RXPin = 4, TXPin = 5;   // GPIO 4=D2(conneect Tx of GPS) and GPIO 5=D1(Connect Rx of GPS)
static const uint32_t GPSBaud = 9600; //if Baud rate 9600 didn't work in your case then use 4800

TinyGPSPlus gps; // The TinyGPS++ object
WidgetMap myMap(V0);  // V0 for virtual pin of Map Widget

SoftwareSerial ss(RXPin, TXPin);  // The serial connection to the GPS device

BlynkTimer timer;

float spd;       //Variable  to store the speed
float sats;      //Variable to store no. of satellites response
String bearing;  //Variable to store orientation or direction of GPS

char auth[] = "*****";              //Your Project authentication key
char ssid[] = "*****";              // Name of your network (HotSpot or Router name)
char pass[] = "*****";              // Corresponding Password




//unsigned int move_index;         // moving index, to be used later
unsigned int move_index = 1;       // fixed location for now
  

void setup()
{
  Serial.begin(115200);
  Serial.println();
  ss.begin(GPSBaud);
  Blynk.begin(auth, ssid, pass);
  timer.setInterval(5000L, checkGPS); // every 5s check if GPS is connected, only really needs to be done once
}

void checkGPS(){
  if (gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
      Blynk.virtualWrite(V4, "GPS ERROR");  // Value Display widget  on V4 if GPS not detected
  }
}

void loop()
{

    while (ss.available() > 0) 
    {
      // sketch displays information every time a new sentence is correctly encoded.
      if (gps.encode(ss.read()))
        displayInfo();
  }
  Blynk.run();
  timer.run();
}

void displayInfo()
{ 

  if (gps.location.isValid() ) 
  {
    
    float latitude = (gps.location.lat());     //Storing the Lat. and Lon. 
    float longitude = (gps.location.lng()); 
    
    Serial.print("LAT:  ");
    Serial.println(latitude, 6);  // float to x decimal places
    Serial.print("LONG: ");
    Serial.println(longitude, 6);
    Blynk.virtualWrite(V1, String(latitude, 6));   
    Blynk.virtualWrite(V2, String(longitude, 6));  
    myMap.location(move_index, latitude, longitude, "GPS_Location");
    spd = gps.speed.kmph();               //get speed
       Blynk.virtualWrite(V3, spd);
       
       sats = gps.satellites.value();    //get number of satellites
       Blynk.virtualWrite(V4, sats);

       bearing = TinyGPSPlus::cardinal(gps.course.value()); // get the direction
       Blynk.virtualWrite(V5, bearing);               
      
    
  }
  

  Serial.println();
}

 

소스코드는 www.youtube.com/roboshala 의 프로젝트를 참고했다. Blynk를 사용해보았다면 알수있듯 본인의 Blynk 토큰을 입력해야 한다.

아래 라이브러리를 추가하고 코드를 보드에 업로드한다.

blynk-library-master.zip
다운로드
TinyGPSPlus-1.0.2.zip
다운로드

 

 

4. Blynk

 

Blynk 설정은 아래를 참고하자.

 

 

 

 

집밖에서 테스트 해보니 생각보다 위치가 정확히 측정된다. GPS신호를 잡기 위해서는 반드시 실외이어야 하며, WIFI에 연결하기 위해 핫스팟이나 포켓 WIFI등을 준비하면 좋다. GPS신호를 잡기까지 1~2분정도 소요되기도 한다. 일단 GPS 신호가 잡히면 GPS 모듈에 내장된 LED가 점멸한다. 이 글이 GPS 추적기를 만들려는 사람들에게 도움이 되길 바란다.

 

[수정]

혹시 작동되지 않는다면 본문의 회로에서 RX선과 TX선을 서로 바꾸어 연결해 보길 바란다.

 

반응형
    # 테스트용