Skip to content
Home » 아두 이노 Gps | 5분 Neo-6M Gps모듈 아두이노 완벽 활용법 최근 답변 278개

아두 이노 Gps | 5분 Neo-6M Gps모듈 아두이노 완벽 활용법 최근 답변 278개

당신은 주제를 찾고 있습니까 “아두 이노 gps – 5분 NEO-6M GPS모듈 아두이노 완벽 활용법“? 다음 카테고리의 웹사이트 https://kk.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://kk.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 DeviceMart 이(가) 작성한 기사에는 조회수 10,324회 및 좋아요 64개 개의 좋아요가 있습니다.

아두 이노 gps 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 5분 NEO-6M GPS모듈 아두이노 완벽 활용법 – 아두 이노 gps 주제에 대한 세부정보를 참조하세요

NEO-6M GPS모듈을 아두이노 UNO에 연결하고 GPS를 사용해봅니다.
[디바이스마트]NEO-6M GPS 모듈 GY-GPS6MV2 [SZH-EK095]http://www.devicemart.co.kr/goods/view?no=1321968

아두 이노 gps 주제에 대한 자세한 내용은 여기를 참조하세요.

[아두이노 강좌] GPS 수신 모듈 NEO-6M – 네이버 블로그

GPS 수신 모듈은 아두이노와 시리얼 통신을 통해 비교적 간단하게 GPS를 확인할 수 있는 모듈입 니다. GPS는 Global Positioning System의 약어로 …

+ 여기에 보기

Source: m.blog.naver.com

Date Published: 12/1/2021

View: 9266

[아두이노] GPS 모듈의 사용 1편 – GPS 로그 찍어보기

아두이노에 GPS 모듈을 연결하면 자신의 현재위치 등의 정보를 알 수 있습니다. GPS 는 Global Positioning System 의 약자로서 미국 국방부에서 띄운 …

+ 여기에 표시

Source: deneb21.tistory.com

Date Published: 2/22/2022

View: 9185

[Arduino]아두이노 GPS 모듈 사용하기 – SolITLab – 티스토리

이전 포스팅에서 아두이노 프로젝트의 하드웨어에는 GPS모듈, 블루투스 모듈을 사용하였고 하드웨어의 소형화를 위해 보드는 아두이노 나노를 사용 …

+ 여기에 자세히 보기

Source: sol2gram.tistory.com

Date Published: 10/22/2022

View: 4827

GPS 센서 NEO-6M 연결하기 (아두이노) – 천보기의 IT 학습마당

GPS(Global Positioning System)은 현재의 위치정보를 획득하는 용도로 사용합니다. 아두이노와 라즈베리파이에서 사용 가능한 GPS 센서인 NEO-6M을 …

+ 여기에 표시

Source: zifmfmphantom.tistory.com

Date Published: 3/15/2021

View: 7720

아두이노 gps – 검색결과 – 쇼핑하우

아두이노 GPS 확장 SPI통신 쉴드 (안테나 포함). 55,000원. 인터파크 배송 3,000원 … 아두이노 B30 아두이노 GPS 모듈 NEO-6M NEO6MV2 멀티콥터. 16,460원.

+ 여기에 자세히 보기

Source: m.shoppinghow.kakao.com

Date Published: 5/8/2022

View: 4239

GY-GPS6MV2 GPS 모듈 사용 부터 위도 경도 파싱까지 – 커피백작

아두이노 스케치에 처음 업로드 할 소스는 다음과 같습니다. #include . SoftwareSerial gpsSerial(10,11);. // gps – arduino. // tx – 10.

+ 자세한 내용은 여기를 클릭하십시오

Source: lamlic36.tistory.com

Date Published: 10/24/2021

View: 9519

아두이노로 GPS 신호를 직접 처리(분석) 하기

아두이노로 GPS 신호를 직접 처리(분석) 하기. 현재 작업중이 차량 대시보드에 붙이려고 GPS수신모듈을 구매하여 진행방향과 고도 정보를 표시하려고 …

+ 여기에 더 보기

Source: clemencyking.tistory.com

Date Published: 10/23/2021

View: 3893

NEO-7M 아두이노 GPS 수신모듈 [SZH-NT07] / 디바이스마트

아두이노, 라즈베리파이, 멀티콥터 등에 응용 가능한 GPS 모듈입니다. 동작전압 : 2.7-5V 동작전류 : 35mA 송수신임피던스 : 510Ω 안테나크기 : 25×25mm

+ 여기를 클릭

Source: www.devicemart.co.kr

Date Published: 6/14/2021

View: 6697

주제와 관련된 이미지 아두 이노 gps

주제와 관련된 더 많은 사진을 참조하십시오 5분 NEO-6M GPS모듈 아두이노 완벽 활용법. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

5분 NEO-6M GPS모듈 아두이노 완벽 활용법
5분 NEO-6M GPS모듈 아두이노 완벽 활용법

주제에 대한 기사 평가 아두 이노 gps

  • Author: DeviceMart
  • Views: 조회수 10,324회
  • Likes: 좋아요 64개
  • Date Published: 2020. 3. 3.
  • Video Url link: https://www.youtube.com/watch?v=fPs7gJkGZFE

[아두이노 강좌] GPS 수신 모듈 NEO-6M : 네이버 블로그

2) 위도와 경도 확인하기

– $GPGGA는 GPS 신호의 위치, 시간, 속도 등의 다양한 정보를 축약하여 담고 있습니다.

그렇기 때문에 $GPGGA의 값을 그대로 지도에서 읽어내려 한다면 제대로 된 위치가

나오지 않습니다.

아래 사이트를 통해 $GPGGA값을 우리도 쉽게 알아 볼 수 있는 위도와 경도값으로 바꿔

보겠습니다.

사이트 – http://www.gonmad.co.uk/nmea.php

[아두이노] GPS 모듈의 사용 1편

#include < SoftwareSerial.h >

#include < TinyGPS.h >

// Define which pins you will use on the Arduino to communicate with your

// GPS. In this case, the GPS module’s TX pin will connect to the

// Arduino’s RXPIN which is pin 3.

#define RXPIN 6

#define TXPIN 5

//Set this value equal to the baud rate of your GPS

#define GPSBAUD 9600

