#include <ArduinoJson.h>
#include "MQTTCliente.h"
#include "SensorDHT.h"
#include "SensorDistancia.h"
#include "WifiCliente.h"
#define VERBOSE true
const unsigned int FEEDBACK_LED = 2;
WifiCliente wifiCliente(VERBOSE);
const char* MQTT_BROKER = "broker.hivemq.com";
MQTTCliente mqttCliente(MQTT_BROKER, VERBOSE);
// TODO: fazer uma configuração inicial para setar tamanho máximo de abertura da janela.
// Sugestão: ao iniciar, não enviar nenhum dado, entrar em modo de configuração.
// Essa configuração seria indicada por um led piscando (pode ser o do próprio arduino).
// Led acesso significa configuração feita com sucesso.
// Led apagado significa falha. Exemplo: timeout.
// Para realizar a configuração deve-se abrir a janela ao máximo e então apertar um botão.
// Ao apertar o botão, deve ser lido a distância e assim ser salvo a distância máxima numa variável global.
const float ABERTURA_MAXIMA_JANELA_CM = 60;
const unsigned int TRIGGER_PIN_SENSOR_DISTANCIA = 13;
const unsigned int ECHO_PIN_SENSOR_DISTANCIA = 12;
SensorDistancia sensorDistanciaJanela(TRIGGER_PIN_SENSOR_DISTANCIA, ECHO_PIN_SENSOR_DISTANCIA, VERBOSE);
const unsigned int DHT_PIN = 4;
SensorDHT sensorDHT(DHT_PIN, VERBOSE);
boolean houveErroInesperado = false;
void setup() {
Serial.begin(115200);
pinMode(FEEDBACK_LED, OUTPUT);
wifiCliente.conectar();
if (!wifiCliente.estaConectado()) {
feedbackDeError();
return;
}
mqttCliente.conectar();
if (!mqttCliente.estaConectado()) {
feedbackDeError();
return;
}
}
void feedbackDeError() {
houveErroInesperado = true;
digitalWrite(FEEDBACK_LED, HIGH);
}
void loop() {
if (houveErroInesperado) {
delay(20000);
return;
}
mqttCliente.loop();
float aberturaJanelaCm = sensorDistanciaJanela.lerDistancia();
float temperatura = sensorDHT.lerTemperatura();
publicarDadoProBroker(ABERTURA_MAXIMA_JANELA_CM, aberturaJanelaCm, temperatura);
delay(4000);
// delay(2000);
}
void publicarDadoProBroker(const float aberturaMaximaJanelaCM, const float aberturaJanelaCm, const float temperatura) {
DynamicJsonDocument jsonDoc(128);
jsonDoc["aberturaMaximaJanelaCM"] = aberturaMaximaJanelaCM;
jsonDoc["aberturaJanelaCm"] = aberturaJanelaCm;
jsonDoc["temperatura"] = temperatura;
mqttCliente.publicarDadoJSON(jsonDoc);
}