Tài liệu này giúp bạn test nhanh module GPS U‑Blox NEO‑M10 để biết module có hoạt động hay không, trước khi tích hợp sâu vào dự án IoT.
1. Giới thiệu module GPS U‑Blox NEO‑M10
Module định vị GPS U‑Blox NEO‑M10 là phiên bản nâng cấp của NEO‑M8, hỗ trợ:
- Giao thức UART TTL chuẩn NMEA0183 – đọc dữ liệu dễ dàng bằng mọi vi điều khiển (ESP32, Arduino, STM32, …) hoặc USB‑TTL.
- Hỗ trợ 5 hệ thống định vị:
- GPS (Mỹ)
- GLONASS (Nga)
- Galileo (EU)
- Beidou/BDS (Trung Quốc)
- QZSS (Nhật Bản)
- Tốc độ UART hỗ trợ rộng: 4800–921600 bps, mặc định 38400 bps.
- Tần số cập nhật UBX: 0.25–10 Hz (mặc định 1 Hz).
- Độ nhạy cao, thời gian bắt vệ tinh nhanh, phù hợp các ứng dụng như UAV, robot, thiết bị định vị di động.
- Tích hợp pin backup và EEPROM lưu cấu hình.
Thông số chính:
- Điện áp cấp: 5V DC
- Dòng hoạt động: ~23 mA
- Giao tiếp: UART TTL, chuẩn NMEA0183
- Kênh: 99 CH
- Tốc độ truyền mặc định: 38400 bps
- Độ chính xác ngang: ~1.5 m (2D RMS, hỗ trợ SBAS)
- Tần số cập nhật: 1 Hz (mặc định, có thể cấu hình đến 10 Hz)
- Dải nhiệt độ: −40 đến +85 °C
- Kích thước board: ~46 x 20 x 6.2 mm (dài x rộng x cao)
- Cổng anten: SMA hoặc IPEX U.FL 2.0 mm (tùy phiên bản)
Trên board thường có hàng chân 4 pin:
5V– nguồn 5VGND– mass chungTX– UART TX (tín hiệu từ GPS đi ra)RX– UART RX (tín hiệu vào GPS)
2. Kết nối NEO‑M10 với ESP32‑C3 SuperMini (Tensar Robot)
2.1. Sơ đồ chân
Module (4 chân):
5VGNDTXRX
ESP32‑C3 SuperMini (Tensar Robot – theo sơ đồ pin bạn dùng):
- Chân nguồn:
5V,GND - UART1 dùng để đọc GPS:
GPIO20– RX (nhận dữ liệu)GPIO21– TX (gửi dữ liệu)
2.2. Wiring chi tiết
Nối dây như sau:
- Nguồn:
5V(module GPS) → chân5VESP32‑C3GND(module GPS) → chânGNDESP32‑C3
- UART:
TX(module GPS) →GPIO20(RX của ESP32‑C3)RX(module GPS) →GPIO21(TX của ESP32‑C3)
Lưu ý bắt buộc: GND phải chung giữa ESP32 và module GPS.
3. Cấu hình môi trường Arduino IDE
- Cắm ESP32‑C3 SuperMini vào máy tính qua USB‑C.
- Mở Arduino IDE.
- Chọn board:
Tools → Board → ESP32 Arduino → ESP32C3 Dev Module(hoặc tương đương theo core bạn cài).
- Bật chế độ USB CDC:
Tools → USB CDC On Boot → Enabled.
- Chọn cổng COM tương ứng.
Không cần thêm thư viện gì đặc biệt cho bản test RAW (chỉ dùng HardwareSerial).
4. Code test tối giản – kiểm tra UART & NMEA
Mục tiêu của sketch này:
- Kiểm tra module có gửi NMEA hay không (bất kể đã fix hay chưa).
- Đảm bảo baud 38400 đúng với NEO‑M10.
Tạo file .ino mới và dán đầy đủ code sau:
#include <Arduino.h>
// ESP32-C3 SuperMini <-> GPS NEO-M10
#define GPS_RX_PIN 20 // ESP32 RX (nhận) <- TX của GPS
#define GPS_TX_PIN 21 // ESP32 TX (gửi) -> RX của GPS
#define GPS_BAUD 38400 // NEO-M10 mặc định 38400 bps
HardwareSerial GPSSerial(1);
unsigned long lastPrint = 0;
void setup() {
Serial.begin(115200);
delay(2000);
Serial.println();
Serial.println(F("=== IoTLabs NEO-M10 RAW Tester (38400 bps) ==="));
Serial.println(F("Wiring: GPS TX -> GPIO20, GPS RX -> GPIO21, 5V + GND chung"));
Serial.println(F("Neu khong thay dong $GN..., hay kiem tra lai day / baud."));
// begin(baud, config, rxPin, txPin)
GPSSerial.begin(GPS_BAUD, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
}
void loop() {
// Forward toàn bộ data từ GPS lên Serial Monitor
while (GPSSerial.available() > 0) {
char c = GPSSerial.read();
Serial.write(c); // hiển thị các câu NMEA: $GNRMC, $GNGGA, ...
}
// Mỗi 1s in thông báo để biết sketch vẫn chạy
if (millis() - lastPrint > 1000) {
lastPrint = millis();
Serial.println(F("\n[DEBUG] waiting for NMEA from NEO-M10..."));
}
}
4.1. Upload & đọc kết quả

- Upload sketch lên ESP32‑C3.
- Mở Serial Monitor (115200 bps).
- Đặt anten GPS ở vị trí thoáng trời (ban công/cửa sổ, tránh trong cốp xe hoặc nhà kín).
Bạn sẽ thấy:
- Các câu NMEA dạng:
$GNRMC,.... $GNGGA,.... [DEBUG] waiting for NMEA from NEO-M10... ...⇒ Module hoạt động, UART đúng, baud đúng. - Nếu chỉ thấy dòng
[DEBUG] waiting for NMEA...lặp lại, không có$GN...:- Kiểm tra lại dây TX/RX (có thể đang đảo – thử chuyển TX↔RX).
- Đảm bảo module đang được cấp 5V ổn định và GND chung.
- Nếu vẫn không có NMEA thì khả năng:
- Module đã bị cấu hình sang mode khác (chỉ UBX / SPI / I2C), hoặc
- Module lỗi phần UART.
Quan trọng: chưa fix vệ tinh vẫn phải có NMEA. Nếu không có NMEA thì là lỗi UART/hardware, không phải do “chưa bắt được GPS”.
5. Nâng cấp lên dùng TinyGPS++ sau khi test OK
Khi sketch RAW ở trên đã nhận được NMEA đều đặn, bạn có thể quay lại project chính dùng TinyGPSPlus. Khi đó chỉ cần đảm bảo:
#define GPS_BAUD 38400 // thay vì 9600 như NEO-6M
và giữ nguyên phần GPSSerial.begin(GPS_BAUD, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);.
TinyGPS++ sẽ đọc NMEA từ NEO‑M10 bình thường, cho bạn các field:
gps.location.lat(),gps.location.lng()gps.satellites.value()– số vệ tinhgps.hdop.hdop()– độ chính xác tương đốigps.time.hour(),gps.date.day(), …
6. Mẹo thực tế khi test NEO‑M10
- Lần đầu khởi động lạnh có thể mất từ 1–5 phút để có fix, tùy vị trí anten.
- Nên gắn anten GPS đúng chuẩn (SMA/IPX) và đặt hướng lên trời.
- Tránh đặt sát nguồn nhiễu mạnh (router WiFi, laptop, dây nguồn switching, …).
- Sau khi đã fix một lần, những lần khởi động lại sau (khởi động nóng/warm) thường nhanh hơn nhờ pin backup và EEPROM.
Với hướng dẫn này, bạn đã có một quy trình gọn nhẹ để xác nhận module GPS NEO‑M10 hoạt động OK trước khi tích hợp sâu vào hệ thống IoT.



Leave a Reply