// Create an instance of the TinyGPS object

TinyGPS gps;

// Initialize the NewSoftSerial library to the pins you defined above

SoftwareSerial uart_gps(RXPIN, TXPIN);

// This is where you declare prototypes for the functions that will be

// using the TinyGPS library.

void getgps(TinyGPS &gps);

// In the setup function, you need to initialize two serial ports; the

// standard hardware serial port (Serial()) to communicate with your

// terminal program an another serial port (NewSoftSerial()) for your

// GPS.

void setup()

{

// This is the serial rate for your terminal program. It must be this

// fast because we need to print everything before a new sentence

// comes in. If you slow it down, the messages might not be valid and

// you will likely get checksum errors.

Serial. begin ( 9600 );

//Sets baud rate of your GPS

uart_gps. begin (GPSBAUD);

Serial.println( “” );

Serial.println( “GPS Shield QuickStart Example Sketch v12″ );

Serial.println( ” …waiting for lock… ” );

Serial.println( “” );

}

// This is the main loop of the code. All it does is check for data on

// the RX pin of the ardiuno, makes sure the data is valid NMEA sentences,

// then jumps to the getgps() function.

void loop()

{

while (uart_gps.available()) // While there is data on the RX pin…

{

int c = uart_gps.read(); // load the data into a variable…

if (gps.encode(c)) // if there is a new valid sentence…

{

getgps(gps); // then grab the data.

}

}

}

// The getgps function will get and print the values we want.

void getgps(TinyGPS &gps)

{

// To get all of the data into varialbes that you can use in your code,

// all you need to do is define variables and query the object for the

// data. To see the complete list of functions see keywords.txt file in

// the TinyGPS and NewSoftSerial libs.

// Define the variables that will be used

float latitude, longitude;

// Then call this function

gps.f_get_position(&latitude, &longitude);

// You can now print variables latitude and longitude

Serial.print( “Lat/Long: ” );

Serial.print(latitude, 5 );

Serial.print( “, ” );

Serial.println(longitude, 5 );

// Same goes for date and time

int year;

byte month, day, hour, minute, second, hundredths;

gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);

// Print data and time

Serial.print( “Date: ” ); Serial.print(month, DEC); Serial.print( “/” );

Serial.print(day, DEC); Serial.print( “/” ); Serial.print(year);

Serial.print( ” Time: ” ); Serial.print(hour, DEC); Serial.print( “:” );

Serial.print(minute, DEC); Serial.print( “:” ); Serial.print(second, DEC);

Serial.print( “.” ); Serial.println(hundredths, DEC);

//Since month, day, hour, minute, second, and hundr

// Here you can print the altitude and course values directly since

// there is only one value for the function

Serial.print( “Altitude (meters): ” ); Serial.println(gps.f_altitude());

// Same goes for course

Serial.print( “Course (degrees): ” ); Serial.println(gps.f_course());

// And same goes for speed

Serial.print( “Speed(kmph): ” ); Serial.println(gps.f_speed_kmph());

Serial.println();

// Here you can print statistics on the sentences.

unsigned long chars;

unsigned short sentences, failed_checksum;

gps.stats(&chars, &sentences, &failed_checksum);

//Serial.print(“Failed Checksums: “);Serial.print(failed_checksum);

//Serial.println(); Serial.println();

delay( 10000 );

}

[Arduino]아두이노 GPS 모듈 사용하기

원본 글: 내 네이버 블로그, 포스팅 날짜 2020-01-19

개발 환경 : Arduino, Android studio, node.js

이전 포스팅에서 아두이노 프로젝트의 하드웨어에는 GPS모듈, 블루투스 모듈을 사용하였고 하드웨어의 소형화를 위해 보드는 아두이노 나노를 사용했다고 했었다. 이번에는 아두이노 GPS 모듈 사용법에 대해 알아보자.

아두이노 GPS

아두이노 NEO-6M GPS 모듈, 가격 : 9,300

우선 이 가격에 좋은 성능을 기대하면 안 된다… GPS때문에 프로젝트 진행에 애를 많이 먹었다….

우리처럼 GPS가 핵심 정보인 프로젝트를 진행할 때는 무조건 핵비싼 GPS 모듈을 쓰는 것을 추천한다.

우선 아두이노 GPS에는 PIN이 없어서 납땜을 해줘야 한다.

단자는 각각 VCC, GND, RX, TX이며 납땜한 모듈을 보드의 각각 맞는 PIN과 연결해야 하는데, 아두이노 GPS 모듈의 경우 모듈과 보드의 RX, TX를 바꿔서 연결해야 한다.

GPS 모듈 아두이노 보드 VCC 5V GND GND RX D5 TX D6

아두이노 GPS에 간단한 테스트 코드를 업로드하고 동작을 확인하면, 알 수 없는 값들만 시리얼 모니터로 확인할 수 있다.

$GPRMC,082608.00,A,3730.67773,N,12694.42632,E,0.048,,110516,,,D*78 $GPVTG,,T,,M,0.048,N,0.089,K,D*2B $GPGGA,082608.00,3730.67773,N,12694.42632,E,2,08,1.54,49.8,M,18.5,M,,0000*6D $GPGSA,A,3,08,42,01,07,11,16,50,10,,,,,2.95,1.54,2.51*01 $GPGSV,3,1,09,01,44,188,40,07,57,267,41,08,64,024,45,10,12,063,36*7A

위도/경도 값을 받기 위해 아두이노 GPS 모듈을 사용하는 건데 이게 무슨 일이람

NMEA(National Marine Electronics Association)

NMEA는 해양 기자재들간 통신을 위한 전기적 인터페이스 및 데이터 프로토콜이다.

아두이노 GPS로 얻은 데이터를 분석해보자.

$GPRMC,082608.00,A,3730.67773,N,12694.42632,E,0.048,,110516,,,D*78 $GPVTG,,T,,M,0.048,N,0.089,K,D*2B $GPGGA,082608.00,3730.67773,N,12694.42632,E,2,08,1.54,49.8,M,18.5,M,,0000*6D $GPGSA,A,3,08,42,01,07,11,16,50,10,,,,,2.95,1.54,2.51*01 $GPGSV,3,1,09,01,44,188,40,07,57,267,41,08,64,024,45,10,12,063,36*7A

