애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지를 읽어주세요.
참고로 중급편 부터는 응용편이 없습니다.
왜냐하면 고급편에서 중급에 사용했던 부품의 응용편을 다룰 예정이기 때문이죠!!
안녕하세요. 애드라이프 입니다.
이전 포스팅에서 GPS모듈의 사용법에 대해서 알아봤습니다.
하지만 기본적인 정보가 알아보기 힘들게 나와서 좀 불편한 점이 있었습니다.
이번 포스팅에서는 라이브러리를 이용하여 좀더 보기편하게 프로그램을 수정해서 라이브러리 이용편을 다루겠습니다.
이전 포스팅을 참고하고 싶으시면 아래 링크를 참고해주세요.
[아두이노/아두이노 중급] - 아두이노(Arduino) 중급 GPS모듈 NEO 6M/7M
모듈은 동일하게 Waveshare의 NEO-6M/7M GPS입니다. ▲
회로 구성도 이전 포스팅과 동일하지만 참고용으로 한번도 올리겠습니다. ▲
실제로 저는 7M IC를 쓰고 있지만 회로에는 6M입니다. 핀배열은 똑같으니 크게 신경쓰지 않으셔도 됩니다.
그럼 오늘에 메인인 프로그램을 살펴보도록 하겠습니다.▼
필요한 라이브러리는 파일 첨부해 놓겠습니다.(라이브러리 추가법은 공지글에 개발환경을 참고해주세요.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #include <SoftwareSerial.h> //라이브러리 추가(기본라이브러리) #include <TinyGPS.h> //라이브러리 추가 필요 // Arduino에서 GPS와 통신하기 위해 사용할 핀을 정의합니다. // 이 경우 GPS 모듈의 TX 핀이 Arduino의 RXPIN(핀 3)에 연결됩니다. #define RXPIN 2 #define TXPIN 3 //이 값을 GPS의 보드 속도와 동일하게 설정합니다. #define GPSBAUD 9600 // TinyGPS 개체의 인스턴스 생성 TinyGPS gps; // 위에서 정의한 핀으로 NewSoftSerial 라이브러리 초기화 SoftwareSerial uart_gps(RXPIN, TXPIN); // 여기서 TinyGPS 라이브러리를 사용할 기능의 프로토타입을 선언합니다. void getgps(TinyGPS &gps); // 설정 기능에서는 두 개의 직렬 포트를 초기화해야 합니다. // 터미널 프로그램과 통신하려면 표준 하드웨어 직렬 포트(시리얼())를 초기화해야 합니다. void setup() { //통신속도 9600 속도를 더느리게 하면 오류가 날 수 있습니다. Serial.begin(9600); //GPS의 보드 속도를 설정합니다. uart_gps.begin(GPSBAUD); Serial.println(""); Serial.println("WaveShare NEO 6M/7M GPS Module TEST"); Serial.println(" ...waiting for Data... "); Serial.println(""); } void loop() { while(uart_gps.available()) // GPS모듈에서 신호가 수신 될 경우 { int c = uart_gps.read(); // 변수에 데이터를 저장 if(gps.encode(c)) // 새로운 문장이 있다면 { getgps(gps); // 데이터를 수집 } } } void getgps(TinyGPS &gps) { // 변수정의 float latitude, longitude; // 기능호출 gps.f_get_position(&latitude, &longitude); // 위도(latitude)경도(longitude )출력 가능상태 Serial.print("Lat/Long: "); Serial.print(latitude,5); Serial.print(", "); Serial.println(longitude,5); // 날짜랑 시간 데이터도 동일한 포멧입니다. int year; byte month, day, hour, minute, second, hundredths; gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths); 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); // 여기서 고도와 코스 값을 직접 인쇄할 수 있습니다 Serial.print("Altitude (meters): "); Serial.println(gps.f_altitude()); Serial.print("Course (degrees): "); Serial.println(gps.f_course()); Serial.print("Speed(kmph): "); Serial.println(gps.f_speed_kmph()); Serial.println(); // 여기서 문장에 대한 통계를 인쇄할 수 있습니다. 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(1000); } | cs |
프로그램이 길어보이지만 거의 모든 부분이 데이터 출력부분입니다.
위도,경도 뿐만 아니라 날짜,시간,각도,속도 등의 정보를 출력해주고 출력되는 데이터가 보기편하게 되어있습니다.
실제로 출력되는 화면을 확인해보겠습니다.(실제 위치정보라 모자이크 처리했습니다.)
예전에 찍어놓았던 로그입니다.▼
이전 포스팅을 보신분은 아시겠지만 구글지도에 위치를 검색할 경우에도 데이터를 수정해서 적어줘야
위치가 검색되는 단점이있었지만 이번 예제에서는 Lat/Long : 위도, 경도 부분의 위도,경도를 그대로 복사해서
구글 지도에 붙여 넣으면 바로 위치 검색이 됩니다.▼
지금까지 아두이노(Arduino) 중급 GPS모듈 NEO 6M/7M 라이브러리 이용편 포스티이였습니다.
계속해서 도움되는 포스팅으로 찾아 뵙겠습니다.
By 애드라이프
'아두이노 > 아두이노 중급' 카테고리의 다른 글
아두이노(Arduino) 중급 WIFI모듈 WeMos D1 Mini 1편 - 환경설정 (0) | 2018.12.08 |
---|---|
아두이노(Arduino) 중급 아두이노 HC-06와 안드로이드폰을 사용해서 LED 제어 (0) | 2018.12.03 |
아두이노(Arduino) 중급 GPS모듈 NEO 6M/7M (3) | 2018.11.25 |
아두이노(Arduino) 중급 3.2인치 TFT 터치 LCD 쉴드 Touch LCD Shield + 아두이노 메가(Mega) (0) | 2018.11.19 |
아두이노(Arduino) 중급 IRremote 적외선 송수신 (0) | 2018.11.16 |