Manual
do
Maker
.
com
Acabei de ver a necessidade em um grupo. Pode ser que, apesar de relatado nesse outro artigo, ainda não tenha ficado claro como enviar dados de um sensor para o Blynk no smartphone. Por essa razão, resolvi colocar mais um exemplo, bem direto agora, mas não se esqueça que sempre é possível pegar um exemplo no site oficial.
Vamos tentar idealizar o funcionamento do Blynk. Se você tem algum conhecimento de MQTT, fica mais fácil ainda. Aqui no site tem "diversos" artigos a respeito, pode digitar no Google "MQTT dobitaobyte" e divirta-se.
Basicamente a comunicação se dá através de um broker; o broker é apenas um intermediário, um concentrador de mensagens. O que sua MCU manda para lá, pode ser lido por qualquer outro dispositivo ou pelo app do Blynk.
O MQTT é um protocolo M2M (Machine to Machine). A grande sacada do Blynk é que ele usa um token; todos que estiverem usando aquele token, tem acesso às mesmas informações. Daí no app ou no programa da MCU resta manipular essa informação.
Quando se usa Blynk, é possível trabalhar de duas maneiras; o programa da MCU pode enviar periodicamente (através de timer próprio, "sempre") ou o programa da MCU pode enviar quando for requisitado através de um pino virtual. Vamos ver como o dispositivo ficaria enviando esses dados periodicamente.
Como citado anteriormente, o processo deve acontecer através de um timer, para não ser desconectado do servidor. Abaixo, o código de um sensor bmp280 enviando a temperatura para o broker. No caso, o broker foi configurado localmente, e como vantagem tenho 100.000 de energia para os projetos.
#include <Wire.h>
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <string.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define BLYNK_PRINT Serial
#define BLYNK_DEBUG 1
Adafruit_BMP280 bme; //instância do bmp280
BlynkTimer timer; //timer do blynk para enviar periodicamente a temperatura
float f_temp = 0.0; //armazenador global da temperatura
char auth[] = "seu_token_aqui";
//endereço do servidor local
#define SRV IPAddress(192,168,1,2)
char ssid[] = "seu_ssid";
char pass[] = "sua_senha";
//task do ESP32 para controlar o blynk
void vTaskBlynk(void *pvParameters){
while (true){
Blynk.run();
timer.run();
delay(100); //se não colocar delay, a MCU será totalmente ocupada e reiniciará
}
}
void teste(){
String s_temp = String(f_temp); //se quiser converter float p/ string
Serial.println(s_temp);
Blynk.virtualWrite(V1,f_temp); //pino virtual V1
uint8_t relay_1 = digitalRead(25); //le estado dos relés
uint8_t relay_2 = digitalRead(32); //...
if (relay_1 < 1){ //logica invertida
Blynk.virtualWrite(V0,1); //.ligado, se for 0
}
else{
Blynk.virtualWrite(V0,0);
}
if (relay_2 < 1){
Blynk.virtualWrite(V2,1);
}
else{
Blynk.virtualWrite(V2,0);
}
}
void setup()
{
pinMode(25, OUTPUT);
pinMode(32,OUTPUT);
digitalWrite(25,HIGH); //logica invertida
digitalWrite(32,HIGH);
// Debug console
Serial.begin(115200);
Serial.println("###################");
delay(5000);
if (!bme.begin(0x76)){
Serial.println("BMP280 isn't started. locking here.");
while (true);
}
Blynk.begin(auth, ssid, pass,SRV,8080);
timer.setInterval(2000L, teste); //1 temp a cada 2 segundos
delay(2000);
xTaskCreatePinnedToCore(vTaskBlynk, "vTaskBlynk", 10000, NULL, 0, NULL,0); //inicia a task
}
void loop()
{
//leitura periódica de temperatura para a variável global f_temp
f_temp = bme.readTemperature();
delay(999);
}
Nesse código, está claro que tem um timer na MCU, enviando dados para os pinos virtuais V0, V1 e V2. Desse modo, basta adicionar seu widget desejado e na configuração do pino adicionar Virtual e o pino correspondente para ler o dado enviado. E pode ter mais de um widget lendo o mesmo pino virtual, sem problemas:
Os estados dos pinos dos relés são lidos lá na MCU e conforme o resultado uma informação é enviada para o broker no tópico V0 e V2.
No gráfico estão sendo plotados os valores da leitura do sensor. Poderia ser qualquer sensor, poderia ser analógico, não importa. Seu código continua sendo o mesmo, apenas adiciona-se a manipulação do resultado desse sensor.
Talvez o artigo tenha ficado meio parco, mas acredito que seja informação suficiente para tirar aquela primeira dúvida quem vem na cabeça quando não estamos habituados à uma novidade específica.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.