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

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 2 da série “Localização Aproximada via IP com ESP8266”. Na parte 1 foi desenvolvido um Web Client com ESP8266 onde o mesmo é 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 desta série será desenvolvido um Web Server escrito em Node.js, sendo executado em uma Raspberry Pi, que recebe a localização aproximada do ESP8266 e exibe, para os clientes que se conectam ao servidor via navegador, um marcador em uma página do Google Maps. Faremos uso do Express, Socket.io, HTML, Javascript e Google Maps API.

Pré Requisitos

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

O que são Express, Socket.io e Google Maps API?

Para desenvolver um pequeno servidor em Node.js que precisa lidar com requisições HTTP pode-se usar o Express. Siga os passos para instalação no sistema encontrados aqui.

Como exemplo de um pequeno servidor que responde a uma requisição GET temos o seguinte:

Se acessarmos em um navegador o endereço http://192.168.0.24:3000/, ou seja, fazemos um requisição GET, veremos no navegador a mensagem “Hello World!”. Se tentarmos acessar qualquer outro link (diretório) nesta página, como http://192.168.0.24:3000/algumaCoisa, o servidor retorna a mensagem “404 Not Found”.

O servidor desenvolvido neste artigo consegue lidar com requisições HTTP GET e POST da seguinte maneira:

Quando recebemos uma requisição GET, retornamos ao cliente uma página web (arquivo index.html).

Quando recebemos requisição POST no link “/location”, armazenamos o body (corpo) da mensagem, em formato JSON, na variável ‘locationData’ e enviamos essa variável aos clientes conectados.

Lembrando que quem faz requisição GET é o navegador e POST é o ESP8266 com o JSON contendo sua geolocalização.

Com o Socket.io (siga os passos para instalação aqui) podemos fazer troca de informações em tempo real entre servidor e cliente. No caso, o servidor envia os dados de geolocalização para os clientes que acessam a página via navegador.

A linha acima emite um evento chamado locationEvent com os dados da variável locationData. O cliente, por sua vez, escuta pelo evento chamado locationEvent, e salva em variáveis cada objeto JSON quando o evento é acionado.

Agora podemos usar essas variáveis com a API do Google Maps.

Para exibirmos um mapa em uma página HTML devemos ter basicamente o seguinte componente:

O importante é o id do elemento, pois ele será usado ao inicializarmos o mapa.

Então “desenhamos” o mapa, inicialmente com coordenadas quais queres, usando o seguinte código:

Localização aproximada via IP com ESP8266 - Página Web com o mapa em uma localização qualquer.
Figura 1 - Página Web com o mapa em uma localização qualquer.

Quando o locationEvent é acionado, redirecionamos o mapa para as novas coordenadas e colocamos um marcador no mapa:

Será adicionado um marcador na localização aproximada do ESP8266, no caso ele está em Artur Nogueira, interior de São Paulo:

Localização aproximada via IP com ESP8266 - Página Web com um marcador na localização aproximada do ESP8266.
Figura 2 - Página Web com um marcador na localização aproximada do ESP8266.

Abaixo segue um vídeo mostrando o sistema em ação:

Código Completo do Servidor

O código a seguir, escrito em Node.js, pode ser testado em uma Raspberry Pi conectada à internet:

Código Completo do index.html

O código a seguir, contendo alguns scripts em javascript, é a página que o servidor envia aos clientes que se conectam via navegador:

Conclusão

Neste artigo foi desenvolvido um Web Server usando Node.js, Express, Socket.io e Google Maps API mostrando em uma página web a localização aproximada de um ESP8266 conectado à internet. Esse tipo de aplicação mostra que é possível usar poucos recursos de hardware como um ESP8266, sem a necessidade de módulos GSM ou GPS, para fazer um sistema de monitoramento remoto.

O ESP8266 poderia ser incorporado a um Arduino, como visto no artigo Estação Meteorológica com Arduino, fazendo leitura de sensores e possibilitando o monitoramento remoto desses sensores.

Chegamos ao final dessa série de 2 artigos! Espero que tenham gostado e qualquer dúvida entre em contato da forma que desejar.

Referências

http://expressjs.com/en/starter/installing.html
https://developers.google.com/maps/documentation/javascript/
http://socket.io/get-started/chat/
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 1
Este post faz da série Localização aproximada via IP com ESP8266. Leia também os outros posts da série:
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 2
Talvez você goste:
Comentários:

Deixe um comentário

avatar
  Notificações  
Notificar

Séries



Outros da Série

Menu