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 como estagiário na empresa Toradex, onde atuou e desenvolveu habilidades em sistemas Linux embarcado. Atualmente atua como Analista de Desenvolvimento em Eletrônica na FILIPEFLOP.

Deixe um comentário

6 Comentários em "Localização aproximada via IP com ESP8266 - Parte 1"

Notificar
avatar
 
Ordenar por:   recentes | antigos | mais votados
Germán Martín
Visitante
Germán Martín

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
Visitante
Giovanni Bauermeister

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

Fabio
Visitante
Fabio

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
Visitante
Giovanni Bauermeister

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
Visitante
Marcelo Rodrigues Alves

Muito bom esse artigo Giovanni Bauermeister, aguardando a segunda parte

Giovanni Bauermeister
Visitante
Giovanni Bauermeister

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

wpDiscuz