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

Localização aproximada com ESP8266
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 - Localização aproximada via IP com ESP8266

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 - Localização aproximada via IP com ESP8266 - Parte 1

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 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Internet Das Coisas » Localização aproximada via IP com ESP8266 - Parte 1
Comentários:
Notificações
Notificar
guest
8 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Zaqueu
Zaqueu
07/11/2019 18:03

Ótimo artigo, obrigado salvou meu dia

Paulo Garcia
Paulo Garcia
25/10/2018 16:13

Boa tarde! Em primeiro lugar, muito obrigado pelos excelentes materiais que vocês disponibilizam! Bom, testei o código e obtive os dados. Mas surgiram alguns pontos que gostaria de ajuda para compreende-los. Expandi o código para inserir os dados obtido em tabela no BD MySql. Fiz os testes em 3 redes diferentes. a 1a em um ponto da NET na região da Av. Santa Catarina em Sao Paulo, a 2a pelo celular, uma linha da claro e uma 3a rede também da NET próximo a estacão Campo Limpo do Metro (Linha Lilas). No caso da 2a e 3a rede, fisicamente estava… Leia mais »

Germán Martín
Germán Martín
12/03/2017 19:46

Hi, I've written a library to get position from Wi-Fi networks around using Google maps location API. You may have a look to it in https://github.com/gmag11/ESPWifiLocation

Giovanni Bauermeister
Giovanni Bauermeister
Reply to  Germán Martín
13/03/2017 08:12

Hi Germán. Thanks! I will have a look and test your library.

Fabio
Fabio
26/01/2017 16:51

Boa tarde,

Primeiramente parabéns pelo Blog, conteúdo muito interessante e de simples compreensão. Porém, eu trabalho com programação e não intendo muito de eletrônica, e gostaria de programar alguns sensores do esp8266 nodemcu. Eu vi que alguns você pode conectar direto na placa sem o protoboard.

Segue um que eu vi na internet (RGB SMD LED Module 5050): http://www.ebay.com/itm/181307916806?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Gostaria de saber, o que eu deveria levar em consideração, quando for comprar algum sensor pra conectar direto no esp8266 nodemcu? Somente sensores com 3.3V para a alimentação são possíveis?

Giovanni Bauermeister
Giovanni Bauermeister
Reply to  Fabio
31/01/2017 15:54

Olá Fábio. Obrigado pela leitura do artigo!
O NodeMCU e a família ESP em geral aceitam apenas níveis de 3,3V. Se não estou enganado os GPIOs suportam corrente máxima de 12mA.

Creio que esse modulo de LED SMD que vc indicou poderia ser usado com ESP sem problemas.

Marcelo Rodrigues Alves
Marcelo Rodrigues Alves
25/01/2017 13:36

Muito bom esse artigo Giovanni Bauermeister, aguardando a segunda parte

Giovanni Bauermeister
Giovanni Bauermeister
Reply to  Marcelo Rodrigues Alves
31/01/2017 15:55

Muito obrigado pela leitura Marcelo! Já saiu a segunda parte!

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link