GPS는 Global Positioning System의 약자로 정확한 UTC 시간 (협정 세계시)으로 지구상의 모든 위치의 위도와 경도를 감지하는 데 사용됩니다. 이 장치는 시간과 날짜와 함께 매초마다 위성으로부터 좌표를 수신합니다. GPS는 높은 정확도를 제공하며 위치 좌표 외에 다른 데이터도 제공합니다.
우리 모두는 GPS가 매우 유용한 장치이며 위치를 추적하기 위해 휴대폰 및 기타 휴대용 장치에서 매우 일반적으로 사용된다는 것을 알고 있습니다. 그것은 비행기의 고도를 추적하기 위해 집에서 택시를 부르는 것부터 모든 분야에서 매우 광범위한 응용 프로그램을 가지고 있습니다. 다음은 이전에 구축 한 유용한 GPS 관련 프로젝트입니다.
- 차량 추적 시스템
- GPS 시계
- 사고 감지 경보 시스템
- Raspberry Pi GPS 모듈 인터페이스 자습서
- PIC 마이크로 컨트롤러와 GPS 모듈 인터페이스
이 튜토리얼에서는 위치 좌표를 찾고 16x2 LCD 디스플레이에 표시하기 위해 GPS 모듈을 STM32F103C8 마이크로 컨트롤러와 인터페이스합니다.
필요한 구성 요소
- STM32F103C8 마이크로 컨트롤러
- GPS 모듈
- 16x2 LCD 디스플레이
- 브레드 보드
- 전선 연결
GPS 모듈
GY-NEO6MV2 XM37-1612 GPS 모듈입니다. 이 GPS 모듈에는 4 개의 핀 + 5V, GND, TXD 및 RXD가 있습니다. 직렬 핀을 사용하여 통신하며 STM32F103C8의 직렬 포트와 쉽게 인터페이스 할 수 있습니다.
GPS 모듈 은 NMEA 형식으로 데이터를 전송합니다 (아래 스크린 샷 참조). NMEA 형식은 한 문장 만 필요한 여러 문장으로 구성됩니다. 이 문장은 $ GPGGA 에서 시작 하며 좌표, 시간 및 기타 유용한 정보를 포함합니다. 이 GPGGA 는 Global Positioning System Fix Data 라고합니다. 여기에서 GPS 데이터 및 문자열 읽기에 대해 자세히 알아보십시오.
다음은 설명과 함께 $ GPGGA 문자열 샘플입니다.
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M`` * 47
$ GPGGA, HHMMSS.SSS, latitude, N, longitude, E, FQ, NOS, HDP, altitude, M, height, M,, 체크섬 데이터
하지만이 튜토리얼에서는 NMEA 문장에서 필요한 모든 정보를 추출 하는 TinyGPSPlus GPS 라이브러리를 사용하고 있으며 , 위도와 경도를 얻기 위해 간단한 코드 줄만 작성하면됩니다..
STM32F103C8의 핀
STM32F103C8 (BLUE PILL) USART 직렬 통신 포트는 아래 핀아웃 이미지에 나와 있습니다. 이들은 (PA9-TX1, PA10-RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11-RX3)를 갖는 파란색입니다. 3 개의 통신 채널이 있습니다.
회로도 및 연결
GPS 모듈과 STM32F103C8 간의 회로 연결
GPS 모듈 |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
16x2 LCD 및 STM32F103C8 간의 연결
LCD 핀 번호 |
LCD 핀 이름 |
STM32 핀 이름 |
1 |
접지 (Gnd) |
접지 (G) |
2 |
VCC |
5V |
삼 |
VEE |
전위차계 중심의 핀 |
4 |
등록 선택 (RS) |
PB11 |
5 |
읽기 / 쓰기 (RW) |
접지 (G) |
6 |
활성화 (EN) |
PB10 |
7 |
데이터 비트 0 (DB0) |
연결 없음 (NC) |
8 |
데이터 비트 1 (DB1) |
연결 없음 (NC) |
9 |
데이터 비트 2 (DB2) |
연결 없음 (NC) |
10 |
데이터 비트 3 (DB3) |
연결 없음 (NC) |
11 |
데이터 비트 4 (DB4) |
PB0 |
12 |
데이터 비트 5 (DB5) |
PB1 |
13 |
데이터 비트 6 (DB6) |
PC13 |
14 |
데이터 비트 7 (DB7) |
PC14 |
15 |
LED 긍정적 |
5V |
16 |
LED 네거티브 |
접지 (G) |
전체 설정은 다음과 같습니다.
GPS 모듈 인터페이스를위한 STM32F103C8 프로그래밍
STM32를 사용하여 GPS 모듈을 사용하여 위치를 찾는 완전한 프로그램 이이 프로젝트의 마지막에 제공됩니다. STM32F103C8은 USB 포트를 통해 PC에 연결하기 만하면 Arduino IDE를 사용하여 프로그래밍 할 수 있습니다. 코드 업로드시 반드시 TX, RX 핀을 제거하고 업로드 후 연결하십시오.
GPS와 STM32를 연결하려면 먼저 GitHub 링크 TinyGPSPlus에서 라이브러리를 다운로드해야합니다. 라이브러리를 다운로드 한 후 Sketch- > Include Library->.zip Library 추가 를 통해 Arduino IDE에 포함 할 수 있습니다 . 동일한 라이브러리를 사용하여 GPS와 Arduino를 연결할 수 있습니다.
따라서 먼저 필요한 라이브러리 파일을 포함하고 16x2 LCD 용 핀을 정의합니다.
#포함
그런 다음 TinyGPSPlus 클래스의 gps 라는 개체를 만듭니다.
TinyGPSPlus gps;
다음으로 void 설정 에서 Serial1.begin (9600)을 사용하여 GPS 모듈과의 직렬 통신을 시작합니다 . Serial1은 STM32F103C8의 Serial 1 포트 (Pins-PA9, PA10)로 사용됩니다.
Serial1.begin (9600);
그런 다음 잠시 동안 환영 메시지를 표시합니다.
lcd.begin (16,2); lcd.print ("회로 다이제스트"); lcd.setCursor (0,1); lcd.print ("STM32 with GPS"); 지연 (4000); lcd.clear ();
다음으로 void loop () 에서 GPS로부터 위도와 경도를 수신하고 수신 된 데이터가 유효한지 여부를 확인하고 정보를 직렬 모니터와 LCD에 표시합니다.
사용 가능한 위치 데이터가 유효한지 확인
loc_valid = gps.location.isValid ();
위도 데이터 수신
lat_val = gps.location.lat ();
경도 데이터를받습니다.
lng_val = gps.location.lng ();
유효하지 않은 데이터가 수신되면 시리얼 모니터에 "*****"가 표시되고 LCD에 "waiting"이 표시됩니다.
if (! loc_valid) { lcd.print ("Waiting"); Serial.print ("위도:"); Serial.println ("*****"); Serial.print ("경도:"); Serial.println ("*****"); 지연 (4000); lcd.clear (); }
유효한 데이터가 수신되면 위도와 경도가 LCD 디스플레이와 직렬 모니터에 표시됩니다.
lcd.clear (); Serial.println ("GPS 읽기:"); Serial.print ("위도:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("경도:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); 지연 (4000);
다음 기능은 데이터 읽기 지연을 제공합니다. 직렬 포트에서 데이터를 계속 찾습니다.
static void GPSDelay (unsigned long ms) { unsigned long start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis ()-시작 <ms); }
GPS 및 STM32로 위도와 경도 찾기
설정을 빌드하고 코드를 업로드 한 후 GPS 모듈을 개방 된 공간에 배치하여 신호를 빠르게 수신하십시오. 때때로 신호를 수신하는 데 몇 분이 걸리므로 잠시 기다리십시오. 신호 수신이 시작되면 GPS 모듈에서 LED가 깜박이기 시작 하고 LCD 디스플레이에 위치 좌표가 표시됩니다.
Google지도를 사용하여 위치의 위도와 경도를 확인할 수 있습니다. GPS를 켠 상태에서 Google지도로 이동하여 파란색 점을 클릭하세요. 아래 그림과 같이 위도와 경도로 주소가 표시됩니다.
전체 코드 및 데모 영상은 아래에 주어진다.