- Các thành phần bắt buộc:
- Mô-đun GPS và hoạt động của nó:
- Chuẩn bị cho Raspberry Pi giao tiếp với GPS:
- Kết nối cho mô-đun GPS Raspberry Pi Giao diện:
- Kiểm tra trước Python Script:
Một trong những nền tảng nhúng tuyệt vời nhất như Arduino đã mang lại cho các nhà sản xuất và thợ tự làm khả năng lấy dữ liệu vị trí dễ dàng bằng cách sử dụng mô-đun GPS và do đó xây dựng những thứ dựa vào vị trí. Với lượng năng lượng được cung cấp bởi Raspberry Pi, chắc chắn sẽ khá tuyệt vời khi xây dựng các dự án dựa trên GPS với cùng các mô-đun GPS giá rẻ và đó là trọng tâm của bài đăng này. Hôm nay trong dự án này, chúng tôi sẽ giao diện mô-đun GPS với Raspberry Pi 3.
Mục tiêu của dự án này là thu thập dữ liệu vị trí (kinh độ và vĩ độ) thông qua UART từ mô-đun GPS và hiển thị chúng trên màn hình LCD 16x2, vì vậy nếu bạn không quen với cách màn hình LCD 16x2 hoạt động với Raspberry Pi, đây là một cách khác cơ hội tuyệt vời để học hỏi.
Các thành phần bắt buộc:
- Raspberry Pi 3
- Mô-đun GPS Neo 6m v2
- 16 x 2 LCD
- Nguồn điện cho Raspberry Pi
- Cáp LAN để kết nối pi với PC của bạn ở chế độ không đầu
- Cáp Breadboard và Jumper
- Điện trở / chiết áp cho màn hình LCD
- Thẻ nhớ 8 hoặc 16Gb chạy Raspbian Jessie
Ngoài ra, chúng ta cần cài đặt thư viện GPS Daemon (GPSD), thư viện Adafruit 16x2 LCD, mà chúng ta cài đặt sau trong hướng dẫn này.
Ở đây chúng tôi đang sử dụng Raspberry Pi 3 với Hệ điều hành Raspbian Jessie. Tất cả các yêu cầu cơ bản về Phần cứng và Phần mềm đã được thảo luận trước đây, bạn có thể tra cứu trong phần Giới thiệu Raspberry Pi.
Mô-đun GPS và hoạt động của nó:
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ế). Mô-đun GPS là thành phần chính trong dự án hệ thống theo dõi xe của chúng tôi. 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.
Mô-đun GPS gửi dữ liệu liên quan đến vị trí theo dõi trong thời gian thực và nó gửi rất nhiều 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.
Chúng ta có thể trích xuất tọa độ từ chuỗi $ GPGGA bằng cách đếm các dấu phẩy trong chuỗi. Giả sử bạn tìm thấy chuỗi $ GPGGA và lưu trữ nó trong một mảng, thì Latitude có thể được tìm thấy sau hai dấu phẩy và Kinh độ có thể được tìm thấy sau bốn dấu phẩy. Bây giờ những vĩ độ và kinh độ này có thể được đặt trong các mảng khác.
Dưới đây là Chuỗi $ GPGGA, 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 danh |
Sự miêu tả |
$ GPGGA |
Hệ thống định vị toàn cầu sửa dữ liệu |
HHMMSS.SSS |
Thời gian ở định dạng giờ phút giây và mili giây. |
Vĩ độ |
Vĩ độ (Tọa độ) |
N |
Hướng N = Bắc, S = Nam |
Kinh độ |
Kinh độ (Tọa độ) |
E |
Hướng E = Đông, W = Tây |
FQ |
Sửa dữ liệu chất lượng |
NOS |
Số lượng vệ tinh đang được sử dụng |
HPD |
Pha loãng theo chiều ngang của độ chính xác |
Độ cao |
Độ cao so với mực nước biển |
M |
Mét |
Chiều cao |
Chiều cao |
Checksum |
Dữ liệu Checksum |
Bạn có thể kiểm tra các dự án GPS khác của chúng tôi:
- Công cụ theo dõi xe dựa trên Arduino sử dụng GPS và GSM
- Hệ thống cảnh báo tai nạn xe dựa trên Arduino sử dụng GPS, GSM và Accelerometer
- Cách sử dụng GPS với Arduino
- Theo dõi xe trên Google Maps bằng Arduino, ESP8266 & GPS
Chuẩn bị cho Raspberry Pi giao tiếp với GPS:
Được rồi, vậy hãy nhảy vào, để điều này không trở nên nhàm chán, tôi sẽ cho rằng bạn đã biết rất nhiều về Raspberry Pi, đủ để cài đặt hệ điều hành của bạn, lấy địa chỉ IP, kết nối với phần mềm đầu cuối như putty và những thứ khác về SỐ PI. Nếu bạn gặp bất kỳ vấn đề gì khi thực hiện bất kỳ điều nào được đề cập ở trên, hãy liên hệ với tôi dưới phần bình luận và tôi sẽ sẵn lòng trợ giúp.
Điều đầu tiên chúng tôi phải làm để thực hiện dự án này là chuẩn bị cho Raspberry Pi 3 của chúng tôi có thể giao tiếp với mô-đun GPS thông qua UART, tin tôi đi, nó khá phức tạp và phải cố gắng để làm đúng nhưng nếu bạn làm theo hướng dẫn cẩn thận của tôi, bạn sẽ hiểu nó ngay lập tức, đây là phần khá khó khăn nhất của dự án. Ở đây chúng tôi đã sử dụng Mô-đun GPS Neo 6m v2.
Để đi sâu vào, đây là một giải thích nhỏ về Cách hoạt động của Raspberry Pi 3 UART.
Raspberry Pi có hai UART tích hợp, một PL011 và một UART mini. Chúng được thực hiện bằng cách sử dụng các khối phần cứng khác nhau nên chúng có các đặc điểm hơi khác nhau. Tuy nhiên, trên raspberry pi 3, mô-đun không dây / bluetooth được kết nối với PLO11 UART, trong khi UART mini được sử dụng cho giao diện điều khiển linux. Tùy thuộc vào cách bạn nhìn nhận nó, tôi sẽ định nghĩa PLO11 là tốt nhất trong hai UART do mức độ triển khai của nó. Vì vậy, đối với dự án này, chúng tôi sẽ hủy kích hoạt mô-đun Bluetooth từ PLO11 UART bằng cách sử dụng lớp phủ có sẵn trong phiên bản hiện tại được cập nhật của Raspbian Jessie.
Bước 1: Cập nhật Raspberry Pi:
Điều đầu tiên tôi thích làm trước khi bắt đầu mọi dự án là cập nhật pi raspberry. Vì vậy, hãy làm như bình thường và chạy các lệnh bên dưới;
sudo apt-get cập nhật sudo apt-get nâng cấp
sau đó khởi động lại hệ thống với;
khởi động lại sudo
Bước 2: Thiết lập UART trong Raspberry Pi:
Điều đầu tiên chúng ta sẽ làm trong phần này là chỉnh sửa tệp /boot/config.txt . Để thực hiện việc này, hãy chạy các lệnh dưới đây:
sudo nano /boot/config.txt
ở cuối tệp config.txt, thêm các dòng sau
dtparam = spi = on dtoverlay = pi3-disable-bt core_freq = 250 enable_uart = 1 force_turbo = 1
ctrl + x để thoát và nhấn y và enter để lưu.
Đảm bảo không có lỗi chính tả hoặc lỗi bằng cách kiểm tra kỹ vì lỗi này có thể ngăn pi của bạn khởi động.
Lý do cho các lệnh này là gì, force_turbo cho phép UART sử dụng tần số lõi tối đa mà chúng tôi đang đặt trong trường hợp này là 250. Lý do cho điều này là để đảm bảo tính nhất quán và toàn vẹn của dữ liệu nối tiếp được nhận. Điều quan trọng cần lưu ý tại thời điểm này là việc sử dụng force_turbo = 1 sẽ làm mất hiệu lực bảo hành của raspberry pi, nhưng bên cạnh đó, nó khá an toàn.
Các dtoverlay = pi3-disable-BT ngắt kết nối bluetooth từ ttyAMA0 , điều này là cho phép chúng ta truy cập vào sử dụng sức mạnh UART đầy đủ có sẵn thông qua ttyAMAO thay vì mini UART ttyS0.
Bước thứ hai trong phần thiết lập UART này là chỉnh sửa boot / cmdline.txt
Tôi sẽ đề nghị bạn tạo một bản sao của cmdline.txt và lưu trước khi chỉnh sửa để bạn có thể hoàn nguyên về sau nếu cần. Điều này có thể được thực hiện bằng cách sử dụng;
sudo cp boot / cmdline.txt boot / cmdline_backup.txt sudo nano /boot.cmdline.txt
Thay thế nội dung bằng;
dwc_otg.lpm_enable = 0 console = tty1 root = / dev / mmcblk0p2 rootfstype = ext4 lift = deadline fsck.repair = yes rootwait yên tĩnh giật gân plymouth.ignore-serial-console
Lưu và thoát.
Sau đó, chúng tôi sẽ khởi động lại hệ thống một lần nữa để thực hiện các thay đổi ( khởi động lại sudo ).
Bước 3: Tắt dịch vụ Getty nối tiếp Raspberry Pi
Bước tiếp theo là tắt dịch vụ getty nối tiếp của Pi, lệnh sẽ ngăn nó khởi động lại khi khởi động lại:
sudo systemctl dừng [email protected] sudo systemctl vô hiệu [email protected]
Các lệnh sau có thể được sử dụng để bật lại nếu cần
sudo systemctl kích hoạt [email protected] sudo systemctl start [email protected]
Khởi động lại hệ thống.
Bước 4: Kích hoạt ttyAMAO:
Chúng tôi đã tắt ttyS0, điều tiếp theo là chúng tôi bật ttyAMAO .
sudo systemctl cho phép [email protected]
Bước 5: Cài đặt Minicom và pynmea2:
Chúng tôi sẽ có một minicom để kết nối với mô-đun GPS và hiểu dữ liệu. Đây cũng là một trong những công cụ mà chúng tôi sẽ sử dụng để kiểm tra xem mô-đun GPS của chúng tôi có hoạt động tốt hay không. Một thay thế cho minicom là phần mềm daemon GPSD.
sudo apt-get install minicom
Để dễ dàng phân tích cú pháp dữ liệu đã nhận, chúng tôi sẽ sử dụng thư viện pynmea2 . Nó có thể được cài đặt bằng cách sử dụng;
sudo pip cài đặt pynmea2
Tài liệu thư viện có thể được tìm thấy tại đây
Bước 6: Cài đặt Thư viện LCD:
Đối với hướng dẫn này, chúng tôi sẽ sử dụng thư viện AdaFruit. Thư viện được tạo cho màn hình AdaFruit nhưng cũng hoạt động cho các bảng hiển thị sử dụng HD44780. Nếu màn hình của bạn dựa trên điều này thì nó sẽ hoạt động mà không có vấn đề gì.
Tôi cảm thấy tốt hơn nếu sao chép thư viện và chỉ cần cài đặt trực tiếp. Để nhân bản chạy;
git clone
thay đổi vào thư mục nhân bản và cài đặt nó
cd./Adafruit_Python_CharLCD sudo python setup.py install
Ở giai đoạn này, tôi sẽ đề xuất một lần khởi động lại khác để chúng tôi sẵn sàng tiếp tục kết nối các thành phần.
Kết nối cho mô-đun GPS Raspberry Pi Giao diện:
Kết nối Mô-đun GPS và màn hình LCD với Raspberry Pi như thể hiện trong Sơ đồ mạch bên dưới.
Kiểm tra trước Python Script:
Tôi cảm thấy điều quan trọng là phải kiểm tra kết nối mô-đun GPS trước khi tiếp tục tập lệnh python, Chúng tôi sẽ sử dụng minicom cho việc này. Chạy lệnh:
sudo minicom -D / dev / ttyAMA0 -b9600
trong đó 9600 đại diện cho tốc độ truyền mà mô-đun GPS giao tiếp. Điều này có thể được sử dụng khi chúng tôi chắc chắn về giao tiếp dữ liệu giữa GPS và RPI, đã đến lúc viết tập lệnh python của chúng tôi.
Thử nghiệm cũng có thể được thực hiện bằng mèo
mèo sudo / dev / ttyAMA0
Trong Window, bạn có thể xem các câu NMEA mà chúng ta đã thảo luận trước đó.
Tập lệnh Python cho hướng dẫn GPS Raspberry Pi này được đưa ra bên dưới trong phần Mã.
Với tất cả những gì đã nói và làm, đã đến lúc kiểm tra toàn bộ hệ thống. Điều quan trọng là bạn phải đảm bảo GPS của mình đang được sửa chữa tốt, bằng cách lấy nó ra, hầu hết GPS yêu cầu từ ba đến 4 vệ tinh để sửa lỗi, mặc dù của tôi hoạt động trong nhà.
Hoạt động đúng không? Phải…
Có câu hỏi hoặc nhận xét? Thả chúng trong phần bình luận.
Video minh họa được đưa ra bên dưới, nơi chúng tôi đã hiển thị Vị trí theo vĩ độ và kinh độ trên màn hình LCD bằng GPS và Raspberry Pi.