GP : talker ID, GPS에서는 보통 GP를 사용함.

GGA : sentence ID, 여러 항목으로 구성되어 있고 위 항목의 데이터에 따라 메세지가 달라진다.

이처럼 많은 GPS 수신기에서는 GPGGA, GPRMC, GPGSA, GPGSV 등을 포함하고 있으며, GPGGA는 모든 GPS 수신기에서 지원한다.

GPRMC의 경우에는 GPGGA에서는 지원하지 않는 속도, 방향, 날짜에 대한 데이터를 지원하며, GPGSA는 GPS의 수신상태를 점검하는데 주로 이용되고 GPGSV는 보이는 위성의 개수 등 위성 정보에 대한 데이터를 지원한다.

따라서 보통은 tiny GPS 라이브러리를 이용하여 GPS값을 우리에게 익숙한 데이터의 형태로 변환하는데, 이렇게 변환한 값은 위도, 경도 뿐만 아니라 날짜, 시간, 고도, 속도 등 상당히 많은 정보를 포함하기 때문에, 나는 GPGGA를 이용하여 기본적인 위도 경도 값만 parsing해서 가져와 보겠다.

GPGGA

$GPGGA,082608.00,3730.67773,N,12694.42632,E,2,08,1.54,49.8,M,18.5,M,,0000*6D

Field Example Notes 1 Sentence ID GPGGA Global Positioning System fixed data 2 UTC time 082608.00 hhmmss.sss 3 Latitude 3730.67773 ddmm.mmmm 4 N/S indicator N N : North, S : South 5 Longtitude 12694.42632 dddmm.mmmm 6 E/W indicator E E : East, W : West

위의 표를 보면, 우리가 필요한 위도/경도 정보는 3번째, 5번째에 위치한 데이터임을 알 수 있다.

데이터 포맷에 따르면

위도 : ddmm.mmmm

경도 : dddmm.mmmm

GPS값을 위경도로 바꾸는 계산식은 mm부분을 60으로 나누고 dd부분과 더해주면 된다. 즉,

위도 : dd + (mm.mmmm/60)= 37 + (30.67773/60) = 37.5112955

경도 : ddd + (mm.mmmm/60)= 126 + (94.42632/60) = 127.573772

한국에서 GPS를 쓰는 경우 방위는 N, E가 나올 것이므로 패스하고, 이제 쉼표를 구분자로 데이터를 파싱하여 3번째, 5번째 데이터만 가져오면 된다. 아두이노에서도 구분자를 사용하여 파싱할 때 indexOf를 사용한다.

코드는 대략적으로 gpsSerial.read()를 이용하여 값을 읽어오고 GPGGA일 때만 그 값을 파싱하여 substring()을 이용하여 값을 저장하고 출력하도록 구성하면 된다.

필요한 정보는 3번째, 5번째에 등장하므로 각각 2번째 쉼표 뒤, 4번째 쉼표를 기준으로 파싱해야 한다.

//init char c = “”; String str = “”; String targetStr = “GPGGA” … void loop() { if(gpsSerial.available() { c=gpsSeral.read(); … // 쉼표를 기준으로 파싱하기 int firstData = str.indexOf(“,”); //첫 번째 콤마 전까지의 내용을 파싱 int secondData = str.indexOf(“,”, firstData+1); int thirdData = str.indexOf(“,”, firstData+2); int fourthData = str.indexOf(“,”, firstData+3); int fivethData = str.indexOf(“,”, firstData+4); //data 추출 String Lat = str.substring(seconData+1, thirdData); String Long = str.substring(fourthData+1, fivethData); …

이처럼 indexOf를 이용하여 구분자를 기준으로 데이터를 파싱하고, substring 함수를 이용하여 해당 위치의 데이터를 index를 이용하여 추출하는 방식으로 tiny GPS 라이브러리를 사용하지 않고서도 필요한 데이터만 추출할 수 있을 것이다.(배열 등을 이용해서 코드를 깔끔하게 짜도 되지만 굉장히 간단한 코드라서 원시적인 방법으로 짰다.)

얻은 gps 좌표는 소수점 아래 7자리까지 출력하여 블루투스 모듈을 통해 안드로이드로 전송했다.

테스트 영상은 다음과 같다. (확인을 위해 원 GPS 데이터 값도 같이 띄움)

테스트를 할 경우, GPS 모듈에 불이 깜빡이는 것을 볼 수 있다.

이 불은 GPS 위성과 연결되어 신호를 받아올 경우에 들어오는데, 보통은 10분이 걸린다고 하지만 나는 신호를 잡기까지 1시간도 더 걸렸다….

아두이노 GPS 테스트 시에는 반드시!!

탁 트인 공간에서 해야한다. 아두이노 NEO-6M GPS는 감도가 낮아서 학교 운동장에서도 안 잡혀서 운동장 한가운데에 서 있었더니 신호가 잡혔었다. GPS 모듈의 안테나를 하늘로 향하게 둬야 한다.

반드시!!!!!!!!!!!!

완성된 하드웨어의 내부 구성은 다음과 같다. 여기 GPS 안테나의 동그란 부분이 하늘로 향해야 한다.

전반적으로 아두이노 프로젝트를 진행하며 아두이노 GPS가 정말 불편하다고 느꼈던 점이 이 신호를 잡는 과정에 걸리는 시간이었다. 아무리 구글링해도 대부분 10분정도 걸린다는 것 같은데 한시간도 넘는 동안 신호가 안 잡혀서 한밤중에 노트북 들고 온 사방팔방을 돌아다녔던 기억이 있다…

또, 이 GPS의 수신 신호가 굉장히 잘 끊긴다. 탁 트인 공간이나 탁 트인 대로변이 아닌 건물이 많은 골목 등으로 진입하면 금새 끊어져 버린다. 이는 GPS 정보가 핵심 기술인 우리 프로젝트에 있어 치명적인 결함으로 작용했기에 결국 아두이노 GPS 대신 핸드폰 GPS를 이용하게 되었다.(하드웨어와 사용자가 함께 움직이기에 가능했다. 현대인은 핸드폰을 몸에서 떨어트리지 않으니까)

혹시라도 GPS 기반의 프로젝트를 진행하시는 분들은 비싼 GPS 모듈을 사용하거나 핸드폰 GPS를 이용하는 방법을 추천드린다.

