- Componentes necessários:
- Módulo GPS e seu funcionamento:
- Preparando o Raspberry Pi para se comunicar com GPS:
- Conexões para interface do módulo Raspberry Pi GPS:
- Teste antes do script Python:
Uma das plataformas embarcadas mais legais, como o Arduino, deu aos fabricantes e DIYers a capacidade de obter dados de localização facilmente usando o módulo GPS e, assim, construir coisas que dependem da localização. Com a quantidade de potência embalada pelo Raspberry Pi, certamente será incrível construir projetos baseados em GPS com os mesmos módulos de GPS baratos e esse é o foco deste post. Hoje neste projeto faremos interface do módulo GPS com Raspberry Pi 3.
O objetivo deste projeto é coletar dados de localização (longitude e latitude) via UART de um módulo GPS e exibi-los em um LCD 16x2, portanto, se você não está familiarizado com a forma como o LCD 16x2 funciona com o Raspberry Pi, este é outro ótima oportunidade de aprender.
Componentes necessários:
- Raspberry Pi 3
- Módulo GPS Neo 6m v2
- 16 x 2 LCD
- Fonte de energia para o Raspberry Pi
- Cabo LAN para conectar o pi ao seu PC no modo headless
- Placa de ensaio e cabos Jumper
- Resistor / potenciômetro para o LCD
- Cartão de memória de 8 ou 16 Gb executando Raspbian Jessie
Além disso, precisamos instalar a biblioteca GPS Daemon (GPSD), biblioteca 16x2 LCD Adafruit, que instalaremos posteriormente neste tutorial.
Aqui, estamos usando Raspberry Pi 3 com Raspbian Jessie OS. Todos os requisitos básicos de hardware e software foram discutidos anteriormente, você pode consultá-los na introdução do Raspberry Pi.
Módulo GPS e seu funcionamento:
GPS significa Global Positioning System e é usado para detectar a latitude e longitude de qualquer local da Terra, com a hora UTC exata (Universal Time Coordinated). O módulo GPS é o principal componente em nosso projeto de sistema de rastreamento de veículos. Este dispositivo recebe as coordenadas do satélite a cada segundo, com hora e data.
O módulo GPS envia os dados relacionados ao rastreamento da posição em tempo real, e envia muitos dados no formato NMEA (veja a imagem abaixo). O formato NMEA consiste em várias frases, nas quais precisamos apenas de uma frase. Esta frase começa em $ GPGGA e contém as coordenadas, hora e outras informações úteis. Este GPGGA é conhecido como Dados de correção do sistema de posicionamento global. Saiba mais sobre como ler dados GPS e suas strings aqui.
Podemos extrair coordenadas da string $ GPGGA contando as vírgulas na string. Suponha que você encontre a string $ GPGGA e a armazene em um array, então a Latitude pode ser encontrada após duas vírgulas e a Longitude pode ser encontrada após quatro vírgulas. Agora, essas latitude e longitude podem ser colocadas em outras matrizes.
Abaixo está a string $ GPGGA, junto com sua descrição:
$ GPGGA, 104534.000,7791,0381, N, 06727.4434, E, 1,08,0.9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, latitude, N, longitude, E, FQ, NOS, HDP, altitude, M, altura, M,, dados de checksum
Identificador |
Descrição |
$ GPGGA |
Dados de correção do sistema de posicionamento global |
HHMMSS.SSS |
Tempo em hora, minuto, segundo e formato milissegundos. |
Latitude |
Latitude (coordenada) |
N |
Direção N = Norte, S = Sul |
Longitude |
Longitude (Coordenada) |
E |
Direção E = Leste, W = Oeste |
FQ |
Dados de qualidade fixos |
NOS |
Nº de satélites em uso |
HPD |
Diluição Horizontal de Precisão |
Altitude |
Altitude do nível do mar |
M |
Metro |
Altura |
Altura |
Checksum |
Dados de soma de verificação |
Você pode verificar nossos outros projetos de GPS:
- Rastreador de veículos baseado em Arduino usando GPS e GSM
- Sistema de Alerta de Acidente de Veículo baseado em Arduino usando GPS, GSM e acelerômetro
- Como usar GPS com Arduino
- Rastreie um veículo no Google Maps usando Arduino, ESP8266 e GPS
Preparando o Raspberry Pi para se comunicar com GPS:
Ok, então para começar, para que isso não fique chato, vou assumir que você já sabe muito sobre o Raspberry Pi, o suficiente para instalar seu sistema operacional, obter o endereço IP, conectar-se ao software de terminal como massa e outras coisas sobre o PI. Se você tiver qualquer problema ao fazer qualquer uma das coisas mencionadas acima, entre na seção de comentários e terei todo o prazer em ajudar.
A primeira coisa que temos que fazer para colocar este projeto em andamento é preparar nosso Raspberry Pi 3 para ser capaz de se comunicar com o módulo GPS via UART, acredite, é bem complicado e demorou muito para tentar acertar, mas se você seguir meu guia cuidadosamente, você entenderá de uma vez, esta é a parte mais difícil do projeto. Aqui, usamos o módulo GPS Neo 6m v2.
Para mergulhar, aqui está uma pequena explicação de Como funciona o Raspberry Pi 3 UART.
O Raspberry Pi tem dois UARTs integrados, um PL011 e um mini UART. Eles são implementados usando diferentes blocos de hardware, portanto, têm características ligeiramente diferentes. No raspberry pi 3, entretanto, o módulo sem fio / bluetooth é conectado ao PLO11 UART, enquanto o mini UART é usado para a saída do console do Linux. Dependendo de como você vê, vou definir o PLO11 como o melhor dos dois UART devido ao seu nível de implementação. Portanto, para este projeto estaremos desativando o módulo Bluetooth do PLO11 UART usando uma sobreposição disponível na versão atual atualizada do Raspbian Jessie.
Etapa 1: Atualizando o Raspberry Pi:
A primeira coisa que gosto de fazer antes de iniciar cada projeto é atualizar o pi de framboesa. Então, vamos fazer o de costume e executar os comandos abaixo;
sudo apt-get update sudo apt-get upgrade
em seguida, reinicie o sistema com;
sudo reboot
Etapa 2: configurar o UART no Raspberry Pi:
A primeira coisa que faremos com isso é editar o arquivo /boot/config.txt . Para fazer isso, execute os comandos abaixo:
sudo nano /boot/config.txt
na parte inferior do arquivo config.txt, adicione as seguintes linhas
dtparam = spi = on dtoverlay = pi3-disable-bt core_freq = 250 enable_uart = 1 force_turbo = 1
ctrl + x para sair e pressione y e enter para salvar.
Certifique-se de que não haja erros de digitação ou erros, verificando duas vezes, pois um erro pode impedir que seu pi seja inicializado.
Quais são as razões para esses comandos, force_turbo permite que o UART use a frequência máxima do núcleo que estamos definindo neste caso como 250. A razão para isso é para garantir a consistência e integridade dos dados seriais recebidos. É importante notar neste ponto que usar force_turbo = 1 irá anular a garantia do seu pi de framboesa, mas além disso, é bastante seguro.
O dtoverlay = pi3-disable-bt desconecta o bluetooth do ttyAMA0 , isso é para nos permitir o acesso para usar toda a energia UART disponível via ttyAMAO em vez do mini UART ttyS0.
A segunda etapa nesta seção de configuração do UART é editar o boot / cmdline.txt
Vou sugerir que você faça uma cópia do cmdline.txt e salve primeiro antes de editar para que possa voltar a ele mais tarde, se necessário. Isso pode ser feito usando;
sudo cp boot / cmdline.txt boot / cmdline_backup.txt sudo nano /boot.cmdline.txt
Substitua o conteúdo por;
dwc_otg.lpm_enable = 0 console = tty1 root = / dev / mmcblk0p2 rootfstype = ext4 elevador = deadline fsck.repair = sim rootwait quiet splash plymouth.ignore-serial-consoles
Salvar e sair.
Feito isso, precisaremos reiniciar o sistema novamente para efetuar as alterações ( sudo reboot ).
Etapa 3: Desativar o serviço Raspberry Pi Serial Getty
O próximo passo é desabilitar a serial do Pi do serviço getty , o comando irá impedi-lo de iniciar novamente na reinicialização:
sudo systemctl stop [email protected] sudo systemctl disable [email protected]
Os seguintes comandos podem ser usados para habilitá-lo novamente, se necessário
sudo systemctl enable [email protected] sudo systemctl start [email protected]
Reinicialize o sistema.
Etapa 4: Ativando ttyAMAO:
Desabilitamos o ttyS0, a próxima coisa é habilitar o ttyAMAO .
sudo systemctl enable [email protected]
Etapa 5: Instale o Minicom e o pynmea2:
Estaremos minicom para nos conectar ao módulo GPS e dar sentido aos dados. É também uma das ferramentas que usaremos para testar se nosso módulo GPS está funcionando bem. Uma alternativa ao minicom é o software daemon GPSD.
sudo apt-get install minicom
Para analisar facilmente os dados recebidos, usaremos a biblioteca pynmea2 . Ele pode ser instalado usando;
sudo pip install pynmea2
A documentação da biblioteca pode ser encontrada aqui
Etapa 6: Instalando a Biblioteca LCD:
Para este tutorial, usaremos a biblioteca AdaFruit. A biblioteca foi feita para telas AdaFruit, mas também funciona para placas de vídeo usando HD44780. Se o seu monitor for baseado nisso, ele deve funcionar sem problemas.
Acho melhor clonar a biblioteca e apenas instalar diretamente. Para clonar, execute;
git clone
mude para o diretório clonado e instale-o
cd./Adafruit_Python_CharLCD sudo python setup.py install
Neste estágio, vou sugerir outra reinicialização para que possamos prosseguir com a conexão dos componentes.
Conexões para interface do módulo Raspberry Pi GPS:
Conecte o Módulo GPS e LCD ao Raspberry Pi conforme mostrado no Diagrama de Circuito abaixo.
Teste antes do script Python:
Acho importante testar a conexão do módulo GPS antes de prosseguir com o script python. Usaremos o minicom para isso. Execute o comando:
sudo minicom -D / dev / ttyAMA0 -b9600
onde 9600 representa a taxa de transmissão na qual o módulo GPS se comunica. Isso pode ser usado quando tivermos certeza da comunicação de dados entre o GPS e o RPI, é hora de escrever nosso script python.
O teste também pode ser feito usando cat
sudo cat / dev / ttyAMA0
Na janela, você pode ver as sentenças NMEA que discutimos anteriormente.
O script Python para este tutorial Raspberry Pi GPS é fornecido abaixo na seção Código.
Com tudo dito e feito, é hora de testar todo o sistema. É importante que você garanta que seu GPS está obtendo uma boa posição, retirando-o, a maioria dos GPS requer entre três a 4 satélites para obter uma posição, embora o meu funcionasse em ambientes internos.
Funciona certo? Sim…
Tem perguntas ou comentários? Solte-os na seção de comentários.
O vídeo de demonstração é fornecido abaixo, onde mostramos a localização em latitude e longitude no LCD usando GPS e Raspberry Pi.