Arduino UNO Q - GPS
The NEO-6M GPS module provides accurate location, speed, altitude, and time data via NMEA serial output. The Arduino UNO Q MCU parses the GPS data using TinyGPS++, caches the results, and exposes them to the Linux side via Bridge — enabling Google Maps location sharing through Telegram.
In this tutorial, you will learn:
- How the NEO-6M GPS module works
- How to wire the GPS module to the Arduino UNO Q MCU
- How to parse GPS NMEA data with TinyGPS++ on Arduino UNO Q
- How to read latitude, longitude, altitude, speed, and date/time
- How to use Bridge to expose GPS data to the Linux side (Python)
- How to build a GPS tracker that shares your location via Telegram on Arduino UNO Q
- How to use OpenClaw on Arduino UNO Q with GPS

※ NOTE THAT:
The GPS module requires an unobstructed view of the sky to acquire a satellite fix. Outdoors is best; near a window may work. First fix may take several minutes.
Hardware Preparation
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Additionally, some of these links are for products from our own brand, DIYables .
Overview of the NEO-6M GPS Module
The NEO-6M is a widely used GPS receiver module that provides NMEA-format data over UART at 9600 baud. It can track up to 22 satellites across 50 channels and delivers position accuracy of around 2.5 meters.

Pinout
- VCC pin: Connect to VCC (5V or 3.3V — most modules support both)
- GND pin: Connect to GND (0V)
- TX pin: Serial output — send GPS NMEA data to the MCU RX pin
- RX pin: Serial input — receives optional configuration commands from MCU TX pin
How It Works
The NEO-6M continuously outputs NMEA sentences (e.g., $GPGGA, $GPRMC) at 9600 baud. The Arduino UNO Q MCU reads these sentences, feeds them to the TinyGPS++ library, which parses them into latitude, longitude, altitude, speed, and date/time values.
- Blue LED on module: Blinks once per second when a satellite fix is acquired
Wiring Diagram

This image is created using Fritzing. Click to enlarge image
| NEO-6M GPS Module Pin | Arduino UNO Q MCU |
|---|---|
| VCC | 3.3V |
| GND | GND |
| TX | D4 (MCU RX) |
| RX | D3 (MCU TX) |
※ NOTE THAT:
The MCU TX pin (D3) outputs 3.3V signals. This is compatible with the NEO-6M RX pin which accepts 3.3V logic, so no level shifter is needed.
How To Program For GPS
- Include the TinyGPS++ library and set up SoftwareSerial:
- Feed incoming bytes to the TinyGPS++ parser:
- Read coordinates when a fix is valid:
Arduino UNO Q Code
The Arduino UNO Q has two processors working together:
- The STM32 MCU reads GPS NMEA sentences continuously, parses them with TinyGPS++, and prints coordinates, speed, altitude, and date/time to the Serial Monitor
- The Qualcomm MPU runs Debian Linux with Wi-Fi — in this section, only the MCU is programmed. A later section shows how both processors work together via Bridge.
Detailed Instructions
First time with Arduino UNO Q? Follow the Getting Started with Arduino UNO Q tutorial before proceeding.
- Connect: Wire the NEO-6M GPS module to the Arduino UNO Q MCU as shown in the wiring diagram.
- Take the sensor outside or place it near a window with a clear sky view.
- Open Arduino App Lab: Launch Arduino App Lab and wait until it detects your Arduino UNO Q.
- Create a new App: Click the Create New App button.

- Give the App a name, for example: GPSModule
- Click Create to confirm.

- Paste the sketch: Copy the MCU code above and paste it into sketch/sketch.ino.
- Install the library: Click the Add sketch library button (the open book icon with a + sign) in the left sidebar.

- Search for TinyGPSPlus created by Mikal Hart and click the Install button.
- Upload: Click the Run button in Arduino App Lab.

- Wait for the GPS module's blue LED to start blinking — this signals a satellite fix has been acquired.
- Observe the GPS data in the Serial Monitor.
App Lab Console Output
Bridge: Linux + MCU
This section shows how to program both processors of the Arduino UNO Q to expose GPS data to the Linux side via Bridge:
- The GPS module is connected to the MCU — the MCU continuously parses NMEA sentences and caches latitude, longitude, altitude, speed, and date/time
- The MPU cannot read the GPS UART directly — it calls Bridge functions to get cached GPS values
- The MPU has Wi-Fi — running full Debian Linux, it can share your GPS location with a Google Maps link via Telegram
- Arduino_RouterBridge enables RPC communication between the two processors
- ⚠️ /dev/ttyHS1 (Linux) and Serial1 (MCU) are RESERVED by the router — never open them in user code
MCU Code (Bridge)
Python Code (Bridge)
Detailed Instructions
- Connect: Wire the NEO-6M GPS module to the Arduino UNO Q as shown in the wiring diagram. Place the device near a window with a clear sky view.
- Open Arduino App Lab and create a new App named GPSBridge.
- Paste the MCU sketch into sketch/sketch.ino.
- Paste the Python code into the Python file.
- Upload: Click the Run button. Wait for the blue LED on the GPS module to blink.

- Observe GPS data appearing in the Python console once a fix is acquired.
App Lab Console Output
Telegram
Build a GPS tracker on Arduino UNO Q — send your location with a Google Maps link, speed, altitude, and time via Telegram commands.
MCU sketch: Keep the same MCU sketch from the previous Bridge section.
Python Code (Telegram)
Detailed Instructions
- Replace YOUR_TELEGRAM_BOT_TOKEN with your actual bot token from BotFather.
- Replace YOUR_CHAT_ID with your Telegram chat ID.
- Paste this Python code into your App's Python file (keep the same MCU sketch).
- Click the Run button — wait for a GPS fix (blue LED blinking), then send /location in Telegram.
App Lab Console Output
ArduinoBot
OpenClaw
You can adapt the OpenClaw to this tutorial by refering the instruction on Arduino Uno Q - OpenClaw Tutorial
Project Ideas
You can build many useful projects with the GPS module and Arduino UNO Q:
- Personal GPS Tracker: Send /location via Telegram at any time to instantly receive your current GPS coordinates and a clickable Google Maps link — perfect for tracking a vehicle or pet
- Geo-fence Alert System: Define a home location (latitude/longitude) in Python; if the GPS moves more than a set distance away, automatically send a Telegram alert with the current location and Google Maps link
- Speed Monitor: Continuously check the GPS speed value in Python — if it exceeds a set threshold (e.g., 120 km/h), send a Telegram warning with the current speed and location
- Trip Logger: Log GPS coordinates, speed, and altitude to a CSV file on the Linux side every 10 seconds; send a /summary Telegram command to get total trip distance, max speed, and duration
- Automatic Location Broadcast: Send your GPS location to Telegram every 5 minutes automatically using a Python timer — useful for monitoring a moving asset or vehicle in real time
Challenge Yourself
Ready to go further with GPS on Arduino UNO Q? Try these challenges:
- Easy: Add a /satellites Telegram command that returns the number of satellites currently visible to the GPS module using gps.satellites.value() in the MCU and exposing it via a get_satellites Bridge function.
- Medium: Implement a geo-fence in Python: when the GPS moves more than 500 meters from a saved home location, automatically send a Telegram alert. Use TinyGPSPlus::distanceBetween() on the MCU or calculate the Haversine distance in Python.
- Advanced: Build a live trip tracker: log GPS coordinates with timestamps to a JSON file on Linux every 30 seconds during movement (speed > 2 km/h). Implement a /track Telegram command that returns the last 5 logged points as a formatted route summary with total estimated distance.