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

Confira a parte 2 da série “Localização Aproximada via IP com ESP8266”, onde é desenvolvido um Web Server escrito em Node.js numa Raspberry Pi.
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

É 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. Participou do movimento maker, contribuindo com tutoriais e suporte ao cliente na Filipeflop. Atualmente atua na área de desenvolvimento de projetos.

Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments

WEBINAR

Visão Computacional para a redução de erros em processos manuais

DATA: 23/09 ÀS 17:00 H