#include <WiFi.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <Arduino.h>
#include <freertos/semphr.h>
// Parâmetros blynk
#define BLYNK_TEMPLATE_ID "TMPL2TqWcl0Ir"
#define BLYNK_TEMPLATE_NAME "Projeto 4"
#define BLYNK_AUTH_TOKEN "NRNHRWe9q-FEa9WcqpK9IlNCeds8Q_0i"
#include <BlynkSimpleEsp32.h> // biblioteca do blynk
BlynkTimer timer; //timer para execução periódica do Blynk
SemaphoreHandle_t xMutexLCD;
//Parâmetros da rede
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";// nome da rede wifi virtual (o da sua casa)
char pass[] = ""; // senha
#define Led 26 // pino para ligar LED
#define temp 14 // pino para a temperatura
#define trig 4
#define echo 2
const float BETA = 3950;
float readDistanceCM() {
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
int duration = pulseIn(echo, HIGH);
return duration * 0.034 / 2;
}
BLYNK_WRITE(V1){
int buttonState = param.asInt();
if (buttonState == 0){
digitalWrite(Led, LOW);
} else {
digitalWrite(Led, HIGH);
}
}
void task2(void *pvParameters){
for ( ;; ){
float celsius = 1 / (log(1 / (4095. / analogRead(temp) - 1)) / BETA + 1.0 / 298.15) - 273.15;
if (xSemaphoreTake(xMutexLCD, (TickType_t)10) == pdTRUE){
if (celsius > 37){
Serial.println(celsius);
Blynk.virtualWrite(V2, "Febre T > 37");
} else {
Blynk.virtualWrite(V2, "Temperatura boa");
}
Blynk.virtualWrite(V3, celsius);
vTaskDelay(1000 / portTICK_PERIOD_MS);
xSemaphoreGive(xMutexLCD);
}
vTaskDelay(3000 / portTICK_PERIOD_MS);
}
}
void task3(void *vpParameters){
for ( ;; ){
if (xSemaphoreTake(xMutexLCD, (TickType_t)10) == pdTRUE){
float distance = readDistanceCM();
Serial.print("Dist medida: ");
Serial.println(readDistanceCM());
Blynk.virtualWrite(V0, readDistanceCM());
vTaskDelay(1000 / portTICK_PERIOD_MS);
xSemaphoreGive(xMutexLCD);
}
vTaskDelay(3000 / portTICK_PERIOD_MS);
}
}
void setup() {
Serial.begin(115200);
pinMode(Led, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
xMutexLCD = xSemaphoreCreateMutex();
Blynk.begin(auth, ssid, pass); // inicia blynk
xTaskCreatePinnedToCore(
task2, // nome da função
"Task 2", // nome da tarefa
4000, // Stack size
NULL, // Parâmetros da tarefa
1, // Prioridade
NULL, // Task handle
1 // Núcleo para rodar a tarefa (1)
);
xTaskCreatePinnedToCore(
task3,
"LED",
4000,
NULL,
1,
NULL,
0
);
// timer.setInterval(5000L, função); // chama a função a cada 5s
}
void loop() {
Blynk.run(); // função necessária do Blynk
timer.run(); // reativa o timer caso já tenha disparado
}
//void função(){
// if (isnan(valor)) {
// Serial.println("Falhou ao ler o sensor");
// return;
//}
//Blynk.virtualWrite(V0, valor);
//}