Ligar um GPS ao Raspberry PI

Após ter visto um artigo sobre o Raspberry PI na atmosfera com o projecto Pi in the Sky, decidi, porque não experimentar ? No projeto eles usam uma placa de telemetria para dar informações sobre temperatura, pressão , etc.. Como não tenho acesso a nenhuma placa dessas, porque não fazer o mesmo, mas com componentes disponiveis no mercado? Então, começou a nascer este projeto.
English version
Em primeiro lugar, como localizar o Raspberry PI por GPS.

Material

Raspberry PI B/B+ (usei ambos)

2 GPSs (embora só seja necessário 1, experimentei com os dois)

GPS Receiver – EM-406A SiRF III (20 Channel) – Já não é fabricado

GY-NEO6MV2 Flight Controller GPS Module For Arduino EEPROM MWC APM 2.5

Ligações

Para ligar o(s) GPS(s) ao Raspberry PI precisamos de usar o GPIO. A tabela seguinte mostra os PINs para a versão B onde ligar o GPS.

Raspberry PIN GPS PIN
2 – 5v VIN/VCC
6 – GND GND
8 – TX RX
10 – RX TX

Nota: Reparar que o TX e o RX trocam quando se ligam ao GPS: RX -> TX e TX -> RX

Aqui fica o Pinout do Raspberry PI versão B

GPS GY-NEO6Mv2

GPSv2-3

GPSv2-2

 

Ligação do GPS GY-NEO6Mv2 ao PI

GPS PI

Algumas imagens das ligações do GPS ao Raspberry PI versão B

GPSv2-1 GPIO2 GPIO1

GPS EM-406A

Para ligar o GPS EM-406A precisei de comprar um cabo JST SH Jumper 6 – de 6 pins para encaixar no GPS – embora só sejam necessários 4 pins.

JST-SH6

Esquema das ligações do GPS EM-406A

EM406

GPIOBplus3GPIOBplusEM401

Neste caso, o GPS EM-406A foi ligado a um Raspberry PI B+. Os PINs no GPS são ambos os mesmos e as ligações iguais. A unica coisa que muda é o GPIO do RPI B+.

GPIOBplus2

Ligar o PI e efetuar login

Assim que tiverem uma prompt, é necessário alterar umas configurações para que a UART esteja disponivel para o GPS, uma vez que é usada para permiter ligar-se a um terminal e autenticar-se.

Editar o ficheiro /boot/cmdline.txt e alterar:

para

 

Depois, editar o ficheiro inittab para comentar uma linha para que não seja lançada uma consola na ligação serie:

Comentar a seguinte linha (deverá ser a ultima):

 

Após estas alterações, efetuar reboot ao PI

 

Assim que possivel, instalar as aplicações para o GPS

 

Executar o gpsd

 

Executar o cliente e esperar que o GPS funcione

 

E ao final de alguns segundos (talvez mais – sair do cgps e voltar a entrar) devem conseguir sinal.

Poupar energia

Podem-se poupar cerca de 20mA (mais ou menos) desligando a saída PAL/HDMI (partindo do principio que não vamos usar) .

Para tal, basta adicionar a linha seguinte ao arranque (Geralmente adicionando a linha ao ficheiro /etc/rc.local)

dica via http://www.daveakerman.com/?page_id=1294

Atualizar um mapa com a posição corrente do Raspberry PI

Não serve de nada ter um GPS ligado ao PI se não for para criar uns pontos e uns trilhos com ele.

Criar um mapa com as coordenadas GPS

Agora que já temos os módulos de python para o GPS, vamos usar para reportar as coordenadas.

Como vai o PI fazer isto? Bem, a minha solução foi, com um servidor web, a aplicação em Python coloca as coordenadas num diretório especifico e a aplicação web a correr num outro computador (ou no PI – mais à frente esta solução) vai aceder ao PI e ler esse ficheiro com as coordenadas, que posteriormente vai coloca no mapa.

Instalar um servidor web para partilhar as coordenadas.

Configurar o nginx

É a primeira vez que trabalho com o nginx. Decidi instala-lo porque consome menos recursos que o apache.

Por questões de segurança, alteramos o porto do nginx. Em vez do 80, vamos usar o 2121 (por exemplo).

Alterar a linha de

para

Alterar o document_root

Na linha que diz root, alteramos para

 

Nota: Não esquecer de criar as diretorias gps/www

 

