#include <Arduino.h>
//#include <FreeRTOS.h>
//#include <DHT.h>
#include <dht.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#define DHTPIN GPIO_NUM_4
#define DHTTYPE DHT22
const int portaLDR = GPIO_NUM_35;
float temperature = 0.0;
float luz = 0.0;
float ax,ay,az = 0.0;
float gx,gy,gz = 0.0;
int LEDPIN = 2;
String ledState = "OFF";
//prototipos das funcoes
/*
void lerDHT11(void* parametro);
void lerMPU(void* parametro);
void lerBH(void* parametro);
*/
void taskColetaDados(void* parametro);
//void exibirLeitura(void* parametro);
void taskEnviaDados(void* parametro);
//objetos dos sensores
Adafruit_MPU6050 mpu;
//DHT dht(DHTPIN, DHTTYPE);
dht DHT;
//manipuladores das filas
QueueHandle_t LeituraSensores;
typedef char mensagem_t[40];
//config das filas
const uint numeroDeItensDaFila = 5;
const uint tamanhoDeCadaItem = sizeof(mensagem_t) / sizeof(mensagem_t);
void setup() {
pinMode(LEDPIN, OUTPUT);
pinMode(portaLDR, INPUT);
pinMode(DHTPIN, INPUT);
Serial.begin(115200);
Wire.begin();
//Inicializa DHT11
//dht.begin();
// Inicializa servidor
//connectToWifi();
//server.begin();
delay(1000);
//beginServer();
//criacao das filas
LeituraSensores = xQueueCreate(numeroDeItensDaFila, tamanhoDeCadaItem);
//Criacao das tarefas
xTaskCreatePinnedToCore(
taskColetaDados,
"Ler Sensores",
2000,
NULL,
1,
NULL,
APP_CPU_NUM
);
xTaskCreatePinnedToCore(
taskEnviaDados,
"Envia dados",
2000,
NULL,
1,
NULL,
APP_CPU_NUM
);
}
void loop() {
vTaskDelete(NULL);
}
void taskColetaDados(void* parametro){
float h = 0.0, t = 0.0;
float lux = 0.0;
mensagem_t mensagemEnviadaSensores;
while(1){
DHT.read22(DHTPIN);
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
ax = a.acceleration.x;
ay = a.acceleration.y;
az = a.acceleration.z;
gx = g.gyro.x;
gy = g.gyro.y;
gz = g.gyro.z;
luz = analogRead(portaLDR);
vTaskDelay(3000/portTICK_PERIOD_MS);
/*
h = dht.readHumidity();
t = dht.readTemperature();
*/
t = DHT.temperature;
h = DHT.humidity;
temperature = t;
/*
if (isnan(h) || isnan(t)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
*/
Serial.print("Temperatura(°C)/Umidade(%): ");
Serial.print(t);
Serial.print("/");
Serial.println(h);
Serial.print("Luz(lx): ");
Serial.println(lux);
//char msgSens[80] = "%f %f %f %f %f %f %f %f";
sprintf(mensagemEnviadaSensores, "valores: %f %f %f %f %f %f %f %f",ax,gx,ay,gy,az,gz,t,luz);
//mensagemEnviadaSensores = "Funciona";
if(!xQueueSend(LeituraSensores, &mensagemEnviadaSensores, 5000)){
Serial.println("Não foi possível enviar a mensagem, a fila está cheia!");
}
}
}
void taskEnviaDados(void* parametro){
mensagem_t mensagemRecebida;
while(1){
if(xQueueReceive(LeituraSensores, &mensagemRecebida, 5000)){
Serial.println(mensagemRecebida);
}
else{
Serial.println("Nenhuma mensagem disponível na fila.");
}
vTaskDelay(6000/portTICK_PERIOD_MS);
}
}