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