Uma vez que o nginx corre com o grupo www-data, vamos adicionar o pi ao grupo para que a diretoria configurada em cima seja acessivel pelo nginx.

Nota: Para que fique ativo, têm que terminar a sessão e voltar a entrar

Alterar as permissões para que qualquer ficheiro criado seja lido pelo grupo porque qualquer ficheiro criado pertencerá ao grupo www-data – (setgid)

Reiniciar o nginx

 

Nota: Não esquercer que, se configurado como em cima, têm que aceder usando

 

Código

PI

Instalar o módulo de Python gpxpy

Todo o código para este projeto encontra-se na minha conta do bitbucket.

A diretoria rpi contém um ficheiro chamado gpswww.py .Este ficheiro é colocado no Raspberry PI, onde desejarem – mas têm que posteriormente criar uma diretoria chamada www no mesmo nível – é nesta diretoria que este script vai colocar o ficheiro – chamado coords.txt – que contém as coordenadas naquele momento.

Para o executar, nada mais simples que:

Antes de o executar, tenham a certeza que o GPS está bem ligado e a funcionar. Podem usar os examplos em cima, com o comando cgps -s

Para mais informações sobre os módulos de Python do gpsd, basta visitar a página.

 

Computador

No computador que vai mostrar os mapas, é necessário um servidor web (com suporte PHP) e acesso à internet para que possa mostrar os mapas.

No bitbucket encontram-se os ficheiros necessários.

Só é necessário alterar 2 linhas, uma em cada um dos seguintes ficheiros:

– getcoords.php : alterar a linha $rpi_host para o IP do vosso PI

– pingPHP.php :  alterar a linha $host novamente com o IP do vosso PI

Atualização: Com a nova versão, não é preciso alterar ficheiros nenhuns, bastando para isso colocar o IP do RPI na caixa para o efeito e pressionar “Track”

Seguindamente, os ficheiros auxiliares:

E está tudo configurado.

NOTA IMPORTANTE: Pode parecer que o mapa não está a atualizar, mas a verdade é que está. Façam zoom out com o rato e coloquem o mapa no local onde estão. Como é necessário colocar coordenadas iniciais ao criar o mapa, coloquei as de Castelo Branco (a minha cidade). Será uma questão a alterar na próxima versão. (Obrigado Nuno Oliveira)

Num browser, executem o ficheiro RPITracking.html e fiquem à espera que marca a posição do vosso PI.

Nesta versão eu optei por usar marcadores em vez de uma linha. Noto que, ao final de algum tempo, começa a ficar um pouco confuso – mas irei alterar isso numa futura versão para colocar uma linha em vez de marcadores.

Aqui fica o resultado de uma experiencia que fiz hoje de manhã (Imagem da versão anterior)

GPS Track

Usar o PI para mostrar o mapa (em atualização)

Em vez de usar outro computador para ir buscar as coordenadas ao RPI e mostrar no mapa, podemos usar antes o RPI para fazer tudo – acedendo a ele via browser –

Alterar o nginx

Instalar o PHP

A seguir, editar o ficheiro /etc/nginx/sites-available/default

e descomentar as seguintes linhas:

Guardar e recarregar o nginx

Para funcionar, os ficheiros que colocaram no PC, coloquem no PI – alterando o IP nos ficheiros indicados para o do PI e devem ter a funcionar o mapa dentro do PI. Conforme configuraram o root no nginx, é nesse local que devem colocar os ficheiros. Uma nota neste caso, e uma vez que está tudo no mesmo local, não havia necessidade de usar o curl – no PHP – para ir buscar as coordenadas, mas mal também não faz e funcionará sem problemas.

Mobilidade do PI

Para que isto tudo funcione, é necessário que o PI funcione com baterias.

No meu caso, estou a usar baterias lipo para alimentar o PI – com duração de cerca de 2h e 30m – não é muito, mas para já é o suficiente.

O material que uso é (Foi nesta loja de comprei) :

Lithium Ion Polymer Battery – 3.7v 1200mAh

– PowerBoost 500 Basic – 5V USB Boost @ 500mA from 1.8V+ (para aumentar os 3.7v da bateria para os 5v do PI)

– USB/DC Lithium Polymer battery charger 5-12V (3.7/4.2v cells) (para carregar as baterias)

