Pular para o conteúdo principal

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 5Antena GPSRaspberry Pi 4G LTE CAT4 HAT
nota

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/ttyUSB2 ou /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​

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.

Loading Comments...