Etapa 1 - Preparação do Material
ITENS NECESSÁRIOS: - esp32; - Protoboard; - Sensor MQ - 7; - Sensor dht11; - Cabo usb; - Jumpers, conector Macho/Fêmea; Quantidade (1) - Jumpers, conector Macho/Macho; Quantidade (5)Etapa 2 - Ligação da Placa e dos Sensores Arduíno (Circuito - Imagem 1 .
Etapa 3 - Verificação e instalação das bibliotecas.
No Programa Arduíno siga os seguintes passos: Biblioteca - Abrir - libraries Verifique se todas estas bibliotecas estão instaladas, caso alguma não esteja faça a instalação.Etapa 4 - Criação do Código de monitoramento.
Copie o código abaixo e cole no programa arduíno. Após copiar o código não esqueça de compilar.#include <WiFi.h>
#include <PubSubClient.h>
//Biblioteca para as publicações via mqtt
#include <Arduino.h>
#include <analogWrite.h>
//constantes
#define WIFISSID
"***********" //"Manuca" //Coloque seu
SSID de WiFi aqui
#define PASSWORD
"***********" //"W3571113" //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);
}
Nenhum comentário:
Postar um comentário