Trabalhando com Arduino, Node.js e Angular: Aplicação com sensores

NodeJs e Angular

Está cada vez mais crescente a integração de dispositivos embarcados com aplicações web. Diante deste momento, vamos falar sobre como utilizar o Arduino com uma aplicação desse tipo.

 

A proposta será realizar a leitura de um sensor pelo Arduino, enviar estes dados através da porta serial, armazená-los em um banco de dados, e por fim, exibi-los em uma página web que consumirá uma API.

 

Antes de iniciar vamos explicar como cada componente da nossa aplicação funciona.

 

Para realizar a leitura do sensor vamos utilizar o Arduino, acredito que não precisamos de explicações, mas se caso tenha dúvidas acesse este artigo.

 

Vamos fazer a leitura do sensor e enviar estes dados pela porta serial (Mas por que não enviamos via um shield Ethernet, por exemplo? R: Vamos por partes amigos, na próxima fase vamos retirar a comunicação serial). Uma vez recebidos, nossa aplicação Node.js irá ler os dados, persisti-los no banco de dados e expor uma API.

 

O Node.js é uma plataforma de desenvolvimento baseada em JavaScript que funciona em ambiente multi-plataforma para o desenvolvimento de aplicações web do lado do servidor. Seu objetivo é ajudar programadores na criação de aplicações de alta escalabilidade.

 

A base de dados que utilizaremos é a MongoDB. O MongoDB é um banco NoSQL, ou seja, tem como característica conter todas as informações importantes em um único documento.

 

Através da API, nossa aplicação desenvolvida em Angular irá ler em intervalos os dados do banco e exibi-los. Vamos trabalhar com a ideia de um medidor de temperatura.

 

Vamos lá!

 

Primeiramente vamos ler os dados do sensor através da porta analógica é escrevê-los na porta serial. Vamos simular que o nosso sensor seja um potenciômetro conectado no pino A0 do Arduino. O código é bem simples, não tem segredo, veja:

 

 

 

Agora iremos fazer com que nossa aplicação Node.js receba estes dados e armazene no nosso banco de dados.

 

Vamos aplicar o conceito MVC na aplicação Node, então teremos nossa model e controller.

 

O nosso modelo será a classe Temperature, definida com os campos valor e data.

 

A nossa controller irá responder as requisições, que serão as solicitações da nossa aplicação web. Vamos trabalhar com um post e um get, respectivamente uma ação para criar um registro e outro para ler os dados mais recentes. Veja aqui.

 

A nossa Route será responsável por ler a porta serial, que no nosso exemplo é a COM5 e a cada dado recebido, será feito o registro no banco e também irá informar os endpoints do serviço. Veja como ficou clicando aqui.

 

Não podemos esquecer de falar da nossa persistência de dados. O nosso banco terá uma coleção chamada Temperature (podemos chamar de tabela, para quem não é acostumado com NoSQL), que registra o valor (dado do sensor) e data (data de recebimento).

 

Eu utilizei o mLab para criar uma base online, ele tem uma versão free que nos atende no momento.

 

Você pode utilizar o próprio site do mLab para ver as coleções, mas eu utilizei o software Studio3T. Uma vez feita a conexão com sua base criada no mLab, terá esta visualização:

 

 

Agora temos quase tudo pronto!

 

Se você baixar o projeto e rodar nosso servidor junto com o firmware do Arduino, verá que os dados estão sendo inseridos na base de dados.

 

Node.js e Angular

 

Precisamos que nossa aplicação Angular consuma os dados da API. Isto é bem simples.

 

Lembra da nossa Route? Nela tem um endpoint “GetTemperature”, ele retorna o registro mais recente.

 

Vamos usar o Postman para testar a API.

 

 

Pronto! Agora é só consumir a API e exibir o dados. Para dar um estilo legal no nosso site utilizei esta lib.

 

O resultado final é este:

 

 

Espero que tenho ajudado um pouco e para quem quer ter acesso ao código fonte clique aqui.

 

 

Saiba mais

 

Acessando GPIOs da Raspberry Pi 3 por meio de um servidor web embarcado (node.js, express e wiringpi-node)

Usando a porta serial em Node.js

Usando Node.js e o framework Express para acessar os pinos de GPIO da Colibri VF61 via Web

 

 

Referências

 

https://angular.io

http://nodebr.com/o-que-e-node-js/

https://www.mongodb.com/download-center?jmp=nav

https://mlab.com

NEWSLETTER

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

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

7
Deixe um comentário

avatar
 
5 Comment threads
2 Thread replies
5 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
MarioVinícius Oliveira e SilvaFernando SousaAndré Luiz Gomes CoelhoLAURIANO ELMIRO DUARTE Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Mario
Visitante
Mario

a parte do angular vc não disponibilizou a parte frontend do angular no github?

Mario
Visitante
Mario

eu tentar rodar esse projeto mas sempre dá erro

Vinícius Oliveira e Silva
Visitante
Vinícius Oliveira e Silva

Muito interessante André! Com estes princípios, fica fácil imaginar como criar automação/monitoramente residencial por exemplo, usando apenas Arduino! Show!

Fernando Sousa
Visitante
Fernando Sousa

Fantastico, ótimo trabalho vai ajudar trabalhos iot, parabens iniciativa.

LAURIANO ELMIRO DUARTE
Visitante
lauriano

existe a possibilidade de eu utilizar o mariadb como banco de dados ?
obrigado pela resposta.

LAURIANO ELMIRO DUARTE
Visitante
lauriano

obrigado andré ..