Monitoramento: Temperatura / Umidade/ CO

 


Para a montagem da ESTAÇÃO DE MONITORAMENTO será necessário seguir os passos descritos abaixo:


1º Passo- MONTAGEM


Para a montagem você precisará dos seguintes materiais:

- esp32;

- Protoboard

- Sensor dht11

- Sensor MQ-7

- Jumpers, conector Macho/Fêmea (quantidade - 4)

- Cabo USB


Segue as imagens do esquema de ligação de cada um dos sensores:


Sensor DHT11



Sensor MQ-7




ATENÇÃO!!!👀👀👀👀


A conexão 3v3 deve ser utilizada apenas pelo sensor DHT11. O sensor MQ-7, para seu pleno funcionamento, necessita de uma alimentação maior, no caso, de 5V .

Para afastar o sensor DHT11 do sensor MQ7 (evitando interferência) utilize um cabo macho x macho a mais para a conexão com o pino D14.



Juntando os SENSORES a ESP32











2º Passo- Inserindo o Código Arduino no IDE


Nesse passo você deve inserir o código disponível abaixo no Arduino IDE.


O Código:


#include <WiFi.h>

#include <PubSubClient.h> //Biblioteca para as publicações via mqtt

#include <Arduino.h>

#include <analogWrite.h>

//constantes

#define WIFISSID "***********"      //"PJ-2.4G" //Coloque seu SSID de WiFi aqui

#define PASSWORD "***********"   //"3020151050" //Coloque sua senha de WiFi aqui

#define TOKEN "BBFF-h5fV31ikcL9pIaaVH3Auo0uskJ3O3x" //Coloque seu TOKEN do Ubidots aqui

#define VARIABLE_LABEL_TEMPERATURE "temperatura" //Label referente a variável de temperatura criada no ubidots

#define VARIABLE_LABEL_HUMIDITY "umidade" //Label referente a variável de umidade criada no ubidots

#define VARIABLE_LABEL_CO "ppmCO" //Label referente a variável de ppm de CO criada no ubidots

#define DEVICE_ID "5fcc008b1d84726760589fe8" //ID do dispositivo (Device id, também chamado de client name)

#define SERVER "things.ubidots.com" //Servidor do Ubidots (broker)

//Porta padrão

#define PORT 1883

//Tópico aonde serão feitos os publish, "esp32-dht" é o DEVICE_LABEL

#define TOPIC "/v1.6/devices/dispositivo_Temperatura_Umidade_CO"

//Objeto WiFiClient usado para a conexão wifi

WiFiClient ubidots;

//Objeto PubSubClient usado para publish–subscribe

PubSubClient client(ubidots);

/****************************************

 * Fim conexão com o wifi

 ****************************************/

/****************************************

 * Inicio configuração do Sensor

 ****************************************/

//Incluindo a biblioteca do sensor de umidade e temperatura

#include "DHT.h"

//definindo o pino em que o sensor está instalado na protoboard

#define DHTPIN 14    

// Definindo o tipo de sensor a ser usado

#define DHTTYPE DHT11   // DHT 11

//enviando o pino e tipo de sensor para biblioteca

DHT dht(DHTPIN, DHTTYPE);

//criando as variávies do sensor

float temperatura; //Temperatura que será obtida pelo sensor DHT11

float umidade; //Umidade que será obtida pelo sensor DHT11

float Fahrenheit; //O grau Fahrenheit (° F) é umaunidade de medida da grandeza temperatura

float ppmCO; //ppm da leitura do monoxido de carbono

/****************************************

 * Fim sensor

 ****************************************/

//código para monitorar o monoxido de carbono

float RS_gas = 0;

float ratio = 0;

float sensorValue = 0;

float sensor_volt = 0;

float R0 = 20500.0;

int pinoCO = 34;

//fim

void reconnect(){

  //Loop até que o MQTT esteja conectado

  while (!client.connected())  {

    Serial.println("Tentando conexão MQTT...");

    //Tenta conectar

    if (client.connect(DEVICE_ID, TOKEN,""))

      Serial.println("conectado");

    else {

      Serial.print("Falhou, rc=");

      Serial.print(client.state());

      Serial.println("tente novamente em 2 segundos");

      //Aguarda 2 segundos antes de retomar

      delay(2000);

    }

  }

}

bool mqttInit(){

  //Inicia WiFi com o SSID e a senha

  WiFi.begin(WIFISSID, PASSWORD);

  //Loop até que o WiFi esteja conectado

  while (WiFi.status() != WL_CONNECTED){

    delay(1000);

    Serial.println("Estabelecendo conexão com WiFi..");

  }

  //Exibe no monitor serial

  Serial.println("Conectado à rede");

  //Seta servidor com o broker e a porta

  client.setServer(SERVER, PORT);

  //Conecta no ubidots com o Device id e o token, o password é informado como vazio

  while(!client.connect(DEVICE_ID, TOKEN, "")){

      Serial.println("MQTT - Erro na conexão");

      return false;

  }

  Serial.println("MQTT - Conexão ok");

  return true;

}

//Envia valores por mqtt

//Exemplo: {"temperature":{"value":24.50, "context":{"temperature":24.50, "humidity":57.20}}}

