-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGAVETAS.ino
138 lines (111 loc) · 4.32 KB
/
GAVETAS.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
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoJson.h>
// Configurações de rede Wi-Fi
const char* ssid = "HackaTruckIoT";
const char* password = "iothacka";
// Instância do servidor HTTP
ESP8266WebServer server(80);
// Pinos dos LEDs das gavetas
const int ledPins[] = {D0, D1, D2, D3, D4}; // GPIOs dos LEDs de cada gaveta
const int deviceLedPin = D6; // GPIO para o LED que indica o estado do dispositivo
// Array para armazenar o estado de cada gaveta (LED)
bool gavetasState[sizeof(ledPins) / sizeof(ledPins[0])];
void setup() {
Serial.begin(115200);
// Conectar na rede Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando...");
}
Serial.println("Conectado!");
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
// Configura os pinos dos LEDs das gavetas como saída
for (int i = 0; i < sizeof(ledPins) / sizeof(ledPins[0]); i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // Começar com todos os LEDs apagados
gavetasState[i] = false; // Inicializar estado das gavetas
}
// Configura o pino do LED do dispositivo como saída
pinMode(deviceLedPin, OUTPUT);
digitalWrite(deviceLedPin, HIGH); // Liga o LED D6 ao iniciar o dispositivo
// Iniciar o servidor
server.begin();
// Rota para ligar/desligar gavetas específicas
server.on("/ligarGaveta", HTTP_POST, []() {
if (!server.hasArg("plain")) {
server.send(400, "text/plain", "Body ausente");
return;
}
String body = server.arg("plain");
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, body);
if (error) {
server.send(400, "text/plain", "Erro de parsing no JSON");
return;
}
// Pegar o array de índices das gavetas que devem ser ligadas
JsonArray gavetaIndices = doc["gavetas"].as<JsonArray>();
// Validar se o array de gavetas tem de 1 a 4 elementos
if (gavetaIndices.size() < 1 || gavetaIndices.size() > 5) {
server.send(400, "text/plain", "O array de gavetas deve conter entre 1 e 5 índices");
return;
}
// Primeiro, desligar todas as gavetas
for (int i = 0; i < sizeof(ledPins) / sizeof(ledPins[0]); i++) {
digitalWrite(ledPins[i], LOW); // Desligar todas as gavetas
gavetasState[i] = false; // Atualizar o estado
}
// Loop através do array de índices e ligar as gavetas especificadas
for (JsonVariant var : gavetaIndices) {
int gavetaIndex = var.as<int>();
if (gavetaIndex >= 0 && gavetaIndex < (sizeof(ledPins) / sizeof(ledPins[0]))) {
digitalWrite(ledPins[gavetaIndex], HIGH); // Ligar o LED
} else {
server.send(400, "text/plain", "Índice de gaveta inválido");
return;
}
}
delay(5000);
for (JsonVariant var : gavetaIndices) {
int gavetaIndex = var.as<int>();
if (gavetaIndex >= 0 && gavetaIndex < (sizeof(ledPins) / sizeof(ledPins[0]))) {
digitalWrite(ledPins[gavetaIndex], LOW); // Ligar o LED
} else {
server.send(400, "text/plain", "Índice de gaveta inválido");
return;
}
}
// Resposta para o cliente
server.send(200, "text/plain", "Gavetas ligadas");
});
// Rota para ativar/desativar o LED do dispositivo (D6)
server.on("/ativarGaveta", HTTP_POST, []() {
if (!server.hasArg("plain")) {
server.send(400, "text/plain", "Body ausente");
return;
}
String body = server.arg("plain");
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, body);
if (error) {
server.send(400, "text/plain", "Erro de parsing no JSON");
return;
}
// Verifica se o dispositivo deve ser ligado ou desligado
bool ligar = doc["ligar"];
Serial.print("Ativar LED D6: ");
Serial.println(ligar);
digitalWrite(deviceLedPin, ligar ? HIGH : LOW); // Liga ou desliga o LED D6
// Responde ao cliente se ativado ou desativado
server.send(200, "text/plain", ligar ? "Gaveteiro conectado!" : "LED D6 desativado");
});
server.on("/estadoGaveta", HTTP_GET, [](){
server.send(200, "text/plain", (digitalRead(deviceLedPin) == HIGH) ? "Gaveteiro ligado!" : "Gaveteiro desligado!");
});
}
void loop() {
server.handleClient(); // Mantém o servidor HTTP funcionando
}