GPS 센서 NEO-6M 연결하기 (아두이노)

728×90

GPS(Global Positioning System)은 현재의 위치정보를 획득하는 용도로 사용합니다.

아두이노와 라즈베리파이에서 사용 가능한 GPS 센서인 NEO-6M을 사용하여 위치정보를 얻어보았습니다.

이번 글은 아두이노를 사용하여 위치정보를 받아볼 것이며 다음 글에서는 라즈베리파이를 사용합니다.

라즈베리파이로 적용한 글

2021.06.29 – [작업/라즈베리파이 & 아두이노] – GPS 센서 NEO-6M 연결하기 (라즈베리파이)

NEO-6M 제품 구성과 사양(Specification)

NEO-6M 제품 구성

일반적으로 NEO-6M을 구매하시면 회로판(좌측)과 안테나(우측)로 구성된 제품을 받을 수 있습니다.

여기서 중요한 것은 회로판에 핀 헤더가 포함되어 있지 않기 때문에 아두이노(또는 라즈베리파이)와 연결하기 위해서는 별도로 핀 헤더를 구매해서 납땜을 해야 합니다.

NEO-6M 핀 구성

VCC

3.3V (라즈베리파이) 또는 5V (아두이노) 모두 호환 GND GND RX GPIO 14 (Rasp Tx), 아두이노는 별도 지정 TX GPIO 15 (Rasp Rx), 아두이노는 별도 지정

시리얼 통신의 속도인 보드레이트(Baud Rate) = 9600

GPS 센서 조립

먼저 회로판과 안테나를 연결해줍니다.

안테나 연결

사진처럼 회로판에 안테나와 연결할 수 있는 접합부가 있습니다.

똑딱이처럼 되어 있어서 잘 맞추어서 누르면 “똑”느낌이 나면서 결합됩니다.

다음으로 GPS 사용을 위한 준비의 핵심인 핀 헤더와 “납땜”입니다.

다른 회로와 연결하기 위해서는 핀 헤더가 필요하며 핀 헤더에 적절한 전류 제공을 위해서는 납땜을 해야 합니다.

납땜하기 귀찮아서 그냥 핀 헤더와 회로판을 본드로 붙였지만 작동이 안 되었습니다…

핀 헤더

핀 헤더 자체는 작기 때문에 묶어서 판매합니다.

Snipe-Nose Pliers (흔히 롱노우즈) 같은 걸로 뜯어서 낱개로 사용 가능합니다. 손으로 뜯어도 됩니다.

납땜을 위해서는 인두기와 땜납이 필요합니다. 근처에 다이소가 있는데 거기에서도 판매합니다.

성능도 나름 좋다고 평가받기 때문에 아이쇼핑도 할 겸 구매하고 왔습니다.

납땜 준비

땜납에는 플럭스(flux)라는 납땜이 잘 되도록 도와주는 녀석이 있습니다.

(산화 방지, 전기 접촉 개선 및 납 흐름 개선과 같은 역할을 한다고 합니다.)

그 녀석이 기화되어 발생하는 연기는 몸에 매우 해롭기 때문에 납땜은 환기가 잘 되는 야외에서 진행합니다.

땜납 전

핀 헤더와 회로판의 직경이 일치하지 않기 때문에 고정이 필요합니다.

그래서 핀 헤더의 검은색 머리에 본드를 발라서 고정시켰습니다.

납땜 후

매우 초보스러운 납땜을 완료했습니다.

주의할 점은 땜납도 전류가 흐르기 때문에 각자 분리되어 있어야 한다는 것입니다.

너무 많이 녹여서 다른 핀의 땜납과 연결되어 붙게 된다면 작동에 문제가 생깁니다.

아두이노 (라즈베리파이) 준비 및 세팅

이번 글에서는 아두이노를 활용하고, 다음 글에는 라즈베리파이를 활용하겠습니다.

아두이노 스케치에 간단한 코드를 작성하여 실행하겠습니다.

아두이노는 예시 자료가 많기 때문에 관련 코드를 찾는 것이 수월합니다.

GPS 데이터 받아오고 출력하는 코드

#include

SoftwareSerial gps(11,12); <- gps(x, y)에서 x는 GPS 센서의 Tx, y는 Rx와 연결된 핀을 지정합니다. void setup() { <- 실행 시 한 번 진행되는 코드 공간 Serial.begin(9600); <- 보드레이트 값을 지정하여 시리얼 통신을 시작합니다. gps.begin(9600); <- gps 객체를 지정된 보드레이트 값으로 작동시킵니다. } void loop() { <- 종료될 때까지 반복 진행되는 코드 공간 if ( gps.available() ) { <- gps 센서에서 값이 들어오고 있다면 Serial.write(gps.read()) ; <- gps 센서에서 수집된 데이터를 출력합니다. } } 오류가 없는지 확인합니다. 다음으로 아두이노에 업로드하기 위해 아두이노를 센서와 연결합니다. GPS 센서 회로판에 핀 연결 납땜이 완료된 gps 센서 회로판의 핀에 점퍼선을 연결합니다. 11 - gps Tx, 12 - gps Rx Vcc - 5V, Gnd = Gnd, Tx = 11, Rx = 12에 연결합니다. (Tx, Rx 핀은 기호에 맞게 설정해서 연결해주시면 됩니다.) 연결한 후에 스케치를 통해 아두이노로 소스를 업로드합니다. 최종적으로 값이 잘 들어오는지 스케치 툴의 시리얼 모니터를 통해서 확인합니다. 확인했을 때, GPS 센서에서 정확한 값이 바로 들어오지는 않습니다. GPS가 현재 위치를 바르게 잡으려면 시간이 좀 걸리며 빠르게 잡기 위해서는 야외에서 측정합니다. 저는 원룸에서 측정했고, 창문 열고 안테나를 밖에까지 노출시켜서 측정했습니다. GPS 센서 측정 결과 사진의 출력 결과는 측정이 완전히 이루어지지 않은 화면입니다. 측정이 정확히 이루어진다면 GPS 센서 회로판에 빨간불이 점등합니다. 정확한 측정 결과는 사진보다 더 길고 자세한 값들이 출력되어 있습니다. (크게 차이 납니다.) GPS 센서에서 들어오는 데이터는 그대로 활용할 수 없기 때문에 목적에 맞게 정제하는 과정이 필요합니다. 자세한 과정까지는 접근하지 않았기 때문에 정리를 하지 않았습니다. 아두이노는 GPS 센서가 잘 작동하는지 간단한 테스트 용도였습니다. 이제 라즈베리파이로 세팅해서 사용하는 방법에 대해 작성하겠습니다. 읽어주셔서 감사합니다. : ) - 끝 - 728x90

