Primeiros Passos com as Funcionalidades GNSS do Raspberry Pi 4G HAT
Introdução
A integração do GNSS ao módulo 4G LTE aprimora suas capacidades, permitindo posicionamento preciso em tempo real e comunicação confiável para aplicações de IoT. Com suporte a sistemas GNSS de múltiplas constelações, o módulo oferece rastreamento de localização preciso e confiável, mesmo em áreas remotas ou com pouca cobertura. Esses recursos o tornam ideal para cenários como rastreamento de ativos, gestão de frotas e monitoramento remoto em tempo real.
Combinado com a conectividade 4G LTE, esta solução garante transmissão de dados contínua para sistemas em nuvem ou de controle, permitindo o gerenciamento eficiente de casos de uso críticos como conservação da vida selvagem, automação agrícola e resposta a emergências. Essa combinação oferece uma abordagem escalável e econômica para automação baseada em localização, adequada para indústrias que exigem mobilidade e acessibilidade.
Preparação de Hardware
Você precisa conectar sua antena GNSS. Além disso, usaremos uma API Python para obter a localização exata em um formato legível e compreensível para humanos. Adicionalmente, uma antena 4G deve ser instalada.
Preparação de hardware
| Raspberry Pi 5 | Antena GPS | Raspberry Pi 4G LTE CAT4 HAT |
|---|---|---|
![]() | ![]() | ![]() |
Se os drivers necessários para comunicação com comandos AT não estiverem instalados, você precisará instalá-los
A Configuração

Usando GNSS com Raspberry Pi 4G LTE Hat ou Ferramenta Qcom no Windows
Etapa 1: Ligar o GNSS
- Abra o Minicom no Raspberry Pi ou a Ferramenta Qcom no Windows via USB.
sudo minicom -D /dev/ttyUSB2 #for minicom on raspberry
- Insira o seguinte comando para ativar o GNSS:
AT+QGPS=1
Resposta Esperada:
OK
- Isso liga a funcionalidade GNSS.
- Após a ativação, frases NMEA serão emitidas pela porta "usbnmea" por padrão.
Etapa 2: Obter Informações de Posicionamento
- Para obter as coordenadas GNSS e outras informações, insira:
AT+QGPSLOC=0
Exemplo de Resposta:
+QGPSLOC: 063416.400,3143.2951N,11713.0655E,0.6,224.9,2,162.57,17.6,9.5,110620,07 OK
- Explicação da Resposta:
- 063416.400: Hora UTC (formato HHMMSS.SSS)
- 3143.2951N: Latitude (31°43.2951'N)
- 11713.0655E: Longitude (117°13.0655'E)
- 0.6: Diluição Horizontal de Precisão (HDOP)
- 224.9: Altitude em metros
- 2: Tipo de fix de posição (2 = fix 2D, 3 = fix 3D)
- Outros parâmetros fornecem dados GNSS detalhados.
Etapa 3: Desligar o GNSS
- Após obter os dados necessários, desative o GNSS para economizar energia inserindo:
AT+QGPSEND
Resposta Esperada
OK
- Este comando desliga o módulo GNSS, economizando recursos.
Implementação em Código Python
Etapa 1. Preparar o Diretório e o Ambiente Virtual
- Abra um terminal no seu Raspberry Pi.
- Crie uma nova pasta de projeto e navegue até ela:
mkdir GNSS_EX
cd GNSS_EX
- Configure um ambiente virtual Python:
python3 -m venv --system-site-packages env
- Ative o ambiente virtual:
source env/bin/activate
- Instale as bibliotecas necessárias:
pip install pyserial geopy
Etapa 2. Preparar o Script Python
-
Abra o Thonny Python IDE (pré-instalado no Raspberry Pi).
-
Crie um novo arquivo no Thonny e cole o código fornecido no editor.
-
Atualize o parâmetro usb_port para corresponder à porta serial do 4G HAT no seu Raspberry Pi. Normalmente, pode ser
/dev/ttyUSB2ou/dev/ttyUSB3. Exemplo:
usb_port = "/dev/ttyUSB2"
- Salve o arquivo como test_gnss.py na pasta GNSS_EX.
import serial
import time
from geopy.geocoders import Nominatim
def send_at_command(serial_port, command, delay=1):
"""Send an AT command and read the response."""
serial_port.write((command + '\r\n').encode())
time.sleep(delay)
response = serial_port.read_all().decode()
print(f"Command: {command}\nResponse: {response}")
return response
def parse_coordinates(response):
"""Parse coordinates from AT+QGPSLOC response."""
if "+QGPSLOC:" in response:
try:
data = response.split(":")[1].strip().split(",")
# Extract raw coordinates (with N/S/E/W)
latitude_raw, longitude_raw = data[1], data[2]
# Correct parsing by removing N/S/E/W at the end
latitude = convert_to_decimal(latitude_raw[:-1], 'N' in latitude_raw)
longitude = convert_to_decimal(longitude_raw[:-1], 'E' in longitude_raw)
print(f"Latitude: {latitude}, Longitude: {longitude}")
return latitude, longitude
except (IndexError, ValueError) as e:
print(f"Error parsing coordinates: {e}")
return None, None
return None, None
def convert_to_decimal(coord, positive=True):
"""Convert NMEA-style coordinate to decimal format."""
# Split the coordinate into degrees and minutes
degrees = int(float(coord) // 100)
minutes = float(coord) % 100
decimal = degrees + (minutes / 60)
# If it's in the Southern or Western hemisphere, make it negative
return decimal if positive else -decimal
def get_location(lat, lon):
"""Get a human-readable location using geopy."""
geolocator = Nominatim(user_agent="gnss_locator")
try:
location = geolocator.reverse((lat, lon), exactly_one=True)
return location.address if location else "Location not found"
except Exception as e:
print(f"Geocoding error: {e}")
return "Error retrieving location"
def automate_gnss(port, baudrate=9600):
"""Automate GNSS commands and fetch location."""
try:
with serial.Serial(port, baudrate, timeout=1) as ser:
print("Serial port connected.")
# Turn on GNSS
send_at_command(ser, "AT+QGPS=1", delay=2)
# Get positioning information
response = send_at_command(ser, "AT+QGPSLOC=0", delay=2)
latitude, longitude = parse_coordinates(response)
if latitude and longitude:
print(f"Coordinates: Latitude = {latitude}, Longitude = {longitude}")
location = get_location(latitude, longitude)
print(f"Location: {location}")
else:
print("Unable to retrieve coordinates.")
# Turn off GNSS
send_at_command(ser, "AT+QGPSEND", delay=2)
print("GNSS process completed.")
except serial.SerialException as e:
print(f"Error: {e}")
# Set your USB port (e.g., '/dev/ttyUSB0' or 'COM3' on Windows)
usb_port = "/dev/ttyUSB2" # Update based on your system
automate_gnss(usb_port)
Etapa 3. Executar o Script
- Abra um terminal, certifique-se de que você está no diretório do projeto:
cd GNSS_EX
- Ative o ambiente virtual:
source env/bin/activate
- Execute o script usando Python:
python test_gnss.py
- A saída
Recursos
-
[Web Page] LTE EG25-G
-
[Web Page] GNSS AT Commands Manual V1.4
Suporte Técnico & Discussão de Produtos
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Disponibilizamos vários canais de comunicação para atender a diferentes preferências e necessidades.


