Recentemente escrevi sobre como usar o Blynk para controlar o Arduino via Bluetooth, ou seja, um smartphone enviando comandos para o Arduino. Neste post vamos fazer o contrário: pegar dados das portas do Arduino e enviar para o Blynk, também via bluetooth, e mostrar esses dados na tela do aplicativo.
No nosso projeto vamos usar um sensor de temperatura DHT11 e um potenciômetro, enviando os dados desses dois componentes para o celular.
Circuito Arduino com DHT11 e HC-05
Aqui vamos usar praticamente o mesmo esquema de ligação do módulo bluetooth HC-05 que já vimos no post anterior, com o acréscimo do sensor de temperatura e do potenciômetro. Vamos precisar então de:
- Arduino Uno
- Módulo bluetooth HC-05
- Conversor de nível lógico I2C Bidirecional
- Sensor de temperatura DHT11
- Potenciômetro/Trimpot
O conversor de nível lógico serve para adaptar o nível de sinal de 5V que sai do Arduino (serial TX), reduzindo este sinal para 3.3V, que é o nível suportado pelo módulo HC-05 (pino RX). Você pode substituir esse conversor por um divisor de tensão com resistores, usando a calculadora deste link.
O DHT11 está conectado na porta analógica A0 e o potenciômetro na porta analógica A5 do Arduino. Faremos a comunicação com o módulo bluetooth HC-05 por meio das portas digitais 4 e 5, utilizando a biblioteca SofwareSerial para emular uma porta serial nesses pinos.
Criando o projeto no Blynk
Vamos agora criar um projeto no celular com Android usando o app Blynk (download), que vai receber os dados enviados pelo Arduino via bluetooth. Recomendo a leitura do post anterior, onde apresento mais detalhes sobre o software, instalação e criação de projetos usando o app.
Crie um novo projeto no Blynk, selecionando o dispositivo Arduino UNO e conexão bluetooth. Após selecionar o botão CREATE, você receberá a mensagem informando que o token de autorização (Auth Token) foi enviado para o seu email:
Na tela seguinte, selecione o sinal de + na parte superior do display e em seguida selecione LCD no menu:
O widget do LCD será adicionado ao projeto. Selecione o LCD e será aberta a tela de configuração:
Na tela de configuração, selecione V0 (Virtual V0) na entrada 0 (Input 0), e V1 na entrada 1 (Input 1). Selecione o reading rate como PUSH e configure as mensagens que irão aparecer na tela. Selecione o botão retornar do seu smartphone.
Vamos também incluir um mostrador (gauge), que também vai exibir as informações do potenciômetro. Na tela de configuração do mostrador, selecione o pino de entrada como V2 (Virtual 2) e o Reading Rate também como PUSH:
Por último, vamos incluir o widget do bluetooth. Na lista, selecione o dispositivo que você pareou anteriormente. No exemplo abaixo, o meu módulo foi nomeado como ARDUINOECIA:
Feitas as configurações, a tela do seu app deve estar mais ou menos assim:
Isso finaliza a parte de configuração do nosso projeto no Blynk. Vamos partir agora para a programação do Arduino e exibição dos dados na tela.
Envio de dados do Arduino para o Blynk
No programa abaixo usamos a biblioteca DHT11 (download) e também a biblioteca Blynk, instalada a partir da IDE do Arduino no menu Sketch => Incluir Biblioteca => Gerenciar bibliotecas:
O programa abaixo executa as rotinas enviatemp() e enviapot() a cada 1 segundo. Esse tempo é definido nas linhas 50 e 51 (troque o 1000L por 2000L, por exemplo, para obter intervalos de 2 segundos).
A rotina enviatemp() lê o valor da temperatura no DHT11 e envia pela porta virtual V0 (cujo valor definimos que será mostrado na linha superior do display LCD no projeto feito no Blynk). Já a rotina enviapot() envia o valor lido do potenciômetro tanto para a porta virtual V1 (valor mostrado na linha inferior do display) como para a V2 (gauge).
Não esqueça de colocar, na linha 21, o token que você recebeu por email e foi gerado logo no início do projeto com o Blynk.
//Programa: Blynk com Arduino DHT11 e Potenciometro //Autor: Arduino e Cia //Configuracoes biblioteca Blynk #define BLYNK_PRINT Serial #include <BlynkSimpleSerialBLE.h> #include <SoftwareSerial.h> #include <DHT.h> //Definicoes de pino e tipo do sensor DHT #define pino_DHT A0 #define DHTTYPE DHT11 //Emula a serial nos pinos digitais 4 e 5 SoftwareSerial SerialBT(4, 5); // RX, BlynkTimer timer; //Token de autorizacao char auth[] = "914a7c72f2a22fcb81bf321ed106cfd2"; DHT dht(pino_DHT, DHTTYPE); int temperatura; int valor; void enviatemp() { temperatura = dht.readTemperature(); Blynk.virtualWrite(V0, temperatura); } void enviapot() { valor = analogRead(A5); Blynk.virtualWrite(V1, valor); Blynk.virtualWrite(V2, valor); } void setup() { //Inicializa a comunicacao serial com o modulo HC-05 SerialBT.begin(9600); Blynk.begin(SerialBT, auth); pinMode(A5, INPUT); //Inicializa o DHT11 dht.begin(); //Envia as informacoes para o smartphone timer.setInterval(1000L, enviatemp); timer.setInterval(1000L, enviapot); } void loop() { Blynk.run(); timer.run(); }
Carregue o programa no Arduino e rode o programa no app Blynk para que os dados do DHT11 e do potenciômetro sejam mostrados no seu smartphone:
O Blynk é um app que conversa com vários tipos de dispositivos. Você tem opções para controle via ethernet, wifi, bluetooth, USB e GSM, com as mais diversas placas da linha Arduino e Raspberry Pi e também com módulos como ESP8266 e ESP32, sendo um item interessante para o seu projeto de automação residencial ou IoT. Em breve traremos novos conteúdos utilizando esse app.