GY-GPS6MV2 GPS 모듈 사용 부터 위도 경도 파싱까지

안녕하세요!

커피백작입니다!

음… 먼저, 제가 블로그 시작한지 얼마 안된 초짜라, 업로드할때 ‘어디서 샀는지, 어디글을 가져다 써도 되는지 등등’ 저작권문제등은 잘 모르겠는데요

일단 제가 실제로 구매해서 사용한 제품으로, 직접 사진찍어 올리며,

여기저기서 자료 찾아서 직접 돌려본 소스코드를 올리는 것을 말씀드리며, 일정글을 퍼오면 명시해 남길 것입니다.

혹 문제된다면 알려주세요.

자, 그럼 시작하죠

오늘 업로드 내용은 GPS 모듈입니다!

GY-GPS6MV2 라고 써있는 제품인데요.

부가세 포함 해서 13,200 원 정도에 샀네요.

시리얼 통신을 하는 녀석이구요.

테스트는 아두이노 우노보드에 연결해서 사용했습니다.

선은 VCC, RX, TX, GND 로 4개의 선을 연결하여 사용합니다.

VCC 와 GND 는 전원 부분이고,

RX, TX 는 시리얼 통신을 담당하는 부분이래요.(저도 잘 몰라욬ㅋㅋㅋ 그렇지만 다음에 파고 들어서 업로드하죠)

// gps – arduino

// tx – 10

// rx – 11

// vcc – 5v

// gnd – gnd

선의 연결입니다. GPS 모듈과 우노보드를 연결했을때 핀 번호들인데요.

(아시는 분이 많겠지만, 모듈과 보드들의 RX, TX 는 서로 교차 시켜줘야 합니다.

저도 예전엔 몰라서 TX-TX RX-RX 서로 맞춰서 연결했었는데, 찾다보니 교차 연결해야 된다하더군요.

저처럼 모르셨을 수 있는 분들 위해 남깁니다)

바로 한번 연결해보겠습니다.

자 이렇게 연결을 해 놓은 상태로 진행하겠습니다.

아두이노 스케치에 처음 업로드 할 소스는 다음과 같습니다.

#include

SoftwareSerial gpsSerial(10,11);

// gps – arduino

// tx – 10

// rx – 11

// vcc – 5v

// gnd – gnd

void setup() {

Serial.begin(9600);

Serial.println(“Start GPS… “);

gpsSerial.begin(9600);

}

void loop() {

if(gpsSerial.available())

{

Serial.write(gpsSerial.read());

}

}

해당 제품에 이상태로 업로드를 합시다!

업로드 후 시리얼 모니터를 열면 위의 사진과 같이 값이 주르르르르르르르르르르 나와요.

이 값에서 뭐가 좌표일지, 막막하지 않나요? ㅋㅋㅋ

단순히 TinyGPS 같은 라이브러리를 추가해서 불러옴으로 원하는 값만 출력할 수 도 있습니다만.

저는 그러기 싫었기에 이 기본소스에서 계속 바꿔 보았습니다.

현재는 시리얼 모니터에 보면 Start GPS 를 출력한 다음

$ 표시와 함께 각각 줄 앞에 5글자와 그 뒤를 이어 각각에 따른 값들이 계속 반복해서 출력합니다.

NMEA 라고 하는 프로토콜인데요.

http://blog.naver.com/6k5tvb/120061235070

이 분 링크에 가셔서 보시면 잘 정리 되어있어용.

이 NMEA에 대한 것은 링크 통해 보시구요.

저희가 GPS 모듈에서 가져올 값은 위도Lat 과 경도Long 잖습니까?

시리얼 모니터에 반복적으로 출력되는 문장들중, “GPGGA”의 값을 봐주세요.

GPGGA 에서 빨간색으로 밑줄 그어진 부분이 바로 위도와 경도입니다.

N 앞에 있는 값이 위도.

E 앞에 있는 값이 경도입니다.

저희는 그 값을 가져와야 합니다.

그.런.데.

그 부분의 값을 그대로 가져온다고해서 다 되는게 아니더라구요 하하

제가 있는 곳이 순천인데 고흥이 나오지 뭡니까~

그래서 따로 계산을 해줘야 정확한 위치 값이 나왔습니다.

계산식은 의외로 간단했습니다.

$GPGGA,015442.00, 3458.17997 ,N, 12728.74791 ,E,1,04,6.67,39.9,M,21.1,M,,*61

3458.17997 => 34+58.17997/60 -> 34.9696661667

12728.74791 => 127 + 28.74791/60 -> 127.4791318333

GPGGA 에서 나온 값을 위와 같이 계산해주면됩니다.

위도는 앞 두자리.

경도는 앞 세자리.

따로 가져다가 더해주면 됩니다.(뒤에있는 값들을 60으로 나눈 값에 더해야지요!)

이런 계산식을 돌리기위해서,

GPGGA 값을 따로 가져와야겠지요?

#include

SoftwareSerial gpsSerial(10,11);

// gps – arduino

// tx – 10

// rx – 11

// vcc – 5v

// gnd – gnd

char c = “”;

String str = “”;

String targetStr = “GPGGA”;

void setup() {

// put your setup code here, to run once:

Serial.begin(9600);

Serial.println(“Start GPS… “);

gpsSerial.begin(9600);

}

void loop() {

// put your main code here, to run repeatedly:

if(gpsSerial.available())

{

c=gpsSerial.read();

if(c == ‘

‘){

if(targetStr.equals(str.substring(1, 6))){

Serial.println(str);

}

str = “”;

}else{

str += c;

}

}

}

소스는 위와 같습니다.

이렇게 하면 아래와 같은 모습인데용

