Overview
The gps_neom8n node interfaces with the u-blox NEO-M8N high-sensitivity
GNSS receiver module. It supports concurrent reception of GPS, GLONASS, Galileo, and BeiDou satellite systems
for faster time-to-first-fix and better accuracy. The node provides configurable dynamic models optimized for
different movement patterns, fix modes, and SBAS augmentation for improved precision.
Properties
| Property | Type | Default | Description |
|---|---|---|---|
| port | string * | /dev/ttyS0 | Serial port for the NEO-M8N module (required) |
| baudRate | select | 9600 | Serial baud rate. Options: 9600, 19200, 38400, 57600, 115200 |
| dynamicModel | select | portable | Dynamic platform model. Options: portable, stationary, pedestrian, automotive, sea, airborne_1g, airborne_2g, airborne_4g |
| fixMode | select | auto | Fix mode. Options: auto (2D/3D automatic), 2d (horizontal only), 3d (requires 4+ satellites) |
| sbas | boolean | true | Enable SBAS (Satellite-Based Augmentation System) for improved accuracy |
Output
{
"latitude": 51.5074,
"longitude": -0.1278,
"altitude": 11.2,
"speed": 0.52,
"course": 215.3,
"satellites": 12,
"fix": "3D",
"pdop": 1.8,
"hdop": 1.1,
"vdop": 1.4,
"timestamp": 1640000000000
} Wiring (UART)
Connection
VCC → 3.3V or 5V (module has regulator)
GND → GND
TX → GPIO 15 (RXD, Pin 10)
RX → GPIO 14 (TXD, Pin 8)
PPS → GPIO (optional, 1PPS timing)
ASCII Wiring Diagram
NEO-M8N Raspberry Pi
------- ------------
VCC ─────────── 3.3V (Pin 1)
GND ─────────── GND (Pin 6)
TX ─────────── RXD (Pin 10 / GPIO 15)
RX ─────────── TXD (Pin 8 / GPIO 14)
PPS ─────────── GPIO (optional)
External antenna via U.FL/SMA connector
on module (recommended for best reception) Example: High-Precision Asset Tracker
Use DOP values to filter only high-quality fixes and report position with confidence metrics.
// Function node: Quality-filtered position reporting
var hdop = msg.hdop;
var fix = msg.fix;
var sats = msg.satellites;
// Only report when fix quality is good
if (fix !== "3D" || hdop > 2.0 || sats < 6) {
node.status({
fill: "yellow", shape: "ring",
text: "Low quality: HDOP=" + hdop + " Sats=" + sats
});
return null;
}
var quality = "unknown";
if (hdop <= 1.0) quality = "excellent";
else if (hdop <= 1.5) quality = "good";
else quality = "moderate";
msg.payload = {
lat: msg.latitude,
lon: msg.longitude,
alt: msg.altitude,
speed: msg.speed,
heading: msg.course,
accuracy: {
hdop: hdop,
vdop: msg.vdop,
pdop: msg.pdop,
quality: quality,
satellites: sats
},
timestamp: msg.timestamp
};
msg.topic = "tracker/position";
return msg; Example: Speed-Based Dynamic Model Selection
Automatically select the optimal dynamic model based on current movement speed for better filtering.
// Function node: Adaptive dynamic model
var speed = msg.speed; // km/h
var currentModel = flow.get('dynamicModel') || 'portable';
var newModel = currentModel;
if (speed < 1) {
newModel = "stationary";
} else if (speed < 6) {
newModel = "pedestrian";
} else if (speed < 120) {
newModel = "automotive";
} else {
newModel = "airborne_1g";
}
// Only send config update if model changed
if (newModel !== currentModel) {
flow.set('dynamicModel', newModel);
msg.payload = {
command: "setDynamicModel",
model: newModel,
reason: "speed=" + speed.toFixed(1) + " km/h",
position: {
lat: msg.latitude,
lon: msg.longitude
}
};
return msg;
}
return null; Common Use Cases
Drone Navigation
Multi-GNSS precision positioning with airborne dynamic models for UAV flight
Marine Tracking
Sea dynamic model with SBAS augmentation for boat and vessel tracking
Precision Agriculture
High-accuracy field mapping and equipment tracking with multi-constellation support
Time Synchronization
PPS output for nanosecond-accurate time sync across distributed IoT networks