Com um cabo mini-usb ligam isto tudo ao PI. Eu acredito que não seja a forma mais eficiente de alimentar o PI, mas após alguns dias de leitura foi o que arranjei. Não sou expert em eletrónica – se houver alguem aí que tenha uma forma mais eficiente de alimentar o PI – faça favor de dizer alguma coisa !

PILipo

Antes de ter resolvido ficar assim – testei com pilhas AA de 1.5v – um adaptador de 6 pilhas AA de 1.5v e um Pololu 5v Step-up/Step-down voltage regulator 5v para controlar a voltagem (6 * 1.5v = 9v). No entanto, não sei o que fiz mal, mas só durava cerca de 40m – além de pesar imenso…

RPI_Pilhas
RPI alimentado com pilhas

 

NOTA: Este projeto (para já) tem a atenuante que, no computador onde estejam a ver a localização do PI tenha que estar ligado à Internet para poder ir buscar os mapas. Tem também outra atenuante que, tanto o PI como o computador têm que estar ligados na mesma rede (ou se preferirem, via internet – com DNS dinamico é possivel conseguir isto) – Essencialmente têm que ter conetividade. Para alterar isto, brevemente (assim que chegarem) quero testar isto com o Xbee ! Os modelos que mandei vir têm alcance de 1,5km – Isto deve ser interessante. Atualizações para essa altura.

Espero que gostem. Algum erro e/ou omissão, avisem.

12 Replies to “Ligar um GPS ao Raspberry PI

  1. Parabéns pelo artigo, muito bom! Gostaria somente de uma ajuda, se caso eu precisasse armazenar os locais em um arquivo, tipo txt por exemplo, para abrir depois e não precisar de conexão com a internet, seria possível? Obrigado!

    1. Olá Aieser !

      Obrigado pelo comentário.

      É possível sim.
      Eu só usei assim para visualizar em “tempo real” a progressão do RPI.
      Pode-se guardar as coordenadas num ficheiro (no RPI) e posteriormente abrir o ficheiro e colocar num mapa.

      Envolve um pouco de programação, mas por exemplo:

      No lado do RPI, basta alterar as linhas do codigo que guarda as coordenadas para que acrescente em vez de escrever por cima (alterando a linha de abertura e fecho do ficheiro para o inicio e fim respetivamente.

      No caso depois do HTML, basta abrir usando jquery ou PHP para ler o ficheiro e colocar num mapa…

      Se quiseres, posso acrescentar aqui ao tutorial! Só preciso de alguns dias !

      1. Seria ótimo ter um tutorial sobre isso! Obrigado pela resposta, e parabéns mais uma vez pela iniciativa!

  2. AH, você só conseguiu esses resultados usando os dois módulos???
    è que estou fazendo um projeto maluco e preciso usar o módulo gps, mas oq comprei veio quebrado

  3. Poxa, me manda um email falando mais sobre isso??
    Tenho que colocar um GPS no meu raspberry 3 pra entregar o projeto do TCC mas estou enfrentando problemas…
    Na verdade, o projeto original era com o Arduino Mega, mas aí eu quis fazer por fora no rasp.
    Resumindo: No Mega, o GPS não deu sinal de vida. Minha companheira de TCC disse que ele simplesmente não acende o ledzinho. Ou não recebe a corrente, ou ele queimou (ou ja veio queimado) :/
    Então, vou ter que comprar outro módulo e tentar fazer no Rasp (tenho noção nenhuma de eletrônica kkkk)

    Aí agora vou me meter a fazer no rasp…
    Entra em contato comigo, que te dou mais detalhes do que queremos fazer 🙂

  4. OIá, fiz esse tutorial com meu rasp 3 e um GY-NEO6MV2. Eu consigo ver os dados do gps com o comando cgps -s mas estou com um problema ao rodar o script gpswww.py. As coordenadas são escritas somente uma vez no coords.txt. Elas deveriam ser incrementadas, correto? Tem alguma permissão especial para a pasta www?
    Obrigado!

    1. Olá Bruno.

      Obrigado. As coordenadas no ficheiro coords.txt são sempre escritas por cima – não são incrementadas. As permissões são de escrita para o utilizador do nginx.
      (os comandos seguintes estão no post)
      Adicionar o utilizador PI ao grupo (partindo do principio que o www-data é o grupo do nginx):
      sudo gpasswd -a pi www-data

      E dar permissões na pasta:
      chmod g+s www

Leave a Reply to Suellen Cancel reply

Your email address will not be published. Required fields are marked *