일단 GPGGA 의 값만을 계속 가져오지요?

설명을 드리자면,

먼저 모듈에서 읽어온 값들이 단어 하나씩을 gpsSerial.read()로 읽어와 char 데이터형의 c 변수에 저장합니다.

그리고 이 c의 값이 차곡차곡 str 이라는 변수에 저장되는데, 만약 읽어온 c 의 값이

인 줄바꿈 문자라면.

str.substring(1,6) 을 사용하여 $ 다음의 위치에 있는 ID 값을 가져와 targetStr인 GPGGA 와 비교합니다.

그리고 읽어온 str 이 GPGGA 라면? str을 출력해 주는 거죠!

그 이후 반드시 str = “” 로 str 값을 초기화 해주어야합니다

(만약 .substring() 이 무엇인 지 모르시겠다 하시면 다음의 링크로 들어가 보세요

https://kocoafab.cc/tutorial/view/115

위 링크에 아두이노의 string 형으로 할 수 있는 기능을 자세히 설명해 주셨습니다.

저도 덕분에 어떻게 만들어 볼 수 있었죠)

이렇게 GPGGA 의 값을 읽어 왔다면.

이 GPGGA 에서 위도와 경도 값만을 불러 와야 하지 않겠나요?

$GPGGA,015442.00,3458.17997,N,12728.74791,E,1,04,6.67,39.9,M,21.1,M,,*61

GPGGA 의 값들을 자세히 보시면 ‘,’ 쉼표로 구분지어져 있다는 것을 아실거예요.

로직을 짜다보면 문자열을 잘라서 일부분만 쓰는 경우가 많은데요~

이때 쪼개는 작업을 ‘파싱(Parsing)’ 이라해요.

근데 어떻게 잘라 쓸 수 있을까요?

GPGGA 의 예를 들면, 쉼표로 구분 지어서 값을 가져올 수 있지 않겠습니까?

이 때 쉼표 처럼 구분지어 주는 문자열이나 문자를 구분자 라고해요.

(토큰이라는 말도 있는데, 토큰은 전체 문자열을 구분자로 쪼갠 단위 입니다)

GPGGA 의 값을 쉼표로 자르기 위해서 코코아팹 링크에도 나와있는 indexOf 를 사용하였습니다.

실제 적용 소스를 보면서 이해를 해볼까요?

#include

SoftwareSerial gpsSerial(10,11);

// gps – arduino

// tx – 10

// rx – 11

// vcc – 5v

// gnd – gnd

char c = “”; // Wn 인지 구분 및 str에 저장.

String str = “”; //

전까지 c 값을 저장.

String targetStr = “GPGGA”; // str의 값이 NMEA의 GPGGA 값인지 타겟

void setup() {

// put your setup code here, to run once:

Serial.begin(9600);

Serial.println(“Start GPS… “);

gpsSerial.begin(9600);

}

void loop() {

// put your main code here, to run repeatedly:

if(gpsSerial.available()) // gps 센서 통신 가능?

{

c=gpsSerial.read(); // 센서의 값 읽기

if(c == ‘

‘){ //

값인지 구분.

//

일시. 지금까지 저장된 str 값이 targetStr과 맞는지 구분

if(targetStr.equals(str.substring(1, 6))){

// NMEA 의 GPGGA 값일시

Serial.println(str);

// , 를 토큰으로서 파싱.

int first = str.indexOf(“,”);

int two = str.indexOf(“,”, first+1);

int three = str.indexOf(“,”, two+1);

int four = str.indexOf(“,”, three+1);

int five = str.indexOf(“,”, four+1);

// Lat과 Long 위치에 있는 값들을 index로 추출

String Lat = str.substring(two+1, three);

String Long = str.substring(four+1, five);

// Lat의 앞값과 뒷값을 구분

String Lat1 = Lat.substring(0, 2);

String Lat2 = Lat.substring(2);

// Long의 앞값과 뒷값을 구분

String Long1 = Long.substring(0, 3);

String Long2 = Long.substring(3);

// 좌표 계산.

double LatF = Lat1.toDouble() + Lat2.toDouble()/60;

float LongF = Long1.toFloat() + Long2.toFloat()/60;

// 좌표 출력.

Serial.print(“Lat : “);

Serial.println(LatF, 15);

Serial.print(“Long : “);

Serial.println(LongF, 15);

}

// str 값 초기화

str = “”;

}else{ //

아닐시, str에 문자를 계속 더하기

str += c;

}

}

}

GPGGA 가 저장된 str 에서 쉼표로 구분하여 값을 자릅니다.

그리고 위도와 경도를 각각 Lat 과 Long 에 저장한 후

또다시 나누어 계산한 뒤 Lat과 Long 에 저장, 출력합니다.

이로써 계산된 위도와 경도 값을 구해왔어요~

GPS 모듈을 이용해 보았는데요~

조금이라도 도움이 되었으면 좋겠습니다~!

아두이노로 GPS 신호를 직접 처리(분석) 하기

아두이노로 GPS 신호를 직접 처리(분석) 하기

현재 작업중이 차량 대시보드에 붙이려고 GPS수신모듈을 구매하여 진행방향과 고도 정보를 표시하려고 작업을 진행하였습니다.

GPS수신기는 UBLOX 제품으로 NEO-6M GPS 모듈 GY-GPS6MV2 입니다.

저럼한 가격이 장점인 NEO-6M GPS수신기

이 제품은 아두이노에서 일반적으로 많이 사용하는 수신기로 알리로는 4~5천원대에 구매가 가능한 가성비 GPS수신기 입니다.

GPS를 통해 얻을 수 있는 정보는 매우 다양한데, 그중 차량용 대시보드에 사용하려는 정보는 차량 진행방향과(0~359도 방위각) 고도값(미터) 2가지만 뽑아내려고 합니다.

가장 쉬운 방법은 tinyGPS 같은 라이브러리를 사용하는 방법입니다.

#include #include TinyGPS gps; SoftwareSerial nss(11, 12); void setup() { Serial.begin(9600); nss.begin(9600); } void loop() { while (nss.available()) { int c = nss.read(); if (gps.encode(c)) { float falt = gps.f_altitude(); // +/- altitude in meters float fc = gps.f_course(); // course in degrees float fkmph = gps.f_speed_kmph(); // speed in km/hr Serial.println(falt); Serial.println(fc); Serial.println(fkmph); Serial.println(“”); } } }

