Comunicação Arduino e celular usando Blynk
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.
Você sabe se é possível esse tipo de interação só que usando um módulo wifi mas em com um app criado por mim, por exemplo?
Boa tarde,
Perfeitamente, existem várias bibliotecas prontas que fazem esse tipo de comunicação.
Abraço!
Adilson
Boa noite, gostaria de sabee se existe alguma forma de eu estar conectado no Bluetooth e caso algo aconteça o blynk notifica o celular. Por exemplo se alguém passar por um sensor, ele envia uma notificação no meu celular
Boa noite, você sabe me dizer se eu consigo ler no arduino o valor de uma porta virtual que esta associada a um botão no blynk? Por exemplo: No blynk eu tenho um botão associado ao pino virtual V0, e no arduino, via código, eu pegaria o valor desse botão(solto ou pressionado), para fazer o que eu quiser.
Oi Hugo,
Não testei ainda mas pelo que eu pesquisei é possível sim.
Abraço!
Adilson
Eu consigo enviar os dados armazenados no blynk para um webservice?
Olá, posso conectar os 2 sensores e uma tela Nokia 5110 junto?