bool sendValues(float temperatura, float umidade, float ppmCO){

  char json[250];

  //Atribui para a cadeia de caracteres "json" os valores referentes a temperatura e os envia para a variável do ubidots correspondente

  sprintf(json,  "{\"%s\":{\"value\":%02.02f, \"context\":{\"temperatura\":%02.02f, \"umidade\":%02.02f, \"ppmCO\":%02.02f}}}", VARIABLE_LABEL_TEMPERATURE, temperatura, temperatura, umidade, ppmCO); 

  if(!client.publish(TOPIC, json))

    return false;

    //Atribui para a cadeia de caracteres "json" os valores referentes a umidade e os envia para a variável do ubidots correspondente

  sprintf(json,  "{\"%s\":{\"value\":%02.02f, \"context\":{\"temperatura\":%02.02f, \"umidade\":%02.02f, \"ppmCO\":%02.02f}}}", VARIABLE_LABEL_CO, ppmCO, temperatura, umidade, ppmCO);    

  if(!client.publish(TOPIC, json))

    return false;

  //Atribui para a cadeia de caracteres "json" os valores referentes a umidade e os envia para a variável do ubidots correspondente

  sprintf(json,  "{\"%s\":{\"value\":%02.02f, \"context\":{\"temperatura\":%02.02f, \"umidade\":%02.02f, \"ppmCO\":%02.02f}}}", VARIABLE_LABEL_HUMIDITY, umidade, temperatura, umidade, ppmCO); 

  if(!client.publish(TOPIC, json))

    return false;

  //Se tudo der certo retorna true

  return true;

}

//criando a função de monitoramento do monóxido de carbono

 

//fim

 

//função de configuração do ambiente

void setup() {

  //Inicializando o serial

  Serial.begin(115200);

  //escrevendo uma mensagem de teste

  Serial.println("DHTxx test!");

  //inicializando a biblioteca do sensor

  dht.begin();

  //configurando mqtt

  Serial.println("configurando mqtt...");

  //Inicializa mqtt (conecta o esp com o wifi, configura e conecta com o servidor da ubidots)

  if(!mqttInit()){       

    delay(3000);

    Serial.println("Conexão Falhou!");

  }

  Serial.println("OK");

 

}

void monoxidoCarbono(){

    //Se o esp foi desconectado do ubidots, tentamos reconectar

   sensorValue = analogRead(pinoCO);

   Serial.print("pinoCO: ");

   Serial.println(sensorValue);

   sensor_volt = sensorValue/4096*5.0;

   Serial.print("sensor_volt: ");

   Serial.println(sensor_volt); 

   RS_gas = (5.0-sensor_volt)/sensor_volt;

   ratio = RS_gas/R0; //Replace R0 with the value found using the sketch above

   float x = 1538.46 * ratio;

   float ppm = pow(x,-1.709);

   ppmCO = ppm;

   Serial.print("PPM: ");

   Serial.println(ppm);

}

//Obtém temperatura e umidade do sensor

void getClimate(){ 

  //fazendo a leitura da umidade e temperatura,

  //o sensor leva cerca de 250 milissegundos para dar resposta

  //leitura da umidade do sensor DHT11

  umidade = dht.readHumidity();

  //leitura da temperatura do sensor DHT11

  temperatura = dht.readTemperature();

  //dizendo em qual unidade nós queremos receber os dados de temperatura

  Fahrenheit = dht.readTemperature(true);

  // checando se alguma leitura fallhou, se sim retorna para refazer o processo

  if (isnan(umidade) || isnan(temperatura) || isnan(Fahrenheit)) {

    //mensagem para sabermos se houve erro

    Serial.println("Erro na leitura do sensor DHT11!");

    //retorna ao inicio da função

    return;

  }

  //escrevendo os dados obtidos do sensor

  Serial.print("Umidade: ");

  Serial.print(umidade);

  Serial.print("%  Temperatura: ");

  Serial.print(temperatura);

  Serial.print("°C ou ");

  Serial.print(Fahrenheit);

  Serial.println("°F");

}

//função de atualização dos dados

void loop() {

  

  if(!client.connected())

    reconnect();

  //umidade e temperatura

  getClimate();

  //monoxido de carbono

  monoxidoCarbono();

  //Esperamos 2.5s antes de exibir o status do envio para dar efeito de pisca no display

  delay(2500);

  if(sendValues(temperatura, umidade, ppmCO)){     

    Serial.println("Dados enviados com sucesso");

  }else{     

    Serial.println("O envio de dados falhou");

  }    

  //espera 30 min

  delay(60000);

}


Após inserido, faça uma verificação do código e carregue no Arduino IDE, como mostra a imagem abaixo:





SE LIGA NESSA DICA IMPORTANTE!!!

👇👇👀👀👀👀👇👇




Após a verificação de todos os detalhes, veja como fica a execução do código no monitor serial do ARDUINO




Agora é só você acessar a sua conta no UBIDOTS (crie/atualize seus dispositivos) e acompanhe a publicação dos dados!😉





Veja o vídeo de como deve ficar 👇👇👇👇



👏👏😉😉👏👏


Nenhum comentário:

Postar um comentário