Sim A9G bài 6: GPS tracking với Traccar server

Sim A9G bài 6: GPS tracking với Traccar server

Series: Lập trình module sim A9G với GPRS_C_SDK

wp-content/uploads/2019/09/A9G_GPRS_GPS_SS1.png

Dự án này có những tính năng có lẽ được mong chờ nhất trên module sim A9G, đó chính là GPS và GPRS (HTTP request).

Chúng ta sẽ biến Pudding thành một thiết bị GPS đơn giản. Sau đó, có thể gắn nó lên xe hoặc tàu bè để theo dõi vị trí với Traccar server.

Let’s do it!

Video hướng dẫn

Giới thiệu Traccar

Traccar là hệ thống theo dõi GPS miễn phí và mã nguồn mở. Hệ thống Traccar gồm:

  • Traccar Server (có thể tự host trên Linux hoặc Windows)
  • Traccar Client (mobile app, dùng để gửi dữ liệu GPS lên server từ smartphone)
  • Traccar Manager (web hoặc mobile app, dùng để theo dõi và quản lý thiết bị)
  • Thiết bị GPS (thiết bị GPS có trên thị trường hoặc chính là module Pudding mà chúng ta sẽ làm)

Traccar hỗ trợ hàng trăm thiết bị và giao thức (protocol) khác nhau. Ngoài ra, chúng ta có thể tự làm một thiết bị GPS và sử dụng các giao thức đơn giản để kết nối với Traccar server.

Traccar Manager dùng OpenStreetMap để hiển thị bản đồ.

Tổng quan dự án

Các thành phần chính gồm: Traccar server, Pudding, Trình duyệt web hoặc mobile app. Tất cả phải được kết nối internet.

Pudding sẽ liên tục gửi dữ liệu GPS lên Traccar server thông qua mạng GPRS.

Traccar server sẽ đóng vai trò trung gian để tiếp nhận và lưu trữ dữ liệu GPS do Pudding gửi lên.
Sau khi nhận được dữ liệu, Traccar server sẽ cập nhật vào DB và gửi dữ liệu mới tới trình duyệt (mobile app) thông qua websocket.

Người dùng sẽ sử dụng trình duyệt (demo.traccar.org) hoặc mobile app để theo dõi vị trí của Pudding theo thời gian thực.

Giao thức “OsmAnd”

OsmAnd là một giao thức đơn giản, cho phép gửi thông tin GPS lên Traccar chỉ bằng một request HTTP GET.

Đường dẫn OsmAnd có dạng như sau:

http://demo.traccar.org:5055/?id=123456&lat={0}&lon={1}&timestamp={2}&hdop={3}&altitude={4}&speed={5}

Trong đó:

  • http://demo.traccar.org:5055 là địa chỉ và port của server.
    Nếu bạn tự host một server thì thông số này phải thay đổi theo server của bạn.
  • id: mã định danh (ID) của thiết bị, có thể là IMEI hoặc GUID
  • lat: vĩ độ
  • lon: kinh độ
  • timestamp: thời gian
  • hdop: độ sai số (more)
  • altitude: độ cao
  • speed: tốc độ (knot)

Trong bài này, chúng ta sẽ sử dụng OsmAnd với các thông số vĩ độ (lat) và kinh độ (lon). Các thông số khác có thể bỏ qua.

Cách gửi dữ liệu GPS lên Traccar như sau: Thiết bị GPS (Pudding, ESP8266 + GPS module, Smartphone) sẽ tạo một request HTTP GET tới đường dẫn như trên, với các thông số lat lon theo thực tế lấy được.

Gói tin NMEA

NMEA là viết tắt của “National Marine Electronics Association” – Hiệp hội Điện tử Hàng hải Quốc Gia (Mỹ). NMEA ra đời năm 1957, trước hệ thống GPS khá lâu.

Ngày nay, NMEA là tên của một chuẩn định dạng dữ liệu được hỗ trợ bởi tất cả các nhà sản suất thiết bị GPS, tương tự như ASCII là chuẩn kí tự trong máy tính.

Gói tin GPS của Pudding có chuẩn là NMEA.

Chuyển đổi NMEA sang GPS Degrees

Bên trong Pudding có một module GPS riêng biệt và được nối với module chính (A9) thông qua UART.
Có thể hiểu A9 + GPS = A9G (Pudding).

Gói tin của module GPS gửi sang A9 có chuẩn là NMEA. Ai-Thinker cũng đang cung cấp một số hàm để trích xuất dữ liệu từ gói tin đó và cho ra các thông số cần thiết (lat, lon-lng, v.v..).

Dữ liệu lat lng sau khi trích xuất ra có dạng ddmm.mmmm và chưa thể sử dụng ngay với bản đồ. Thay vào đó, chúng ta phải chuyển đổi chúng sang dạng dd.dddddd.

Ví dụ:
Dữ liệu từ gói tin NMEA: 3218.0489, N, 6447.5086, W
(Tất nhiên dữ liệu này không thể dùng trực tiếp với Gmaps được.)

Ta có:
3218.0489, N = 32 (deg) + 18.0489 (min) = 32 (deg) + 18.0489 / 60 (deg) = 32.300815 (deg) N
6447.5086, W = 64 (deg) + 47.5086 (min) = 64 (deg) + 47.5086 / 60 (deg) = 64.79181 (deg) W

Lấy 32.300815, 64.79181 dán vào ô tìm kiếm của Gmaps, ta sẽ được vị trí chính xác.

Đăng ký GPRS cho Sim trên Pudding

Để Pudding có thể kết nối được internet, chúng ta cần cấu hình GPRS cho nó. Tùy vào mỗi nhà mạng sẽ có bộ cấu hình khác nhau. Một bộ cấu hình cần 3 tham số: APN, Username và Password.

Dưới đây là bộ cấu hình tham khảo của các nhà mạng ở Việt Nam.

Nhà mạng APN Username Password
Viettel v-internet <trống> <trống>
Mobifone m-wap mms mms
Vinaphone m3-world mms mms
Vietnamobile internet <trống> <trống>

Vấn đề có thể gặp phải

Trong quá trình thử nghiệm mình thấy có một vấn đề đó là khi thiết bị di chuyển quá nhanh thì dữ liệu cập nhật lên Traccar thỉnh thoảng bị chậm (lag). Tức là dữ liệu bị dồn cục một lúc rồi mới đẩy lên Traccar server.

Mình nghi ngờ rằng, có thể do lúc đó mình đang di chuyển qua vùng tiếp giáp phủ sóng của các trạm BTS. Khi đi từ vùng này sang vùng kia, Pudding phải kết nối lại với trạm BTS khiến cho quá trình gửi dữ liệu bị gián đoạn (?).

Các bạn thử nghiệm có bị hay không, hãy comment bên dưới nhé. Và bạn nào có giải chính xác hơn cũng chia sẻ cho mọi người nhé.

Chúc các bạn thành công!

Source code & Tham khảo

code: xcode.vn|sim-a9g-#6
Convert NMEA to GPS degrees

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

10 Bình luận

      1. Anh đã từng làm đọc tín hiệu digital về để điều khiển chưa ạ. Ví dụ như cảm biến dung chẳng hạn. Mong anh chỉ giúp

      1. A9G trả sai thông tin tọa độ.
        Socket sending OK! connId=1, URL=GET /?id=1670219&lat=22.606110&lon=113.840075 HTTP/1.1
        Host: demo.traccar.org
        lvdinh: mình khắc phục bằng cách nạp lại fw cho A9G đc ko?