Conectando-se ao DeviceHub com NodeMCU e MQTT

Com o conceito da Internet das Coisas (ou IoT) se expandindo, se tornou mais fácil conectar diferentes tipos de hardware com software especializados na obtenção de dados do ambiente ou controle de sistemas. Enquanto não existe ainda uma universalização de modos de conexão IoT, temos que estudar caso a caso e, por meio de testes, concluir qual o melhor método para se alcançar as especificações do projeto.

 

Neste artigo farei um projeto simples para conectar um sensor de temperatura e umidade (DHT11) na plataforma online DeviceHub para gerar gráficos com os dados deste sensor. Para este projeto, considerei placas de desenvolvimento compatíveis com Arduino, e portanto utilizarei o software Arduino IDE. Mais especificamente, utilizarei a placa NodeMCU v3 (no Arduino IDE será utilizado a placa NodeMCU v1.0, mas não haverá problemas visíveis de compatibilidade), que utiliza de um módulo ESP8266 para conexão Wifi.

 

 

Preparando o Arduino IDE

 

Primeiramente, precisamos preparar o Arduino IDE para se comunicar com a placa NodeMCU. Para isso, siga os seguintes passos:

 

1 - Vá em Tools -> Board: -> Boards Manager…

 

2 - Vá na barra de procura e digite “esp8266”. Vai aparecer apenas uma opção, da “ESP8266 Community”. Clique nesta opção, escolha a versão mais recente (estou utilizando a versão 2.3.0), e instale. Assim que terminar, as novas placas estarão disponíveis.

 

3 - Vá em Tools -> Board: -> “NodeMCU 1.0 (ESP-12E Module)”. Não mude nenhuma configuração vinda com esta placa.

 

Depois disso, devemos adicionar à IDE as bibliotecas que serão utilizadas neste projeto.

 

4 - Vá em Sketch -> Include Library -> Manage Libraries…

 

5 - Vá na barra de procura e procure e faça download das seguintes bibliotecas:

  • “ESP8266WiFi” (Versão 1.0.0 ou acima) de “Ivan Grokhotkov”;
  • “PubSubClient” (Versão 2.6.0 ou acima) de “Nick O’Leary”;
  • “DHT sensor library” (Versão 1.3.0 ou acima) de “Adafruit”;
  • “Adafruit Unified Sensor” (Versão 1.0.2 ou acima) de “Adafruit”.

 

 

Criando um usuário e projeto no DeviceHub

 

1 - Crie uma conta em aqui

 

2 - Clique em Projects -> Add new project e dê um nome, imagem e descrição ao seu projeto. Pode escrever o que quiser, já que estes dados não serão utilizados no código.

 

Tela do DeviceHub para adicionar novo projeto.
Figura 1 - Tela do DeviceHub para adicionar novo projeto.

 

3 - Clique em Add Device.

 

Tela do DeviceHub para adicionar dispositivo.
Figura 2 - Tela do DeviceHub para adicionar dispositivo.

 

Coloque os seguintes parâmetros:

  • Name: DHT11 teste (ou outro nome, se quiser, pois não afetará o uso);
  • Development Board: Arduino;
  • Programming Language: C++;
  • Connection Type: Wifi.

 

Outros espaços como “image” e “description” não precisam ser preenchidos. 

 

4 - Clique em Add Sensor.

 

Tela do DeviceHub para adicionar sensor.
Figura 3 - Tela do DeviceHub para adicionar sensor.

 

Coloque os seguinte parâmetros:

  • Name: T;
  • (x) Analog;
  • Measurement Unit: *C.

 

5 - Crie outro sensor com os seguintes parâmetros:

  • Name: U;
  • (x) Analog;
  • Measurement Unit: %.

 

6 - Após essas configurações, você achará abaixo das características do dispositivo e projeto um botão chamado “Development Information”. Clicando nele, pode se achar todos os dados que serão utilizados no código deste projeto.

 

Tela do DeviceHub para obter informações de desenvolvimento.
Figura 4 - Tela do DeviceHub para obter informações de desenvolvimento.

 

 

