A BeagleBone Black é, assim como as Raspberry Pi, uma das SBC (Single-Board Computer) mais populares atualmente. Afinal, a ideia de um computador completo de pequenas dimensões rodando um Sistema Operacional Linux abre possibilidade para uma infinidade de projetos nas mais diversas áreas (por exemplo: visão computacional, processamento de sinais, robótica e automação residencial). Com o crescente uso da chamada Internet das Coisas, o uso desta SBC foi ainda mais acentuado, devido ao suporte nativo à rede (via Ethernet).
Considerando esta vertente de aplicações (aplicações que envolvam Internet), este artigo mostrará como obter, via Internet, a localização geográfica aproximada via IP da BeagleBone Black.
Requisitos
Para reproduzir o conteúdo deste artigo, é necessário:
- Possuir uma BeagleBone Black;
- Possuir um cabo de rede (e um roteador com uma conexão de rede disponível);
- Fonte de alimentação 5V (recomendável: 5V / 2A);
- Possuir conhecimentos básicos em programação Python;
- Possuir noções básicas de requisições HTTP e de JSON.
Ambiente – BeagleBone Black
A BeagleBone Black utilizada não teve seu sistema operacional regravado, ou seja, foi utilizado o que já veio de fábrica. No caso, a BeagleBone Black utilizada continha a seguinte distribuição Linux de fábrica:

Além disso, foi modificada a conectividade para IP fixo, para fins de facilitar o acesso à mesma via SSH.
Acesso à BeagleBone Black
Para a reprodução deste tópico, é necessário o acesso à BeagleBone Black via SSH ou via terminal serial.
Projeto
O projeto, em termos de hardware, é muito simples: a BeagleBone Black alimentada pela fonte de 5V e ligada à rede de computadores via Ethernet.
Em termos de software, consiste de um pequeno script Python capaz de enviar uma requisição HTTP a um webservice / API (https://ip-api.com/, free), o qual retorna a localização geográfica aproximada da placa na forma de um JSON. Em posse destas informações, o script Python faz o parse deste JSON e exibe as informações na tela.
Este processo é repetido a cada dez segundos, sobretudo devido a limitações de requisições ao webservice/API (são permitidas apenas 150 requisições por minuto).
O script Python pode ser visto abaixo. Para finalizá-la, basta pressionar qualquer tecla.
import json
import urllib2
import time
import sys
while True:
try:
EnderecoAPI="https://ip-api.com/json"
JsonResultanteAPI = urllib2.urlopen(EnderecoAPI).read()
JsonResultanteAPI = unicode(JsonResultanteAPI,errors='ignore')
JsonParseado = json.loads(JsonResultanteAPI)
print("-----Localizacao obtida-----")
print("IP: "+JsonParseado["query"])
print("Cidade: "+JsonParseado["city"])
print("Estado (UF): "+JsonParseado["region"])
print("Pais: "+JsonParseado["country"])
print("Latitude: "+str(JsonParseado["lat"]))
print("Longitude: "+str(JsonParseado["lon"]))
print("---------------------------")
time.sleep(10)
except KeyboardInterrupt:
print "\nCtrl+c pressionado. Encerrando aplicacao..."
sys.exit(0)
Resultado e conclusão
A figura 2 mostra o resultado da execução / teste do script na BeagleBone Black:

Comparando com minha real localização, houve um erro de alguns quilômetros, o que leva à conclusão que o script é eficaz quando se trata de saber a região / cidade em que se está, não o endereço exato. Apesar desse fato, esta noção de localização pode ser útil em algumas aplicações, poupando o uso e custo de um módulo GPS em casos onde é preciso ter apenas alguma noção da localização real.
Referências
- Fonte da imagem destacada: https://www.fiazhusyn.com/wp-content/uploads/2014/08/geolocation.png
- Site da API / webservice de geolocalização por IP: https://ip-api.com/docs/api:json




