- Thành phần bắt buộc
- Mô-đun GPS
- Ghim ra khỏi STM32F103C8
- Sơ đồ mạch và kết nối
- Lập trình STM32F103C8 cho Giao diện mô-đun GPS
- Tìm Vĩ độ và Kinh độ với GPS và STM32
GPS là viết tắt của Hệ thống Định vị Toàn cầu và được sử dụng để phát hiện Vĩ độ và Kinh độ của bất kỳ vị trí nào trên Trái đất, với thời gian UTC chính xác (Phối hợp theo giờ quốc tế). Thiết bị này nhận các tọa độ từ vệ tinh trong từng giây, với thời gian và ngày tháng. GPS cung cấp độ chính xác cao và cũng cung cấp dữ liệu khác ngoài tọa độ vị trí.
Chúng ta đều biết rằng GPS là một thiết bị rất hữu ích và được sử dụng rất phổ biến trong điện thoại di động và các thiết bị cầm tay khác để theo dõi vị trí. Nó có rất nhiều ứng dụng trong mọi lĩnh vực từ gọi taxi tại nhà của bạn để theo dõi độ cao của máy bay. Dưới đây là một số dự án hữu ích liên quan đến GPS, chúng tôi đã xây dựng trước đây:
- Hệ thống theo dõi xe
- Đồng hồ GPS
- Hệ thống cảnh báo phát hiện tai nạn
- Hướng dẫn giao diện mô-đun GPS Raspberry Pi
- Giao diện mô-đun GPS với Vi điều khiển PIC
Ở đây trong hướng dẫn này, chúng tôi sẽ Giao diện mô-đun GPS với vi điều khiển STM32F103C8 để tìm tọa độ vị trí và hiển thị chúng trên màn hình LCD 16x2.
Thành phần bắt buộc
- Vi điều khiển STM32F103C8
- Mô-đun GPS
- Màn hình LCD 16x2
- Breadboard
- Kết nối dây
Mô-đun GPS
Đó là Mô-đun GPS GY-NEO6MV2 XM37-1612. Mô-đun GPS này có bốn pin + 5V, GND, TXD và RXD. Nó giao tiếp bằng các chân Serial và có thể dễ dàng giao tiếp với cổng Serial của STM32F103C8.
Mô-đun GPS gửi dữ liệu ở định dạng NMEA (xem ảnh chụp màn hình bên dưới). Định dạng NMEA bao gồm một số câu, trong đó chúng ta chỉ cần một câu. Câu này bắt đầu từ $ GPGGA và chứa tọa độ, thời gian và các thông tin hữu ích khác. Đây GPGGA được gọi Global Positioning System Fix dữ liệu. Biết thêm về Đọc dữ liệu GPS và các chuỗi của nó tại đây.
Dưới đây là một chuỗi $ GPGGA mẫu, cùng với mô tả của nó:
$ GPGGA, 104534.000.7791.0381, N, 06727.4434, E, 1.08.0.9.510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, vĩ độ, N, kinh độ, E, FQ, NOS, HDP, độ cao, M, chiều cao, M,, dữ liệu tổng kiểm tra
Nhưng ở đây trong hướng dẫn này, chúng ta đang sử dụng thư viện TinyGPSPlus GPS để trích xuất tất cả thông tin cần thiết từ câu NMEA và chúng ta chỉ cần viết một dòng mã đơn giản để lấy vĩ độ và kinh độ, chúng ta sẽ xem sau trong hướng dẫn..
Ghim ra khỏi STM32F103C8
Các cổng giao tiếp nối tiếp USART STM32F103C8 (BLUE PILL) được hiển thị trong hình ảnh chân ra bên dưới. Đây là những màu xanh lam có (PA9-TX1, PA10- RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11- RX3). Nó có ba kênh liên lạc như vậy.
Sơ đồ mạch và kết nối
Kết nối mạch giữa mô-đun GPS và STM32F103C8
Mô-đun GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Kết nối giữa 16x2 LCD & STM32F103C8
Pin LCD Không |
Tên pin LCD |
Tên pin STM32 |
1 |
Mặt đất (Gnd) |
Mặt đất (G) |
2 |
VCC |
5V |
3 |
VEE |
Ghim từ Trung tâm của Potentiometer |
4 |
Đăng ký Chọn (RS) |
PB11 |
5 |
Đọc / Ghi (RW) |
Mặt đất (G) |
6 |
Bật (EN) |
PB10 |
7 |
Bit dữ liệu 0 (DB0) |
Không có kết nối (NC) |
số 8 |
Bit dữ liệu 1 (DB1) |
Không có kết nối (NC) |
9 |
Bit dữ liệu 2 (DB2) |
Không có kết nối (NC) |
10 |
Bit dữ liệu 3 (DB3) |
Không có kết nối (NC) |
11 |
Bit dữ liệu 4 (DB4) |
PB0 |
12 |
Bit dữ liệu 5 (DB5) |
PB1 |
13 |
Bit dữ liệu 6 (DB6) |
PC13 |
14 |
Bit dữ liệu 7 (DB7) |
PC14 |
15 |
LED tích cực |
5V |
16 |
LED âm bản |
Mặt đất (G) |
Toàn bộ thiết lập sẽ giống như dưới đây:
Lập trình STM32F103C8 cho Giao diện mô-đun GPS
Chương trình hoàn chỉnh để tìm vị trí bằng mô-đun GPS sử dụng STM32 được đưa ra ở phần cuối của dự án này. STM32F103C8 có thể được lập trình bằng Arduino IDE bằng cách chỉ cần kết nối nó với PC qua cổng USB. Đảm bảo loại bỏ các chân TX và RX trong khi tải mã lên và kết nối nó sau khi tải lên.
Để giao tiếp GPS với STM32, trước tiên chúng ta phải tải xuống một thư viện từ liên kết GitHub TinyGPSPlus. Sau khi tải xuống thư viện, nó có thể được đưa vào Arduino IDE bằng cách Sketch -> Bao gồm Thư viện -> Thêm Thư viện.zip. Cùng một thư viện có thể được sử dụng để giao tiếp GPS với Arduino.
Vì vậy, trước tiên hãy bao gồm các tệp thư viện cần thiết và xác định các chân cho LCD 16x2:
#include
Sau đó, tạo một đối tượng có tên gps của lớp TinyGPSPlus.
TinyGPSPlus gps;
Tiếp theo trong phần thiết lập void , bắt đầu giao tiếp nối tiếp với mô-đun GPS bằng Serial1.begin (9600). Serial1 được sử dụng làm cổng Serial 1 (Pins-PA9, PA10) của STM32F103C8.
Serial1.begin (9600);
Sau đó, hiển thị thông báo chào mừng trong một thời gian.
lcd.begin (16,2); lcd.print ("Thông báo Mạch"); lcd.setCursor (0,1); lcd.print ("STM32 với GPS"); chậm trễ (4000); lcd.clear ();
Tiếp theo trong vòng lặp void (), chúng tôi nhận vĩ độ và kinh độ từ GPS và kiểm tra xem dữ liệu nhận được có hợp lệ hay không và hiển thị thông tin trong màn hình nối tiếp và màn hình LCD.
Kiểm tra xem dữ liệu vị trí có sẵn có hợp lệ hay không
loc_valid = gps.location.isValid ();
Nhận dữ liệu vĩ độ
lat_val = gps.location.lat ();
Nhận dữ liệu kinh độ
lng_val = gps.location.lng ();
Nếu dữ liệu không hợp lệ được nhận, nó sẽ hiển thị “*****” trong màn hình nối tiếp và hiển thị “đang chờ” trên màn hình LCD.
if (! loc_valid) { lcd.print ("Đang chờ"); Serial.print ("Vĩ độ:"); Serial.println ("*****"); Serial.print ("Kinh độ:"); Serial.println ("*****"); chậm trễ (4000); lcd.clear (); }
Nếu nhận được dữ liệu hợp lệ, vĩ độ và kinh độ được hiển thị trên màn hình nối tiếp cũng như trên màn hình LCD.
lcd.clear (); Serial.println ("GPS READING:"); Serial.print ("Vĩ độ:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Kinh độ:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); chậm trễ (4000);
Chức năng sau cung cấp độ trễ để đọc dữ liệu. Nó tiếp tục tìm kiếm dữ liệu trên cổng nối tiếp.
static void GPSDelay (unsigned long ms) { unsigned long start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - start <ms); }
Tìm Vĩ độ và Kinh độ với GPS và STM32
Sau khi xây dựng thiết lập và tải lên mã, hãy đảm bảo đặt mô-đun GPS ở khu vực thoáng để nhận tín hiệu nhanh. Đôi khi mất vài phút để nhận được tín hiệu vì vậy hãy đợi một chút thời gian. Đèn LED sẽ bắt đầu nhấp nháy trong mô-đun GPS khi nó bắt đầu nhận tín hiệu và tọa độ vị trí sẽ được hiển thị trên màn hình LCD.
Bạn có thể xác minh vĩ độ và kinh độ của vị trí bằng cách sử dụng bản đồ của Google. Chỉ cần Truy cập bản đồ Google với GPS được BẬT và nhấp vào chấm màu xanh lam. Nó sẽ hiển thị địa chỉ với vĩ độ và kinh độ như trong hình dưới đây
Đoạn mã hoàn chỉnh và video trình diễn được đưa ra bên dưới.