Montando o circuito

 

O circuito que será utilizado pode ser visto na figura 5:

 

Circuito para o projeto.
Figura 5 - Circuito para o projeto.

 

Os fios vermelho e preto representam as ligações do sensor DHT11 ao 3.3V e GND do NodeMCU, respectivamente. O fio amarelo fará a comunicação serial do tipo Single-Wire Two-Way, ao qual passaremos solicitações de dados e os dados em si. O resistor pull-up no fio amarelo é de 4.7 kOhms. O fio verde já possui a função de reiniciar a placa NodeMCU após o colocarmos em deepSleep, para reduzir consumo de energia nos momentos em que não há transmissão de dados para a plataforma.

 

 

Código

 

O código utilizado pode ser visto abaixo. As partes em negrito devem ser preenchidas com dados do usuário, sendo este a rede Wifi que será utilizada e os dados do Development Information visto do DeviceHub.  

 

 

 

Testando

 

Uma vez copiado o código acima e salvo no computador, poderemos fazer upload do código ao NodeMCU. Pode-se clicar a seta de upload do cabeçalho do Arduino IDE ou clicar CTRL+U. Assim, irá começar a baixar para a placa. Deve-se checar uma tela como a de baixo assim que o upload terminar.

 

Tela do Arduino IDE mostrando o upload do código para a placa NodeMCU.
Figura 6 - Tela do Arduino IDE mostrando o upload do código para a placa NodeMCU.

 

Clicando em Ctrl+Shift+M (serial monitor), você poderá checar o processo de obtenção dos dados pelos sensores e a conexão Wifi. Caso o nome ou a senha da rede Wifi estejam errados, você poderá conferir nesta tela. A linha com caracteres aleatórios deve ser ignorada, pois é o momento em que a placa sai do deepSleep e está configurando a comunicação serial.

 

Tela do monitor serial do Arduino IDE com o código rodando na placa NodeMCU.
Figura 7 - Tela do monitor serial do Arduino IDE com o código rodando na placa NodeMCU.

 

Para terminar, podemos checar o gráfico sendo atualizado no DeviceHub com os dados recebidos pelo NodeMCU.

 

Gráfico da temperatura no site DeviceHub.
Figura 8 - Gráfico da temperatura no site DeviceHub.
Gráfico da umidade no site DeviceHub.
Figura 9 - Gráfico da umidade no site DeviceHub.

 

 

Conclusão

 

Concluirei este artigo com algumas recomendações:

  • Com o comando deepSleep e uma bateria conectada ao NodeMCU, pode-se criar pequenos módulos de sensores e colocá-los em diferentes locais com rede Wifi por uma longa duração de tempo. Quanto maior o período de obtenção dos dados dos sensores, maior o período para a troca da bateria;
  • A razão para utilizar a biblioteca  Adafruit_Sensor.h é para que o leitor tenha maior liberdade para adicionar novos sensores e mantê-los organizados. Lembre-se sempre que muitas das funções que você deseja implementar já foram feitas por alguém e pode ser achada no GitHub ou em outros sites, tornando sua programação mais rápida e organizada. Reinventar a roda pode ser trabalhoso e não tão eficiente quanto uma biblioteca open source que foi modificada por uma comunidade de profissionais da área. Não tenha vergonha de usar o que já existe e é open source.

 

Sinta-se livre para modificar este projeto como bem entender, e sempre traga algo novo à comunidade, pois é em grupo que criaremos um sistema IoT único e para todos. Qualquer dúvida sobre o projeto, deixar nos comentários.

Supervisor de Desenvolvimento da Star Lighting DIvision e mestrando em Engenharia de Software pela Unicamp. Formado em Engenharia Elétrica pela Unicamp, tem um grande interesse pelo conceito de Internet das Coisas e sua tecnologias.
  • Paulo Sergio Pereira

    Olá Victor montei o cenário proposto do seu artigo, mas apresenta um erro não faz leitura dos dados.
    O Erro está na ligação do dth11 no cabo amarelo está ligado na perna errada do Dth11.
    funcionou perfeitamente depois da alteração.