Localização aproximada via IP com ESP8266 - Parte 1

Este post faz parte da série Localização aproximada via IP com ESP8266. Leia também os outros posts da série:

Introdução

 

Essa é a parte 1 da série Localização aproximada via IP com ESP8266. Na parte 1 será desenvolvido um Web Client com ESP8266 onde o mesmo será capaz de fazer requisições HTTP GET e POST, recebendo sua localização aproximada e posteriormente enviando esses dados a um Web Server. Na parte 2 será desenvolvido um Web Server em Node.js que recebe a localização aproximada do ESP8266 e exibe em uma página do Google Maps.

 

O módulo ESP8266 é atualmente uma das plataformas mais populares entre makers para desenvolvimento de projetos conectados à Internet. Podemos encontrá-lo em projetos desde Acionamento de Eletrodomésticos via Web até Dispositivos de Assistência Médica Pessoal. Essa popularidade é devida ao seu baixo custo e facilidade de desenvolvimento, podendo ser integrado e programado usando a IDE Arduino. Neste artigo utilizaremos a versão ESP-01 da família ESP8266.

 

Módulo WiFi ESP8266 ESP-01 para Localização aproximada via IP
Figura 1 - Módulo WiFi ESP8266 ESP-01

 

Em um mundo IoT onde hoje existem diversos desses dispositivos conectados à internet gerando uma quantidade inimaginável de dados, uma coisa interessante a se saber é a localização e origem desses dispositivos.

 

Neste artigo iremos mostrar como obter a geolocalização aproximada de um módulo ESP8266 conectado à Internet e enviar esses dados para um servidor que exibe uma página Web com Google Maps e um marcador na localização aproximada.

 

Recomenda-se fortemente a leitura do artigo escrito por Pedro Bertoleti, BeagleBone Black - Localização aproximada via IP, onde o autor obtém a geolocalização aproximada de uma Beaglebone Black via IP usando a linguagem Python.

 

 

Pré Requisitos

 

Para a reprodução deste artigo, é necessário ter:

 

 

Programando ESP8266 com IDE Arduino

 

Para possibilitar a programação do módulo ESP8266 usando a IDE Arduino, execute os seguintes passos:

  • Abra a IDE Arduino
  • Clique em File -> Preferences
  • Adicione a seguinte URL no campo Additional Boards Manager URLs e clique OK

http://arduino.esp8266.com/stable/package_esp8266com_index.json

  • Clique em Tools -> Board -> Bards Manager
  • Encontre a placa esp8266 by ESP8266 Community e clique em instalar.

 

Assim teremos disponíveis as placas da linha ESP8266, suas bibliotecas e exemplos incluídos.

 

 

Funcionamento da API de Geolocalização via IP

 

Dentre alguns serviços da web que fornecem uma API de Geolocalização via IP, temos o ip-api.com. Além de ser free, é bem fácil de usar. Basta apenas enviarmos uma requisição HTTP GET (para testes pode-se usar cURL) para o link http://ip-api.com/json e receberemos o seguinte JSON como resposta:

 

 

Usando o selecionador de itens, podemos especificar quais itens desejamos receber como resposta.

 

Selecionador de itens da API ip-api - Localização aproximada via IP
Figura 2 - Selecionador de itens da API ip-api

 

Selecionando apenas country,region,city,lat,lon,query, podemos fazer uma requisição GET no seguinte link:

 

http://ip-api.com/json/?fields=country,region,city,lat,lon,query

 

Ou também usar a forma numérica para economizar largura de banda:

 

http://ip-api.com/json/?fields=8405

 

E receberemos do servidor o seguinte JSON:

 

 

 

Implementando requisições HTTP no ESP8266

 

A biblioteca que possibilita ao ESP8266 se portar como um Web Client e fazer requisições HTTP é a ESP8266WiFi que pode ser incluída no código com ‘#include <ESP8266WiFi.h>’.

 

A função que faz a requisição HTTP GET para receber os dados de gelolocalização é a seguinte:

 

 

Primeiramente, tentamos conectar ao Host ip-api.com na porta 80, então fazemos uma requisição GET da seguinte maneira:

 

 

Logo após, o servidor ip-api retorna com um Header (Cabeçalho). Lemos o Header até chegarmos na linha vazia “\r\n”.

 

 

Após o Header lemos o JSON com os dados de geolocalização e imprimimos no console serial.

 

 

Para enviarmos o JSON recebido ao servidor, fazemos uma requisição POST no link ‘/location’ indicando o endereço e porta do servidor. A função que realiza essa tarefa é a seguinte:

 

 

 

Código Completo

 

O código completo pode ser visto e analisado abaixo:

 

 

 

Conclusão

 

Neste artigo foi desenvolvido um Web Client usando o módulo WiFi ESP8266 ESP-01 que utiliza da API do site ip-api.com para receber sua geolocalização aproximada via IP. Esse tipo de aplicação pode ser usada quando é necessário identificar a localização de um determinado dispositivo e quando não há possibilidade de usar um GPS no projeto.

 

Não deixe de ler a parte 2 desse artigo! Iremos mostrar os dados de geolocalização em um Google Maps!

 

 

Referências

 

https://www.embarcados.com.br/modulo-esp8266/

https://www.embarcados.com.br/esp8266-com-arduino/

http://www.whatimade.today/esp8266-easiest-way-to-program-so-far/

https://github.com/esp8266/Arduino

http://ip-api.com/docs/api:json

http://www.w3schools.com/tags/ref_httpmethods.asp

https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

http://www.json.org/

Outros artigos da série

Localização aproximada via IP com ESP8266 - Parte 2 >>
Este post faz da série Localização aproximada via IP com ESP8266. Leia também os outros posts da série:
É formado em Técnico em Mecatrônica pelo SENAI Roberto Mange de Campinas, onde teve seus primeiros contatos com microcontroladores, eletrônica e programação. Em 2016 obteve a graduação em Engenharia de Controle e Automação pela UNISAL, também em Campinas. Durante a graduação, teve a oportunidade de ingressar e estagiar na empresa Toradex, onde atuou e desenvolveu habilidades em sistemas Linux embarcado.