이 코드를 실행시켜보면 GPS 신호가 1초 간격으로 수신되면서 시리얼 모니터에 표시됩니다.

그렇지만 이 글에서는 GPS신호를 직접 파싱(처리)해서 원하는 정보를 가져오는 방법으로 해 보겠습니다.

그러기 위해서는 일단 GPS신호의 구조부터 알아야 합니다.

GPS신호는 간단한 구조의 문자열로 되어 있습니다

GPS신호는 GPGGA, GPGSV, GPRMC로 시작하는 문자열로 문자열 형태로 수신되고, 문자열은 경도, 위도 같은 값들이 콤마(,)로 구분되어 있습니다.

아래가 GPS신호 문자열 예제인데요,

GPGGA 문자열의 빨간색 숫자(46.9)는 고도를 나타냅니다.

GPRMC 파란색 숫자(22.4)는 속도를 나타내는데 속도는 노트(kont)단위 입니다.

다음 빨간색 숫자(84.4)는 진행하고 있는 방향의 방위각(0~359)을 나타냅니다.

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

$GPGSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39

$GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75

$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

나머지 숫자의 의미는 아래 블로그에 굉장히 상세히 설명되어 있으니 관심 있으신 분들은 방문하시면 도움이 되실겁니다.

http://erine.egloos.com/2233135

GPS문자열을 파싱해서 원하는 값을 구해보도록 하겠습니다.

일단 신호자체가 문자열인데다가, 각 값은 정해진 위치에 콤마(,)로 구분되어 있기 때문에 손쉽게 추출이 가능합니다.

아래 예제는 고도, 속도, 방위값 3개의 정보를 추출하는 코드입니다.

