,/*
* Lib Arduino;
*/
#include <Arduino.h>
/*
* Lib C;
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*
* FreeRtos;
*/
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "freertos/queue.h"
/*
* Lib DHT;
*/
#include "dht.h"
/*
* GPIO de configuração SDA do DHT;
*/
#define DHT_PIN_SDA 17
#define DHT_DELAY_ENTRE_AMOSTRAS 5000 /* ms */
/*
* Define o modelo do sensor DHT a ser utilizado:
* DHT_TYPE_AM2301 -> DHT22
* DHT_TYPE_DHT11 -> DHT11
*/
static const dht_sensor_type_t sensor_type = DHT_TYPE_AM2301;
static const gpio_num_t dht_gpio = (gpio_num_t)DHT_PIN_SDA;
/*
* Tarefa responsável em ler o valor de temperatura e umidade do sensor DHT;
* O valor de leitura é transmitido pela Uart0 do ESP32 a 115200 bps;
*/
void vtask_dht (void *pvParameters)
{
int16_t temperature = 0;
int16_t humidity = 0;
/*
* Configura a GPIO do ESP32 (a qual realiza a leitura dos sinais) como entrada;
*/
gpio_set_pull_mode(dht_gpio, GPIO_PULLUP_ONLY);
for (;;)
{
if(dht_read_data(sensor_type, dht_gpio, &humidity, &temperature) == ESP_OK)
{
Serial.printf("Temperatura: %.2f°C, Umidade: %.2f%%\n",
(float)(temperature / 10.0), (float)(humidity / 10.0));
} else {
Serial.printf("erro na leitura do sensor..\n");
}
/*
* Intervalo entre amostras;
*/
vTaskDelay(DHT_DELAY_ENTRE_AMOSTRAS/portTICK_PERIOD_MS);
}
}
/**
* Task principal;
*/
void setup(void)
{
Serial.begin(115200);
if(xTaskCreate (vtask_dht, "vtask_dht", 1024*5, NULL, 2, NULL) != pdPASS) {
return;
}
}
/**
* Task loop;
*/
void loop(void)
{
vTaskDelay(1000/portTICK_PERIOD_MS);
}