IoT DevKit - 18. Central de Monitoramento por Bluetooth
This tutorial is not available in English
![](/upload/tutoriais/341_header_pt_H.jpg)
Introdução
Anteriormente aproveitamos todas as funcionalidades do IoT DevKit para criar uma central de monitoramento por Wi-Fi e por LoRaWAN. Porém, por Bluetooth, apenas enviamos a leitura do LDR para o aplicativo Blynk e vimos como receber informações por um terminal para acionar uma carga quando uma determinada mensagem é recebida.
Neste tutorial iremos aproveitar as configurações já feitas no aplicativo anteriormente, juntamente com todas as funcionalidades do IoT DevKit, para criar uma central de monitoramento por Bluetooth.
Lista de Materiais
Lista completa de produtos
comprar![](https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/1255/images/1255_1_M.png?20231130170854)
IoT DevKit - LoRaWAN
R$299.90Configuração do Aplicativo
Para recebermos todas as informações do IoT DevKit e continuar com as funcionalidades que já configuramos anteriormente, teremos que adicionar mais cinco "Widgets" ao painel. Três deles são do modelo "Value Display", para armazenar os valores dos três eixos do acelerômetro. Portanto, pressione o botão para adicionar "Widgets" ao painel e encontre essa opção, como na imagem a seguir.
![widget-value-display-encontrado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/SELECAO_WIDGET_VALUE_M.png)
Após adicionar três deste "Widget", toque sobre cada um deles para configurá-los individualmente. O "Widget" para o eixo "x" deve ser configurado com um nome, para variar entre 0 e 1, e ser atrelado ao pino virtual "V4", como na imagem à esquerda abaixo. Para os eixos "y" e "z" as configurações são basicamente as mesmas, porém com os pinos virtuais "V5" e "V6", respectivamente, como nas outras imagens a seguir.
![widget-eixo-x-configurado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/EIXO_X_M.png)
![widget-eixo-y-configurado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/EIXO_Y_M.png)
![widget-eixo-z-configurado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/EIXO_Z_M.png)
Assim que esses "Widgets" estiverem configurados corretamente no painel, adicione novamente outros dois "Widgets" ao painel, para as leituras de temperatura e umidade do DHT11. Porém, desta vez, selecione a opção "Labeled Value", como demarcado na próxima imagem.
![widget-labeled-value-encontrado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/SELECAO_WIDGET_LABEL_M.png)
Feito isso, edite-os individualmente. O "Widget" de temperatura deve ter um nome, variar entre 0 e 50 (o DHT11 só é capaz de ler temperaturas entre 0 e 50 °C), ser atrelado ao pino virtual "V2", e ter a unidade "°C" no campo "label". Já para o "Widget" de umidade, além de ter um nome, ele deve variar entre 0 e 100, ser atrelado ao pino virtual "V3", e ter a unidade "%" no campo "label". As imagens a seguir ilustram essas configurações.
![widget-temperatura-configurado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/TEMPERATURA_M.png)
![widget-umidade-configurado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/UMIDADE_M.png)
Com tudo configurado, você verá que o painel estará um pouco desorganizado, portanto tome alguns minutos para organizá-lo. Assim, ele pode ficar como o da imagem a seguir, por exemplo.
![painel-completo](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/PAINEL_COMPLETO_M.png)
Código
Com as configurações do painel finalizadas, carregue o código a seguir para a sua placa. Lembre-se apenas de alterar a variável CHAVE_AUTENTICACAO
com a chave de autenticação do seu projeto, antes de carregar o código para a placa.
Entendendo o Código
O código deste projeto é basicamente uma mescla dos códigos dos tutoriais anteriores, porém com algumas funções adicionais. Nas declarações globais do código, nós adicionamos as bibliotecas para ler o sensor DHT11 e o acelerômetro do IoT DevKit. Em seguida criamos os objetos timerDHT
e timerAcelerometro
em função da biblioteca de timers do aplicativo Blynk. Por fim, criamos o objeto acelerometro
a partir da biblioteca "RoboCore_MMA8452Q" e o objeto dht
a partir da biblioteca "DHT", de acordo com o pino conectado ao sensor (declarado na variável PINO_DHT
) e com o seu modelo ("DHT11" é o modelo padrão do kit).
Na função lerDHT()
declaramos as variáveis temperatura
e umidade
, que recebem, em seguida, as leituras do sensor através dos comandos temperatura = dht.readTemperature()
e umidade = dht.readHumidity()
, respectivamente. Feito isso, através da condição if (isnan(umidade) || isnan(temperatura))
, verificamos se uma das variáveis (temperatura
ou umidade
) não foi lida corretamente. Se essa condição for verdadeira, ou seja, se o sensor não for lido corretamente, nós informamos isso no monitor serial. Entretanto, caso essa condição seja falsa, nós enviamos as leituras para o aplicativo através dos comandos Blynk.virtualWrite(V2, temperatura)
e Blynk.virtualWrite(V3, umidade)
.
A função lerAcelerometro()
, por sua vez, é iniciada com a leitura do acelerômetro por meio do comando acelerometro.read()
. Feito isso, nós escrevemos os membros do objeto (acelerometro.x
, acelerometro.y
e acelerometro.z
) nos respectivos pinos virtuais do aplicativo utilizando os comandos Blynk.virtualWrite(V4, acelerometro.x)
, Blynk.virtualWrite(V5, acelerometro.y)
e Blynk.virtualWrite(V6, acelerometro.z)
.
Nas configurações do código, inicializamos o sensor DHT11 com o comando dht.begin()
e o acelerômetro com o comando acelerometro.init()
. Por fim, configuramos os timers do DHT11 e do acelerômetro com com intervalos de 10 segundos e 100 milissegundos, respectivamente, graças aos comandos timerDHT.setInterval(10000L, lerDHT)
e timerAcelerometro.setInterval(100L, lerAcelerometro)
.
A repetição do código possui apenas dois comandos adicionais, o timerDHT.run()
e o timerAcelerometro.run()
, que executam os timers do DHT11 e do acelerômetro, respectivamente.
O Que Deve Acontecer
Após executar o código na placa, inicie a execução do painel do aplicativo, assim você verá que os valores dos "Widgets" começarão a variar com intervalos distintos, exibindo os valores lidos pelos sensores, como na imagem a seguir.
![painel-atualizado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/PAINEL_ATUALIZADO_M.png)
A funcionalidade do terminal ainda está ativa neste código, portanto se você enviar "HIGH" nessa interface, como foi feito na imagem acima, o LED do kit irá acender, como na imagem abaixo.
![led-atualizado](https://s3-sa-east-1.amazonaws.com/robocore-tutoriais/341/LED_Atualizado-min_M.png)
Vale lembrar que você ainda pode apagá-lo enviando a mensagem "LOW", como vimos no tutorial anterior, se quiser.
Conclusão
Neste tutorial aprendemos como desenvolver uma central de monitoramento por Bluetooth, com a leitura de todos os sensores do IoT DevKit para o aplicativo Blynk e o controle remoto do LED pela mesma interface.
Solução de Problemas
Se mesmo seguindo as soluções propostas abaixo você não conseguir solucionar o seu problema, encaminhe um e-mail para suporte@robocore.net para que possamos te ajudar da melhor maneira possível.
Dispositivo "Blynk" não é Apresentado na Lista de Dispositivos Conectáveis
Se mesmo após carregar o código da página o ESP32 não for apresentado com o nome "Blynk" na lista de dispositivos do aplicativo, verifique se a chave de acesso ao seu projeto foi corretamente inserida no código e certifique-se que a conectividade Bluetooth está ativada em seu celular. Além disso, vale lembrar que o celular deve estar desconectado de qualquer outro dispositivo Bluetooth para que ele possa listar dispositivos disponíveis no aplicativo e se conectar ao ESP32.
Dispositivo "Blynk" é Apresentado, mas não se Conecta ao Aplicativo
Se isso ocorrer, verifique a chave de acesso inserida no código, pois ela pode estar incorreta ou incompleta.
Um ou Alguns "Widgets" não estão Funcionando Corretamente
Se um dos "Widgets" não estiver se atualizando com as leituras do respectivo sensor, ou alguns deles estiverem recebendo valores invertidos (valor de umidade sendo exibido no "Widget" de temperatura, e vice versa, por exemplo), verifique a configuração desse "Widget", pois provavelmente o pino virtual dele está configurado incorretamente.