-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMQTT.ino
167 lines (136 loc) · 4.5 KB
/
MQTT.ino
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
#include <WiFi.h>
#include <PubSubClient.h>
#include <Ultrasonic.h>
#include <DHT.h>
// Credenciais da rede Wi-Fi
const char* ssid = "Jovino";
const char* password = "benicio123";
// Endereço do servidor MQTT
const char* mqtt_server = "broker.hivemq.com";
// Objetos para gerenciar a conexão Wi-Fi e MQTT
WiFiClient espClient;
PubSubClient client(espClient);
// Variável para controle do tempo da última mensagem
unsigned long lastMsg = 0;
// Buffer para armazenar as mensagens MQTT
#define MSG_BUFFER_SIZE (50)
char msg[MSG_BUFFER_SIZE];
// Pinos para o sensor ultrassônico
int echo = 12;
int trig = 14;
// Objeto do sensor ultrassônico
Ultrasonic ultrassom(trig, echo);
// Pino para o LED
int pin_led = 2;
// Variáveis para medição e controle do sensor ultrassônico
unsigned long tempo;
float distancia;
float Tmax = 50;
// Configuração do sensor DHT
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Função para configurar a conexão Wi-Fi
void setup_wifi() {
delay(10);
// Configuração do modo Wi-Fi e início da conexão
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// Aguarda até a conexão ser estabelecida
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
// Inicialização da semente para geração de números aleatórios
randomSeed(micros());
}
// Função para reconectar ao servidor MQTT em caso de desconexão
void reconnect() {
while (!client.connected()) {
// Geração de um ID de cliente único
String clientId = "JOVINO_MQTT";
clientId += String(random(0xffff), HEX);
// Tenta reconectar ao servidor MQTT
if (client.connect(clientId.c_str())) {
// Subscreve ao tópico para receber mensagens
client.subscribe("jovino/publisher");
} else {
// Aguarda antes de tentar novamente
delay(5000);
}
}
}
// Função para realizar a leitura do sensor ultrassônico e publicar a distância no tópico MQTT
void ultrassonico() {
distancia = ultrassom.Ranging(CM);
// Cálculo da percentagem em relação à distância máxima
float percentMax = (distancia / Tmax) * 100;
// Formatação da mensagem e publicação no tópico MQTT
sprintf(msg, "%f", percentMax);
client.publish("jovino/sommm", msg);
delay(100);
}
// Callback chamada quando uma mensagem MQTT é recebida
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mensagem recebida [");
Serial.print(topic);
Serial.print("] ");
// Impressão do conteúdo da mensagem recebida
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// Controle do LED com base na mensagem recebida
if ((char)payload[0] == 'L') {
digitalWrite(pin_led, HIGH);
snprintf (msg, MSG_BUFFER_SIZE, "O LED está aceso");
Serial.print("Publica mensagem: ");
Serial.println(msg);
client.publish("jovino/led", msg);
}
if ((char)payload[0] == 'l') {
digitalWrite(pin_led, LOW);
snprintf (msg, MSG_BUFFER_SIZE, "O LED está apagado");
Serial.print("Publica mensagem: ");
Serial.println(msg);
client.publish("jovino/led", msg);
}
}
// Função para realizar a leitura do sensor DHT e publicar umidade e temperatura nos tópicos MQTT correspondentes
void umidade_temp() {
// Leitura da umidade
float umidade = dht.readHumidity();
// Formatação da mensagem e publicação no tópico MQTT
sprintf(msg, "%f", umidade);
client.publish("jovino/umidade", msg);
// Leitura da temperatura e cálculo do índice de calor
float temperatura = dht.readTemperature();
float hic = dht.computeHeatIndex(temperatura, umidade, false);
// Formatação da mensagem e publicação no tópico MQTT
sprintf(msg, "%f", hic);
client.publish("jovino/temperatura", msg);
}
// Configurações iniciais: pinos, conexão Wi-Fi e servidores MQTT
void setup() {
// Configuração dos modos dos pinos
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(pin_led, INPUT);
// Configuração da conexão Wi-Fi, do servidor MQTT e do callback
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
// Loop principal: leitura dos sensores, verificação da conexão MQTT e execução do loop do cliente MQTT
void loop() {
// Leitura do sensor ultrassônico
ultrassonico();
// Leitura do sensor DHT
umidade_temp();
// Verificação da conexão MQTT e execução do loop do cliente MQTT
if (!client.connected()) {
reconnect();
}
client.loop();
// Aguarda antes de realizar a próxima iteração do loop
delay(500);
}