- Các thành phần bắt buộc:
- Mô-đun GPS:
- Nhận Dữ liệu Vị trí từ GPS:
- Giao diện GPS với ESP12E NodeMCU:
- Giải thích mã:
- Mã HTML cho trang web:
GPS là viết tắt của Hệ thống Định vị Toàn cầu và nó được sử dụng để tìm ra vị trí, độ cao, tốc độ, ngày và giờ trong UTC. Trong dự án này, chúng tôi sẽ giao diện một mô-đun GPS với NodeMCU. Một máy chủ web cục bộ đơn giản được tạo bằng NodeMCU và chi tiết vị trí được cập nhật trong trang web máy chủ đó. Điểm đặc biệt của dự án dựa trên IoT này là chúng ta có thể kiểm tra vị trí trong Bản đồ Goolge bằng cách nhấp vào liên kết được cung cấp trong trang web. Bạn cũng có thể mở trang web này và kiểm tra vị trí từ bất kỳ đâu bằng cách kích hoạt chuyển tiếp cổng trong modem / bộ định tuyến của bạn.
Các thành phần bắt buộc:
- NodeMCU ESP12
- Mô-đun GPS (uBlox Neo 6M GPS)
Mô-đun GPS:
Ublox Neo 6M là một mô-đun GPS nối tiếp cung cấp thông tin chi tiết về vị trí thông qua giao tiếp nối tiếp. Nó có bốn chân.
ghim |
Sự miêu tả |
Vcc |
Nguồn điện 2.7 - 5V |
Gnd |
Đất |
TXD |
Chuyển dữ liệu |
RXD |
Nhận dữ liệu |
Mô-đun GPS Ublox neo 6M tương thích với TTL và thông số kỹ thuật của nó được đưa ra bên dưới.
Nắm bắt thời gian | Khởi động nguội: 27 giây, Khởi động nóng: 1 giây |
Giao thức truyền thông | NMEA |
Truyền thông nối tiếp | 9600bps, 8 bit dữ liệu, 1 bit dừng, không có tính chẵn lẻ và không có điều khiển luồng |
Hoạt động hiện tại | 45mA |
Nhận Dữ liệu Vị trí từ GPS:
Mô-đun sẽ truyền dữ liệu theo nhiều chuỗi với tốc độ 9600 Baud. Nếu chúng tôi sử dụng thiết bị đầu cuối UART với tốc độ 9600 Baud, chúng tôi sẽ thấy dữ liệu nhận được bằng GPS.
Mô-đun GPS gửi dữ liệu vị trí theo dõi thời gian thực ở định dạng NMEA (xem ảnh chụp màn hình ở trên). Định dạng NMEA bao gồm một số câu, trong đó bốn câu quan trọng được đưa ra dưới đây. Bạn có thể xem thêm chi tiết về câu NMEA và định dạng dữ liệu của nó tại đây.
- $ GPGGA: Dữ liệu sửa chữa hệ thống định vị toàn cầu
- $ GPGSV: Các vệ tinh GPS trong chế độ xem
- $ GPGSA: GPS DOP và các vệ tinh đang hoạt động
- $ GPRMC: Dữ liệu GPS / Phương tiện công cộng tối thiểu được đề xuất
Tìm hiểu thêm về dữ liệu GPS và chuỗi NMEA tại đây.
Đây là dữ liệu nhận được bằng GPS khi kết nối với tốc độ 9600 baud.
$ GPRMC, 141848,00, A, 2237.63306, N, 08820.86316, E, 0,553, 100418,,, A * 73 $ GPVTG,, T,, M, 0,553, N, 1,024, K, A * 27 $ GPGGA, 141848,00, 2237,63306, N, 08820.86316, E, 1,03,2.56,1,9, M, -54,2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,,, 2,75, 2,56,1,00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237,63306, N, 08820.86316, E, 141848,00, A, A * 65
Khi chúng tôi sử dụng mô-đun GPS để theo dõi bất kỳ vị trí nào, chúng tôi chỉ cần tọa độ và chúng tôi có thể tìm thấy điều này trong chuỗi $ GPGGA. Chỉ chuỗi $ GPGGA (Dữ liệu sửa chữa hệ thống định vị toàn cầu) chủ yếu được sử dụng trong các chương trình và các chuỗi khác bị bỏ qua.
$ GPGGA, 141848.00,2237,63306, N, 08820.86316, E, 1,03,2.56,1,9, M, -54,2, M,, * 74
Ý nghĩa của dòng đó là gì?
Ý nghĩa của dòng đó là: -
1. Chuỗi luôn bắt đầu bằng dấu "$"
2. GPGGA là viết tắt của Global Positioning System Fix Data
3. Dấu phẩy “,” cho biết khoảng cách giữa hai giá trị
4. 141848.00: Giờ GMT là 14 (giờ): 18 (phút): 48 (giây): 00 (mili giây)
5. 2237,63306, N: Vĩ độ 22 (độ) 37 (phút) 63306 (giây) Bắc
6. 08820.86316, E: Kinh độ 088 (độ) 20 (phút) 86316 (giây) Đông
7. 1: Sửa Số lượng 0 = dữ liệu không hợp lệ, 1 = dữ liệu hợp lệ, 2 = sửa DGPS
8. 03: Số lượng vệ tinh đang xem.
9. 1.0: HDOP
10. 2,56, M: Độ cao (Độ cao trên mực nước biển tính bằng mét)
11. 1.9, M: Chiều cao Geoids
12. * 74: tổng kiểm tra
Vì vậy, chúng ta cần số 5 và số 6 để thu thập thông tin về vị trí mô-đun hoặc vị trí của nó. Trong dự án này, chúng tôi đã sử dụng Thư viện GPS cung cấp một số chức năng để trích xuất vĩ độ và kinh độ nên chúng tôi không phải lo lắng về điều đó.
Trước đây chúng tôi đã giao diện GPS với các bộ vi điều khiển khác:
· Cách sử dụng GPS với Arduino
· Hướng dẫn giao diện mô-đun GPS Raspberry Pi
· Mô-đun GPS giao diện với Vi điều khiển PIC
· Theo dõi xe trên Google Maps bằng Arduino, ESP8266 & GPS
Giao diện GPS với ESP12E NodeMCU:
NodeMCU là board phát triển dựa trên ESP8266. Nó có ESP-12E làm lõi xử lý. Nó là một MCU 32bit. Nó có 14 chân GPIO, kênh đơn 10 bit tích hợp ADC. Nó hỗ trợ giao tiếp UART, I2C, SPI. Nó tương thích 3.3V, nó không thể xử lý 5V. Nếu bạn chưa quen với NodeMCU thì hãy đọc phần Bắt đầu với NodeMCU ESP-12 của chúng tôi.
Các kết nối giữa NodeMCU và mô-đun GPS như hình dưới đây.
NodeMCU |
Mô-đun GPS |
3V3 |
Vcc |
GND |
GND |
D1 (GPIO5) |
RX |
D2 (GPIO4) |
TX |
Dưới đây là Sơ đồ mạch kết nối GPS với NodeMCU:
Mô-đun GPS cần một khoảng thời gian để nắm bắt chi tiết vị trí sau khi được bật nguồn. NodeMCU khởi động máy chủ web và đợi một máy khách kết nối với máy chủ web. Sau khi máy khách được kết nối với máy chủ web, NodeMCU sẽ gửi thông tin chi tiết về vị trí cho máy khách được kết nối. Chi tiết vị trí được hiển thị trong một trang web đơn giản được thiết kế bằng HTML.
Các bước:
- Nối mạch điện như trong sơ đồ.
- Tải lên mã sau khi thay đổi thông tin đăng nhập Wi-Fi.
- Mở màn hình nối tiếp trong Arduino IDE và ghi lại địa chỉ IP của máy chủ web.
- Mở Trình duyệt bất kỳ và nhập địa chỉ IP của máy chủ web.
- Nó sẽ hiển thị chi tiết Vị trí, ngày, giờ và liên kết bản đồ Google.
Giải thích mã:
Các mã nguồn hoàn chỉnh cho dự án này được đưa ra ở cuối bài viết này. Mã được chia thành các đoạn nhỏ có ý nghĩa và được giải thích bên dưới.
Để giao tiếp mô-đun GPS với NodeMCU, chúng ta cần bao gồm các tệp tiêu đề thích hợp. Các tệp tiêu đề có thể được tải xuống từ các liên kết dưới đây.
Thư viện GPS ++ nhỏ:
#include
Để tạo máy chủ web bằng NodeMCU, máy chủ này cần được kết nối với Mạng Wi-Fi. Trong phần này của mã, chúng tôi cung cấp thông tin đăng nhập Wi-Fi của mạng không dây mà NodeMCU được kết nối. Thay thế điều này bằng thông tin đăng nhập Wi-Fi của bạn.
const char * ssid = " shashi "; const char * password = "12345678";
Trong phần này của mã, chúng tôi đang tạo một đối tượng của lớp TinyGPSPlus và xác định các chân mà mô-đun GPS được kết nối. Mô-đun GPS được kết nối với chân 4 và 5 (GPIO4 và GPIO5) của NodeMCU. Để hỗ trợ giao tiếp nối tiếp trên chân 4 và 5, chúng tôi đang sử dụng thư viện “SoftwareSerial” để tạo cổng nối tiếp ảo.
TinyGPSPlus gps; // Đối tượng TinyGPS ++ SoftwareSerial ss (4, 5); // Kết nối nối tiếp với thiết bị GPS.
Dòng mã này cho biết số cổng của máy chủ web đang được tạo. Đối với kết nối, số cổng mặc định là 80.
Máy chủ WiFiServer (80);
Để tạo máy chủ web bằng NodeMCU, đoạn mã được đề cập dưới đây được sử dụng. Sau khi tạo máy chủ web, nó sẽ in địa chỉ IP của máy chủ web trong Serial Monitor. Sau đó, địa chỉ IP này được sử dụng để truy cập máy chủ web trong mạng cục bộ.
server.begin (); Serial.println ("Máy chủ đã khởi động"); Serial.println (WiFi.localIP ()); // In địa chỉ IP
Tiếp theo, chúng ta phải bắt đầu đọc dữ liệu Sê-ri được gửi ra từ mô-đun GPS và nếu nó không có lỗi, chúng ta phải trích xuất chi tiết vị trí từ nó. Để trích xuất chi tiết vị trí, chúng tôi đang sử dụng thư viện TinyGPSPlus . Phần này của mã thực hiện công việc trên.
while (ss.available ()> 0) if (gps.encode (ss.read ()))
Nếu chuỗi nhận được không có lỗi, trước tiên chúng ta phải kiểm tra xem vị trí đó có hợp lệ hay không. Nếu vị trí hợp lệ, chúng tôi phải trích xuất vĩ độ và kinh độ từ nó. Sau đó, nó được chuyển đổi sang định dạng chuỗi để hiển thị nó trong Trang web. Để thực hiện nhiệm vụ này, chúng tôi đang sử dụng đoạn mã này.
if (gps .location.isValid ()) { lattitude = gps.location.lat (); lat_str = String (độ trễ, 6); longitude = gps.location.lng (); lng_str = String (kinh độ, 6); }
Chúng ta cần làm theo các bước tương tự để trích xuất ngày và giờ.
if (gps.date.isValid ()) { date = gps.date.day (); tháng = gps.date.month (); năm = gps.date.year (); }
Để trích xuất Thời gian, chúng ta cần làm theo quy trình tương tự, nhưng GPS cung cấp thời gian ở định dạng UTC. Để chuyển đổi UTC sang IST, chúng tôi cần thêm khoảng chênh lệch + 5 giờ 30 phút cho UTC. Phần này của mã thực hiện chuyển đổi từ UTC sang IST.
phút = (phút + 30); if (phút> 59) { phút = phút - 60; giờ = giờ + 1; } giờ = (giờ + 5); if (giờ> 23) giờ = giờ - 24;
Giờ này ở định dạng 24 giờ. Để chuyển đổi định dạng 24 giờ sang 12 giờ, mã được đề cập dưới đây được sử dụng.
if (giờ> = 12) chiều = 1; khác pm = 0; giờ = giờ% 12;
Trong phần này của mã, chúng tôi đang kiểm tra xem máy khách có được kết nối với máy chủ web hay không. nó đợi cho đến khi một máy khách được kết nối.
WiFiClient client = server.available (); if (! client) { return; }
Khi một máy khách được kết nối, máy chủ web cần gửi phản hồi đến máy khách. Trang web được thiết kế bằng HTML. Mã HTML cho trang web được đưa ra ở cuối bài viết này. Các giá trị vĩ độ, kinh độ, ngày và giờ được cập nhật sau khi nhận được dữ liệu từ mô-đun GPS. Trong phần này của mã, chúng tôi đang gửi phản hồi cho khách hàng. Where 's' là một chuỗi chứa mã HTML cho trang web và chi tiết vị trí.
client.print (các);
Mã HTML cho trang web:
Giao diện GPS với NodeMCU
Chi tiết vị trí
Vĩ độ | 12,9000 |
---|---|
Kinh độ | 77.5900 |
Ngày | 22/6/18 |
Thời gian | 07:12:12 |
Bấm vào đây! Để kiểm tra vị trí trong bản đồ Google.
Đây là giao diện của trang web sau khi chúng tôi mở IP của máy chủ web cục bộ trong trình duyệt web.
Khi bạn nhấp vào liên kết “ Nhấp vào đây ”, nó sẽ mở ra vị trí trong Google Maps như bên dưới: