Neste tutorial será mostrado como utilizar o Sensor de Umidade do Solo (também chamado de Higrômetro) com o Módulo WiFi ESP8266 NodeMCU ESP-12 e monitorar os valores lidos através de um aplicativo simples criado com o Blynk IoT. Desta forma você poderá monitorar o nível de umidade do solo de suas plantas de qualquer lugar do mundo.
Os passos mostrados aqui poderão servir de base para adicionar mais funcionalidades ao projeto e até mesmo criar um sistema de irrigação automático para sua casa. O tutorial também pode ser adaptado para qualquer placa de desenvolvimento que utilize tecnologia WiFi.
Componentes necessários
Para seguir este tutorial, você precisará dos seguintes itens:
- 1x Módulo WiFi ESP8266 NodeMcu V3;
- 1x Sensor de Umidade do Solo Higrômetro;
- 5x Fios Jumper Fêmea-Fêmea;
- 1x Smartphone.
A programação do NodeMCU será feita através da IDE do Arduino. Caso não saiba como configurar a IDE para programar módulos baseados no ESP8266, recomendamos primeiro ler o seguinte tutorial:
ESP8266 – Como Programar o NodeMCU Através da Arduino IDE
O que é o Blynk IoT?
Blynk é uma plataforma voltada a prototipagem e implantação de projetos IoT (Internet of Things). O Blynk possui um banco de dados em nuvem à qual usuários podem conectar diversos tipos de hardware através de tecnologia WiFi, Bluetooth e BLE, Ethernet, USB (Serial), GSM, entre outras; com o intuito de controlar e analisar remotamente seu funcionamento em tempo real através de aplicações iOS, Android e web.
Seu uso é gratuito (com funcionalidades limitadas) para prototipagem e projetos pessoais, porém seus termos e condições deixam claro que é necessária a aquisição de uma licença para uso comercial.
O Blynk é composto de um aplicativo para criação de interfaces de controle e monitoramento de seu hardware através de dispositivos móveis, um console web para configuração e também para controle e monitoramento, uma biblioteca responsável pela comunicação entre hardware e a nuvem e o próprio serviço de nuvem que conecta tudo.
Figura 1 – Arquitetura do Blynk
A plataforma passou por uma grande renovação em maio de 2021 com uma remodelagem do site, um novo aplicativo (chamado de Blynk 2.0 nos fóruns oficiais) e uma nova biblioteca com novas funcionalidades. A versão antiga do aplicativo ainda se encontra disponível, mas a tendência é que ela seja abandonada no futuro em favor da nova versão. Por isso, este tutorial foi criado utilizando a versão mais recente.
Instalando o Blynk
A instalação do aplicativo Blynk IoT em um dispositivo móvel é bastante simples. Abra a Play Store ou App Store (dependendo de seu sistema operacional) e pesquise por “Blynk.” Certifique-se de que o nome e o ícone do aplicativo correspondem à imagem abaixo, pois a versão antiga ainda pode aparecer na pesquisa. Será fácil reconhecer pois a versão antiga aparece como “Blynk 1.0” ou “Blynk (Legacy).” O “Blynk 2.0” ou “Blynk IoT” é a versão que utilizaremos.
Figura 2 – Blynk IoT na Play Store
Após instalado o aplicativo em seu dispositivo móvel, vamos abrir a IDE do Arduino em nosso computador. Caso não ela ainda não se encontre instalada, você pode baixá-la de graça em https://www.arduino.cc/en/software.
Com a IDE do Arduino aberta, no menu superior clique em Sketch > Incluir Biblioteca > Gerenciar Bibliotecas e pesquise por “Blynk.” Vamos instalar a biblioteca desenvolvida por Volodymyr Shymanskyy.
Figura 3 – Gerenciador de Bibliotecas
Com isso, você está pronto para escrever programas que se comunicarão com o aplicativo.
Criando cadastro no Blynk
Ao abrir o aplicativo do Blynk pela primeira vez, você vai se deparar com a seguinte tela:
Figura 4 – Tela inicial do app Blynk IoT
Caso esta seja sua primeira vez utilizando os serviços do Blynk, clique em “Sign Up” para criar uma conta gratuita. Será então requisitado um endereço de e-mail para o qual o aplicativo enviará um link de ativação.
Figura 5 – Digite seu endereço de e-mail
Figura 6 – Verifique seu e-mail
Após inserir um endereço válido e clicar em “Continue,” vá até a caixa de entrada deste e-mail, localize a mensagem enviada pelo Blynk, abra e clique no botão “Create Password.” Caso a mensagem não esteja na caixa de entrada, verifique a caixa de spam. Esta parte do processo também pode ser feita em um computador.
Figura 7 – Clique em Create Password
Após clicar no botão, crie uma senha para sua conta Blynk e um nome de usuário.
Figura 8 – Crie uma senha para sua conta no Blynk
Figura 9 – Crie um nome de usuário do Blynk
Sua conta agora está criada e você pode começar a criar um aplicativo de controle para seu ESP8266.
Criando seu aplicativo
Agora que você está logado no aplicativo, você verá uma chave inglesa no canto superior direito de sua tela inicial. Clique nela para entrar no modo de desenvolvedor e criar um template (modelo de interface). Só será possível adicionar um novo dispositivo (nosso ESP8266) após a criação de ao menos um template. Batizei o meu de “Umidade.”
Figura 10 – Crie seu primeiro template
Figura 11 – Dê um nome ao seu template
Figura 12 – Abra seu template
Com o template criado e nomeado, podemos abri-lo e começar a adicionar elementos à nossa interface. Ao abrir seu template você verá uma tela branca pontilhada. Os pontos servem para orientar o usuário na hora de posicionar widgets na tela.
Clique no ícone de menu no canto superior direito da tela para ver os widgets disponíveis. Você notará que alguns estão disponíveis apenas para usuários pagos. Selecione dois “Value Display” e arraste-os para a posição de sua preferência na interface.
Abra o menu
Figura 13 – Selecione o widget Value Display
Figura 14 – Dois widgets Value Display inseridos no template
Clicando em cada um dos widgets que adicionamos, podemos editar informações como nome, tamanho, cor e alinhamento da fonte, e o pino virtual que será associado a cada widget.
O nome é um campo não obrigatório e aparecerá em nossa interface quando o aplicativo estiver em execução. Note que preenchi o nome em apenas um dos dois widgets.
O pino virtual é a informação mais importante pois é a partir deste valor que vamos referenciar os widgets no código do nosso ESP8266. Selecione o pino no campo “Datastream.” É possível associar pinos virtuais de mesmo número a diversos widgets simultaneamente, fazendo com que um ou mais widgets exibam exatamente o mesmo valor, mas vamos utilizar pinos diferentes para nossos widgets. Em meu template usei os pinos V4 e V5.
No ícone do canto superior direito também podemos ver algumas informações básicas sobre nosso widget e como acessá-lo para escrita e leitura através de código.
Figura 15 – Selecione um pino virtual no campo Datastream
Figura 16 – Informações sobre o widget Value Display
Configurando o Blynk IoT
Agora que criamos nossa interface de controle, podemos associar um dispositivo a ela. Para isso, é necessário primeiro enviar o código de configuração para nosso ESP8266. Na IDE do Arduino, abra o exemplo disponível em Arquivo > Exemplos > Blynk > Blynk_Edgent > Edgent_ESP8266. Todo o código do nosso projeto será criado a partir deste exemplo.
Blynk.Edgent é o nome da biblioteca que gerencia a conexão com o servidor do Blynk, envia e recebe dados do servidor e auxilia no cadastro do hardware. Ela é indicada especialmente para dispositivos capazes de se conectar à internet via Wi-Fi, como é o caso do ESP8266.
Figura 17 – Abra o exemplo Edgent_ESP8266
Com o exemplo aberto, vemos que algumas linhas estão comentadas. Para que o código funcione, precisamos descomentar e preencher as linhas destacadas abaixo com as informações do nosso projeto. Mas como encontramos estas informações?
Figura 18 – Substitua as palavras TMPLxxxxxx e Device no código mas mantenha as aspas
No aplicativo do Blynk, com seu template aberto, clique no ícone de porca à esquerda do ícone de menu. Será aberta uma nova tela com o Template ID do seu projeto. O Device Name será o nome de seu template. Substitua ambos no código de exemplo.
Figura 19 – Clique no ícone de porca
Figura 20 – Template ID no app Blynk IoT
Estas mesmas informações também podem ser encontradas através do console do Blynk abrindo Blynk.Cloud no navegador, clicando em Templates e abrindo o seu template.
Figura 21 – Página Templates no console do Blynk
Figura 22 – Template ID e Device Name no console do Blynk
Para finalizar, vamos descomentar a linha referente a nossa placa, destacada abaixo. Envie o código para a placa.
Figura 23 – Indique no código qual placa será utilizada
Abrindo o monitor serial com um baudrate de 115200, vemos que o ESP8266 criou um ponto de acesso (AP):
Figura 24 – Ponto de acesso criado
De volta ao aplicativo, clique no ícone no canto superior esquerdo da tela para sair do modo de desenvolvedor e retornar à página inicial. Em seguida, clique em “Add new device.”
Figura 25 – Saia do modo de desenvolvedor
Figura 26 – Clique em Add new device
Você precisará conectar seu dispositivo móvel ao ponto de acesso criado pelo código exemplo. O nome do AP foi escrito no monitor serial do Arduino IDE após o carregamento do código. Ele sempre começará com a palavra “Blynk” e incluirá o Device Name indicado em seu código. Quando conectado, clique em “Ready.”
A conexão também pode ser realizada a partir do aplicativo do Blynk clicando em “Manual Connect.” O link abrirá as configurações de Wi-Fi do seu dispositivo.
Figura 27 – Clique em Manual Connect para se conectar ao seu ESP8266
Figura 28 – Selecione o AP de seu ESP8266
Figura 29 – Blynk conectando-se ao ESP8266
Após realizado o vínculo com seu ESP8266, você precisará indicar a qual rede Wi-Fi ele deverá se conectar para acessar a internet. O aplicativo abrirá automaticamente uma lista com as redes disponíveis. Selecione uma e insira a senha da rede.
Figura 30 – Selecione sua rede Wi-Fi e digite a senha
Em seguida, vamos escolher um nome para o dispositivo, uma localização e um fuso horário. Estas duas últimas informações não são obrigatórias.
Caso resolva alterar o nome do dispositivo, lembre-se de alterá-lo também no código. Sua placa não conseguirá se comunicar com o servidor do Blynk e com o aplicativo se o Device Name estiver diferente.
Figura 31 – Confirme ou altere o nome do dispositivo
Figura 32 – Selecione um local para seu dispositivo ou deixe o campo em branco
Figura 33 – Selecione seu fuso horário
Ao final, confirme as informações e seu dispositivo estará pronto para uso. Você será apresentado a uma tela onde pode escolher adicionar um novo dispositivo, adicionar um segundo dispositivo com as mesmas configurações ou encerrar as configurações. Clique em “Finish and exit” para sair.
Figura 34 – Dispositivo cadastrado. Clique em “OK, great!”
Figura 35 – Clique em “Finish and exit” para sair
A página inicial do aplicativo agora mostrará o dispositivo que você cadastrou. Clicando nele, podemos visualizar nossa interface em execução. No momento, ela não mostrará nenhuma informação pois ainda não criamos a parte do código que fará a leitura do nosso sensor de umidade.
Figura 36 – Dispositivo criado
Figura 37 – Interface de controle e monitoramento ainda sem informações do sensor
Entrando em Blynk.Cloud, você verá que o dispositivo foi adicionado à sua conta e também poderá ser monitorado através do console do Blynk no navegador.
Figura 38 – Dispositivo cadastrado no console do Blynk
Sensor de Umidade do Solo (Higrômetro)
O Sensor de Umidade do Solo ou Higrômetro, conhecido por YL-69, FC-28 ou HL-69 dependendo do fabricante, é utilizado para detectar variações de umidade no solo através de seu nível de condutividade.
O sensor propriamente dito é uma sonda com dois eletrodos que trocam corrente entre si. Quanto mais úmido o solo, maior será a condutividade e mais fácil será esta troca de corrente. Em outras palavras, o solo vai oferecer menos resistência e a tensão lida vai ser menor.
Figura 39 – Funcionamento do sensor de umidade do solo
A haste do sensor é ligada a uma placa com um CI (circuito integrado) comparador que pode operar em uma tensão de 3,3V a 5V. Ele é responsável por nos retornar o nível de condutividade do solo.
Esta placa possui um LED para indicar que ele está sendo alimentada corretamente e outro que indica o funcionamento da saída digital (D0). Este pino retorna apenas dois possíveis valores: nível lógico alto (HIGH) ou nível lógico baixo (LOW). A sensibilidade pode ser ajustada através do potenciômetro da placa.
Temos também uma saída analógica (A0) que fornece uma precisão maior ao medir a umidade do solo. O ESP8266 possui um ADC (conversor analógico-digital) com uma precisão de 10-bits, o que significa que os sinais recebidos desta placa serão representados por valores entre 0 e 1023.
Figura 40 – Pinos da placa de controle
Ligação do circuito
Ligue o pino A0 da placa comparadora ao pino A0 do ESP8266, o GND da placa ao GND do ESP8266 e o VCC da placa ao pino 3V3 do ESP8266 como ilustrado abaixo. A ordem dos pinos dos eletrodos não interfere na leitura do sensor.
Figura 41 – Ligação do sensor de umidade
Programando
Como foi mencionado anteriormente, criaremos nosso código a partir do exemplo Edgent_ESP8266 disponibilizado na biblioteca do Blynk. Precisaremos de todas as abas abertas pelo exemplo para que o programa seja executado, mas vamos editar apenas a aba principal, o arquivo Edgent_ESP8266.ino.
As primeiras linhas do código devem estar descomentadas e com as informações de seu projeto:
1 2 | #define BLYNK_TEMPLATE_ID "SEU TEMPLATE ID AQUI" #define BLYNK_DEVICE_NAME "SEU DEVICE NAME AQUI" |
E a seguinte linha deve estar descomentada para que o programa entenda que estamos usando um ESP8266:
1 | #define USE_NODE_MCU_BOARD |
Em seguida, vamos criar uma variável global que indicará a qual pino a saída analógica do nosso sensor está ligado:
1 | const int pinSensor = A0; |
Vimos na tela de informações do widget Value Display que o envio de dados para o Blynk é realizado pela função Blynk.virtualWrite(). Porém, na documentação oficial do Blynk é recomendado não chamar a função diretamente dentro do loop() pois isto pode resultar no ESP8266 ser desconectado do servidor. Devemos então criar uma segunda variável global, um timer que ficará responsável pela chamada desta função:
1 | BlynkTimer timer; |
Dentro do setup(), vamos configurar o nosso timer com uma chamada método setInterval():
1 | timer.setInterval(1000L, myTimerEvent); |
Este método exige dois parâmetros: o primeiro é o intervalo em milissegundos entre cada chamada da função que daremos como segundo argumento. O nome da função fica a critério do programador.
Note que passamos “1000L” como primeiro argumento. Logo, a função myTimerEvent() será chamada a cada 1000 milissegundos (1 segundo). O “L” ao final indica que o valor será passado como uma variável do tipo long int.
Dentro da função myTimerEvent() será feita a leitura do sensor e as chamadas do Blynk.virtualWrite() com dois argumentos: o número do pino virtual que configuramos na interface do Blynk e o dado que vamos enviar ao widget.
1 2 3 4 5 6 | void myTimerEvent() { int umidade = analogRead(pinSensor); String texto = analisaUmidade(umidade); Blynk.virtualWrite(V4, umidade); Blynk.virtualWrite(V5, texto); } |
É aconselhável não tentar enviar mais de 10 valores por segundo. Também deve-se evitar usar dentro do timer funções que bloqueiam a execução do programa como, por exemplo, delays.
Note que criei uma função chamada analisaUmidade() que recebe o valor lido pelo sensor. Esta função retornará uma String indicando se o solo está com umidade baixa, média ou alta. Esta informação será posteriormente escrita no segundo Value Display de nossa interface.
1 2 3 4 5 6 7 8 9 | String analisaUmidade(int valorSensor) { // Status: Solo úmido if (valorSensor >= 0 && valorSensor <= 400) { return "Úmido"; } // Status: Umidade moderada if (valorSensor > 400 && valorSensor <= 800) { return "Média"; } // Status: Solo seco if (valorSensor > 800 && valorSensor <= 1024) { return "Seco"; } return "Erro"; } |
É importante ressaltar que os limiares mostrados acima podem não corresponder à sua realidade. Cada tipo de solo possui propriedades únicas que podem interferir nos resultados do sensor. É imprescindível que o usuário teste o sensor em solo úmido e molhado e substitua os valores dessa função pelos números que encontrar.
Para finalizar, vamos adicionar ao loop() a execução de nosso timer:
1 | timer.run(); |
Ao final, sua aba Edgent_ESP8266 deve estar da seguinte maneira:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | // Fill-in information from your Blynk Template here #define BLYNK_TEMPLATE_ID "SEU TEMPLATE ID AQUI" #define BLYNK_DEVICE_NAME "SEU DEVICE NAME AQUI" #define BLYNK_FIRMWARE_VERSION "0.1.0" #define BLYNK_PRINT Serial //#define BLYNK_DEBUG #define APP_DEBUG // Uncomment your board, or configure a custom board in Settings.h //#define USE_SPARKFUN_BLYNK_BOARD #define USE_NODE_MCU_BOARD //#define USE_WITTY_CLOUD_BOARD //#define USE_WEMOS_D1_MINI #include "BlynkEdgent.h" BlynkTimer timer; // Instância do timer const int pinSensor = A0; // Pino utilizado pelo sensor void setup() { Serial.begin(115200); delay(100); BlynkEdgent.begin(); timer.setInterval(1000L, myTimerEvent); // Intervalo em milisegundos } void loop() { BlynkEdgent.run(); // Executa o Blynk timer.run(); // Executa o timer } void myTimerEvent() { int umidade = analogRead(pinSensor); // Variável que armazena leitura de umidade do solo String texto = analisaUmidade(umidade); // Analisa o valor lido pelo sensor // Enviando valores para o Blynk. Blynk.virtualWrite(V4, umidade); Blynk.virtualWrite(V5, texto); } String analisaUmidade(int valorSensor) { // Status: Solo úmido if (valorSensor >= 0 && valorSensor <= 400) { return "Úmido"; } // Status: Umidade moderada if (valorSensor > 400 && valorSensor <= 800) { return "Média"; } // Status: Solo seco if (valorSensor > 800 && valorSensor <= 1024) { return "Seco"; } return "Erro"; } |
Carregue o código na placa.
Funcionamento
Abrindo o aplicativo do Blynk e acessando o nosso dispositivo, agora podemos ver o valor lido pelo sensor. Ele será atualizado a cada segundo de acordo com as configurações de nosso timer.
Figura 42 – Interface de monitoramento no Blynk IoT
Caso queira alterar a posição das informações, usar widgets diferentes ou adicionar mais widgets à interface, ela pode ser editada clicando no ícone de chave inglesa.
Gostou? Deixe seu comentário logo abaixo, não deixe de conferir outras postagens do nosso blog. Confira também a nossa loja virtual e encontre todos os componentes utilizados no projeto no post.
Muito bem explicado ! Mas e se acaso eu queira colocar mais de uma planta para monitoramento teria eu como colocar todas no mesmo link do blynk ?
Você pode obter a leitura de mais de um sensor usando um único template desde que todos os sensores estejam ligados à mesma placa. Acredito que você precisaria criar um novo template caso queira fazer a leitura através de um dispositivo diferente.
Mas a ESP8266 tem apenas uma entrada Analógica. Como seria feito isso ?
deve ser feito multiplexação