-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsketch.ino
More file actions
174 lines (148 loc) · 6.03 KB
/
Copy pathsketch.ino
File metadata and controls
174 lines (148 loc) · 6.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/*
------------------ FIAP --------------------
CHECKPOINT 5
EDGE COMPUTING & COMPUTER SYSTEMS
Participantes:
Prof. Paulo Marcotti PF2150
Arthur Cotrick Pagani RM554510
Diogo Leles Franciulli RM558487
Felipe Sousa de Oliveira RM559085
Ryan Brito Pereira Ramos RM554497
--------------------------------------------
PROJETO: Monitoramento de Temperatura, Umidade, Luminosidade e Controle de LED via MQTT e Fiware
Descrição:
Este projeto utiliza um ESP32 para monitorar e publicar dados de temperatura, umidade e luminosidade em um broker MQTT
(via Ubuntu, em uma máquina virtual em uma instância EC2 na AWS). Além disso, o sistema permite controlar o estado de
um LED remotamente através de um tópico MQTT. Os componentes utilizados são o sensor de temperatura e umidade DHT22, um
sensor de luminosidade LDR e um LED. A comunicação é realizada via protocolo MQTT, através do Fiware.
Componentes do Sistema:
1. ESP32 - Microcontrolador que gerencia a leitura dos sensores e a comunicação MQTT.
2. DHT22 - Sensor de temperatura e umidade que envia os valores lidos para tópicos MQTT.
3. LDR (Sensor de Luminosidade) - Mede a intensidade de luz e envia o valor para um tópico MQTT.
4. LED - Controlado remotamente via MQTT. Pode ser ligado ou desligado ao receber comandos.
Tópicos MQTT Utilizados:
1. /iot/temperature - Publica a temperatura lida pelo sensor DHT22.
2. /iot/humidity - Publica a umidade relativa lida pelo sensor DHT22.
3. /iot/luminosity - Publica o valor de luminosidade lido pelo sensor LDR.
4. /iot/led - Tópico utilizado para controlar o LED.
- Publicar "on" para ligar o LED.
- Publicar "off" para desligar o LED.
Funcionamento:
1. O ESP32 conecta-se a uma rede Wi-Fi e ao broker MQTT, uma máquina virtual com Ubuntu, rodando o Fiware.
2. Ele realiza leituras a cada segundo da temperatura, umidade e luminosidade, publicando os valores nos respectivos tópicos MQTT.
3. Através do tópico /iot/led, é possível enviar comandos para ligar ou desligar o LED remotamente.
4. O sistema pode ser monitorado e controlado através de qualquer aplicativo cliente MQTT, como o MyMQTT.
Objetivos:
- Monitorar remotamente a temperatura, umidade e luminosidade de um ambiente.
- Controlar o LED remotamente através de uma interface MQTT.
Referências:
https://github.com/fabiocabrini/fiware
https://youtu.be/X7xwvKdaWqk?si=sMg1QUG8rcGMZNJ3
https://youtu.be/q6b1f2CAmno?si=h6AGmgleTCZd_HY-
Revisões:
- Versão 1.0 - 20/10/2024 - Ryan - Implementação inicial do sistema.
*/
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#define DHTPIN 21 // Pino do sensor DHT
#define DHTTYPE DHT22 // Tipo de sensor DHT **OBS: TROCAR PELO DHT11 NO DIA DO CHECKPOINT!!!**
#define LED_PIN 2 // Pino do LED
#define LDR_PIN 34 // Pino do LDR (sensor de luminosidade)
// Informações da rede Wi-Fi
const char* SSID = ""; // Nome da rede Wi-Fi
const char* PASSWORD = ""; // Senha da rede Wi-Fi
// Informações do Broker MQTT
const char* BROKER_MQTT = ""; // IP do Broker MQTT **OBS: PODE MUDAR AO INICIAR A INSTÂNCIA NOVAMENTE!!!**
const int BROKER_PORT = 1883; // Porta do Broker MQTT
const char* TOPICO_SUBSCRIBE_LED = "/iot/led"; // Tópico para controle do LED
const char* TOPICO_PUBLISH_TEMP = "/iot/temperature"; // Tópico para enviar temperatura
const char* TOPICO_PUBLISH_HUMI = "/iot/humidity"; // Tópico para enviar umidade
const char* TOPICO_PUBLISH_LUX = "/iot/luminosity"; // Tópico para enviar luminosidade
const char* ID_MQTT = "fiware_001"; // ID MQTT
WiFiClient espClient;
PubSubClient MQTT(espClient);
DHT dht(DHTPIN, DHTTYPE);
// Função de verificação da conexão Wi-Fi
void initWiFi() {
Serial.print("Conectando ao WiFi");
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println(" Conectado!");
}
// Função de verificação da conexão ao Broker MQTT
void initMQTT() {
MQTT.setServer(BROKER_MQTT, BROKER_PORT);
MQTT.setCallback(mqtt_callback);
}
// Função chamada quando uma mensagem é recebida no MyMQTT
void mqtt_callback(char* topic, byte* payload, unsigned int length) {
String msg;
for (int i = 0; i < length; i++) {
msg += (char)payload[i];
}
Serial.print("Mensagem recebida no tópico ");
Serial.print(topic);
Serial.print(": ");
Serial.println(msg);
// Controle do LED via MyMQTT
if (msg == "on") {
digitalWrite(LED_PIN, HIGH);
} else if (msg == "off") {
digitalWrite(LED_PIN, LOW);
}
}
// Função para verificar a conexão ao Wi-Fi e MQTT
void VerificaConexoesWiFIEMQTT() {
if (WiFi.status() != WL_CONNECTED) {
initWiFi();
}
if (!MQTT.connected()) {
while (!MQTT.connected()) {
Serial.print("Conectando ao broker MQTT...");
if (MQTT.connect(ID_MQTT)) {
Serial.println(" Conectado ao broker MQTT!");
MQTT.subscribe(TOPICO_SUBSCRIBE_LED);
} else {
Serial.print("Falha ao conectar. Erro: ");
Serial.println(MQTT.state());
delay(2000);
}
}
}
}
// Publicar dados dos sensores no MyMQTT
void publishSensorData() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int ldrValue = analogRead(LDR_PIN);
int luminosity = map(ldrValue, 0, 4095, 0, 100); // Mapeia o valor do LDR para 0-100%
// Publicar temperatura, umidade e luminosidade
MQTT.publish(TOPICO_PUBLISH_TEMP, String(temperature).c_str());
MQTT.publish(TOPICO_PUBLISH_HUMI, String(humidity).c_str());
MQTT.publish(TOPICO_PUBLISH_LUX, String(luminosity).c_str());
// Log no Monitor Serial
Serial.print("Temperatura: ");
Serial.println(temperature);
Serial.print("Umidade: ");
Serial.println(humidity);
Serial.print("Luminosidade: ");
Serial.println(luminosity);
}
void setup() {
Serial.begin(115200); // **OBS: CONFIGURAR VELOCIDADE DE BAUDRATE PARA 115200!!!**
pinMode(LED_PIN, OUTPUT);
pinMode(LDR_PIN, INPUT);
dht.begin();
initWiFi();
initMQTT();
}
void loop() {
VerificaConexoesWiFIEMQTT();
publishSensorData();
MQTT.loop();
delay(1000); // Aguarda 1 segundos entre cada envio de dados
}