String gpsstr = “”; String targetStr1 = “GPGGA”; String targetStr2 = “GPRMC”; String salt, sdir, sknot; float alt, dir, knot, spd; uint8_t s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; void setup(void) { Serial.begin(9600); } void loop(void) { if(Serial.available()) { gpsstr = Serial.readStringUntil(‘

‘); // GPGGA if(targetStr1.equals(gpsstr.substring(1, 6))) { s1 = gpsstr.indexOf(“,”); s2 = gpsstr.indexOf(“,”, s1+1); s3 = gpsstr.indexOf(“,”, s2+1); s4 = gpsstr.indexOf(“,”, s3+1); s5 = gpsstr.indexOf(“,”, s4+1); s6 = gpsstr.indexOf(“,”, s5+1); s6 = gpsstr.indexOf(“,”, s6+1); s8 = gpsstr.indexOf(“,”, s7+1); s9 = gpsstr.indexOf(“,”, s8+1); s10 = gpsstr.indexOf(“,”, s9+1); salt = gpsstr.substring(s9+1, s10); alt = salt.toFloat(); } // GPRMC if(targetStr2.equals(gpsstr.substring(1, 6))) { s1 = gpsstr.indexOf(“,”); s2 = gpsstr.indexOf(“,”, s1+1); s3 = gpsstr.indexOf(“,”, s2+1); s4 = gpsstr.indexOf(“,”, s3+1); s5 = gpsstr.indexOf(“,”, s4+1); s6 = gpsstr.indexOf(“,”, s5+1); s7 = gpsstr.indexOf(“,”, s6+1); s8 = gpsstr.indexOf(“,”, s7+1); s9 = gpsstr.indexOf(“,”, s8+1); sknot = gpsstr.substring(s7+1, s8); sdir = gpsstr.substring(s8+1, s9); knot = sknot.toFloat(); spd = knot * 1.852; dir = sdir.toFloat(); } gpsstr = “”; } }

gps 수신 문자열을 한줄씩 읽어서 gpsstr에 저장합니다.

그후 앞 6개 글자를 비교해서 GPGGA로 시작하는 문자열인 경우 콤마(,)의 위치를 indexOf()으로 계산해서 고도값을 추출한 후 float형으로 변환하여 저장합니다.

(추출한 값 자체가 문자열이기 때문에 처리를 위해 변환이 필요)

이후 마찬가지로 GPRMC의 문자열인 경우도 동일한 방법으로 속도값과 고도값을 추출하여 각각 float형으로 변환하여 저장합니다.

다만 knot를 km로 저장하기 위해 1.852를 곱해 주었습니다.

코드의 핵심은 문자열에서 콤마의 위치를 알아내서 해당 문자열을 추출하는 것입니다.

그외에는 그다지 어려운 부분은 없습니다.

이 코드를 조금만 추가하면 위도, 경도도 알아낼 수 있고, gps가 제공하는 다양한 정보중에 필요한 정보를 충분히 추출해 낼 수 있으니 응용해 보시면 될것 같습니다.

NEO-7M 아두이노 GPS 수신모듈 [SZH-NT07]

배송정보 택배발송 택배사 : 롯데택배 1588-2121 또는 기타 택배

배송지역 : 전국 (제주 및 도서산간지역은 3,000원 추가 운임이 발생하며 일부 지역은 +@ 추가 비용이 발생 됩니다.)

배송기간 : 영업일 기준 평균 1~3일 소요되며, 택배사 사정에 따라 달라질 수 있습니다. (주말/공휴일 배송기간 제외)

무료배송 : 총 결제 금액이 배송비를 제외하고 66,000원(vat포함) 이상인 경우 무료배송 처리됩니다.

유료배송 : 롯데택배 출고 기준 2,700원(vat포함)

무료/유료 배송의 경우 : 직배송, 타 택배 이용시 유료배송 비용은 변경됩니다.

부피 및 무게가 10KG 이상, 총 합의 길이가 1.2M 이상 또는 배송 사정으로 인해 롯데택배 이외 타 택배로 출고될 수 있으며,

운송수단에 따라 배송비는 선불 또는 착불(고객 부담) 발생될 수 있습니다. 퀵 / 고속 / KTX / 방문수령 결제시 배송 방법 변경 (네이버페이는 장바구니에서 변경하셔야 적용 됩니다.)

퀵 비용은 구매자 부담(착불)으로 서울,인천,경기 일부지역에서만 가능한 서비스입니다.

고속버스 : 일반 고속버스 탁송료 20,000원 / KTX : 탁송료 30,000원

구매자 부담이며 지역 및 이동 시간에 따라 오후 3시 이후 접수 건은 당일 탁송 어려울 수 있습니다.

구매자 부담이며 지역 및 이동 시간에 따라 오후 3시 이후 접수 건은 당일 탁송 어려울 수 있습니다. 제품은 [본사-인천]에서 준비되며, 방문 수령 장소는 [본사-인천]과 [구로매장]에서 선택 가능합니다.

제품이 준비되고 별도 연락 받으신 이후 수령 가능하며,결제 직후 수령은 불가합니다.

제품이 준비되고 별도 연락 받으신 이후 수령 가능하며,결제 직후 수령은 불가합니다. 상품 준비기간은 상품에 명시된 평균 준비기간에 따릅니다.

업체 직배송 및 해외 구매대행 상품의 경우 본사에서 준비되지 않는 상품으로 수령방법 변경 불가합니다. 배송안내 평균 준비기간은 발송일정이 아니며 상품을 준비하는 기간을 평균적으로 명시하며, 제조사 입고처 사정에 따라 평균 준비기간은 변동됩니다.

영업일 기준 오후 3시 이전 결제확인 된 주문 건은 당사 보유 재고 상품에 한하여 당일 출고 됩니다.

1가지 이상 상품을 주문을 하신 경우 평균 준비기간이 가장 긴 상품의 준비기간에 맞춰 일괄 또는 나눔 발송 처리됩니다.

일부 상품의 경우 재고 보유 상황에 따라서 평균 발송일에 다소 차이가 발생될 수 있습니다.

사전에 재고 확인 후 주문한 경우라도 이미 재고 소진이 된 이후에는 상품 준비기간은 안내 받으신 날짜와 상관없이 변경됩니다.

AS안내 반품/환불신청 반품/교환/취소 및AS안내 취소 진행 안내 직접 취소 가능 – 주문접수[결제 전-입금 전]상태에서는 회원,비회원 구분없이 디바이스마트 로그인 후 – 주문내역에서 ‘주문무효’ 처리를 통해 취소 가능합니다.

취소 접수 요청 – 결제완료 이후의 상태에서는 고객 본인 취소가 불가한 상태로 반드시 디바이스마트 고객센터 또는 1:1문의 게시판 통해 취소 문의 부탁드립니다. 반품/교환/취소 및 AS안내 제품 수령 후 7일(주말/공휴일 포함) 이내 다음 사항의 경우 반품/교환 가능합니다.

A/S 관련 문의는 업체마다 상이할 수 있으며, 해외 상품은 A/S 불가할 수 있습니다.

초기 불량, 오배송이 판매자 귀책일 경우 왕복 택배비용은 판매자 부담입니다.

모든 제품은 제조사, 공급 업체 사정 및 천재지변 등에 따라 단가 변동 및 품절/단종/대체 등 재고 소진이 발생될 수 있습니다. 반품/교환/취소 및 AS 가능 [O] 수령한 제품의 초기 불량, 파손, 오배송,상세페이지 내용 불일치 등으로 사용이 불가한 경우

단순 고객변심으로 인한 접수 기간이 7일을 초과하지 않고 , 제품을 훼손 또는 파손 하지 않고 , 미개봉/미사용인 경우

제품 초기 불량으로 의심 되어 수령일 기준 7일이내 고객센터 접수 후 불량 확인 되었을 경우 반품/교환/취소 및 AS 불가 [X] 제품 수령일 기준 7일(주말/공휴일 포함)이 초과한 경우

제품 및 포장을 파손, 훼손 변형 시켜 재화의 가치를 하락시키거나 사용자 과실로 인해 불량이 발생한 경우

디바이스마트에 사전 안내나 확인 없이 반품 또는 제품을 일방적으로 전달하여 당사로 보내는 경우

주문 제작 상품, 절단 상품, 해외 배송 상품, 복사 가능 상품(서적,USB,소프트웨어,메일 전송 등), 일회성 상품의 경우에는 반품/교환/취소 /AS 절대 불가

제품 수령 후 7일 또는 30일을 초과하여 오배송/누락 배송/택배사 분실로 교환/반품/취소 또는 추가 배송을 요청하는 경우

해외 수입 상품을 1개 이상 주문 후 일부 상품의 단가 변동 및 품절/단종/대체 등 재고 소진 등의 이유로

공급이 불가하게 되어 나머지 상품 취소/반품/ 교환등을 요청의 경우

공급이 불가하게 되어 나머지 상품 취소/반품/ 교환등을 요청의 경우 1회 이상의 반품/교환/취소를 진행하였으나 동일 내용을 지속적으로 2회 이상 접수하여 수령일 기준 30일을 초과하는 경우

고객 동의 후 대체/ 교환/AS 등을 진행하였으나 제품에 대한 인지 부족 또는 고객 변심으로 취소요청하는 경우 일부 상품의 경우 반품 /교환/취소 및 AS불가

오배송 또는 AS 요청 교환 기간이 초과 또는 사용 후 반품을 보내는 경우

키워드에 대한 정보 아두 이노 gps

다음은 Bing에서 아두 이노 gps 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 5분 NEO-6M GPS모듈 아두이노 완벽 활용법

  • Device Mart
  • DeviceMart
  • 디바이스마트
  • 디바이스 마트
  • 이준혁
  • neosarchizo
  • 새로운시작
  • 새로운 시작
  • UART
  • arduino
  • Arduino UNO
  • 아두이노
  • 아두이노 UNO
  • serial
  • serial communication
  • 시리얼
  • 시리얼 통신
  • 보드레이트
  • 보드 레이트
  • baud rate
  • gps
  • NEO-6M
  • ublox
  • gps모듈
  • 아두이노gps
  • 아두이노우노

5분 #NEO-6M #GPS모듈 #아두이노 #완벽 #활용법


YouTube에서 아두 이노 gps 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 5분 NEO-6M GPS모듈 아두이노 완벽 활용법 | 아두 이노 gps, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  대추 즙 효능 | 우리가 몰랐던 대추의 놀라운 효능! 이런 분은 꼭 대추 드세요! 3006 투표 이 답변

Leave a Reply

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