#include <WiFi.h>
//#include <WiFiClientSecure.h>
//#include <PubSubClient.h>
#include <LiquidCrystal.h>
// Credenciais WiFi
/*
const char* ssid = "Starlink_CIT";
const char* password = "Ufrr@2024Cit";
*/
// Detalhes do Broker MQTT
const char* mqtt_broker = ""; // Alterar para o seu broker
const char* topic = "AcPA"; // Tópico base
const char* mqtt_username = ""; // Seu nome de usuário MQTT
const char* mqtt_password = ""; // Sua senha MQTT
const int mqtt_port = 8883; // Porta SSL/TLS
//WiFiClientSecure espClient; // Cliente WiFi com suporte SSL/TLS
//PubSubClient client(espClient);
// LCD Setup
const int rs = 19, en = 23, d4 = 18, d5 = 17, d6 = 16, d7 = 15;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Pinos de LEDs e Potenciômetros
const int ledVer1 = 13, ledVer2 = 12, ledVer3 = 14, ledVer4 = 27, ledVermelho = 26;
const int potPeso = 34, potFreqRes = 35, potFreqCar = 32, potTemp = 33;
/*
void setup_wifi() {
delay(10);
WiFi.begin(ssid, password);
Serial.print("Conectando-se ao WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi conectado");
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* message, unsigned int length) {
String messageTemp;
for (int i = 0; i < length; i++) {
messageTemp += (char)message[i];
}
// Lógica para processar mensagens recebidas (se necessário)
}
*/
/*
void reconnect() {
while (!client.connected()) {
Serial.print("Tentando reconectar ao MQTT...");
if (client.connect("ESP32Client", mqtt_username, mqtt_password)) {
Serial.println("Conectado ao MQTT");
client.subscribe(topic);
} else {
Serial.print("Falha na reconexão. Código de erro: ");
Serial.println(client.state());
delay(10000); // Aumenta o intervalo de espera entre tentativas
}
}
}
*/
void setup() {
// Inicializa a comunicação serial
Serial.begin(115200);
//setup_wifi(); // Conectar ao Wi-Fi
// Configurações do MQTT
//espClient.setInsecure();
//client.setServer(mqtt_broker, mqtt_port);
//client.setCallback(callback);
// Inicializa o LCD
lcd.begin(20, 4);
lcd.print("Inicializando...");
lcd.clear();
// Configuração dos LEDs
int leds[] = {ledVer1, ledVer2, ledVer3, ledVer4, ledVermelho};
for (int i = 0; i < 5; i++) {
pinMode(leds[i], OUTPUT);
digitalWrite(leds[i], LOW); // Desliga todos os LEDs inicialmente
}
}
void loop() {
/*
if (!client.connected()) {
reconnect(); // Reconectar ao MQTT
}
*/
//client.loop(); // Processar mensagens recebidas
// Lê os valores dos potenciômetros
int valorPeso = analogRead(potPeso);
int valorFreqRes = analogRead(potFreqRes);
int valorFreqCar = analogRead(potFreqCar);
int valorTemp = analogRead(potTemp);
// Converte os valores para unidades apropriadas
float peso = map(valorPeso, 0, 4095, 0, 150); // Peso em kg (0 a 150)
int freqRes = map(valorFreqRes, 0, 4095, 10, 40); // Frequência respiratória (10 a 40 RPM)
int freqCar = map(valorFreqCar, 0, 4095, 40, 180); // Frequência cardíaca (40 a 180 BPM)
float temp = map(valorTemp, 0, 4095, 350, 420) / 10.0; // Temperatura em °C (35.0 a 42.0)
// Exibe os valores no Monitor Serial
/*
Serial.print("Peso: ");
Serial.println(peso);
Serial.print("FreqResp: ");
Serial.println(freqRes);
Serial.print("FreqCard: ");
Serial.println(freqCar);
Serial.print("Temp: ");
Serial.println(temp);*/
// Atualiza o LCD
lcd.setCursor(0, 0);
lcd.print("Peso: ");
lcd.print(peso, 1);
lcd.print(" kg ");
lcd.setCursor(0, 1);
lcd.print("FreqResp: ");
lcd.print(freqRes);
lcd.print(" RPM ");
lcd.setCursor(0, 2);
lcd.print("FreqCard: ");
lcd.print(freqCar);
lcd.print(" BPM ");
lcd.setCursor(0, 3);
lcd.print("Temp: ");
lcd.print(temp, 1);
lcd.print(" C ");
// Controle dos LEDs baseado nos valores dos sensores
digitalWrite(ledVer1, (peso >= 10 && peso <= 80) ? HIGH : LOW);
digitalWrite(ledVer2, (freqRes >= 12 && freqRes <= 25) ? HIGH : LOW);
digitalWrite(ledVer3, (freqCar >= 60 && freqCar <= 100) ? HIGH : LOW);
digitalWrite(ledVer4, (temp >= 36.5 && temp <= 37.5) ? HIGH : LOW);
// Publicar os dados dos sensores no servidor MQTT
String pesoStr = String(peso, 1); // Converte o peso para string
String freqResStr = String(freqRes); // Converte a frequência respiratória para string
String freqCarStr = String(freqCar); // Converte a frequência cardíaca para string
String tempStr = String(temp, 1); // Converte a temperatura para string
// Publicar os valores nos tópicos MQTT
/*
client.publish("AcPA/peso", pesoStr.c_str());
client.publish("AcPA/freqResp", freqResStr.c_str());
client.publish("AcPA/freqCard", freqCarStr.c_str());
client.publish("AcPA/temp", tempStr.c_str());
*/
delay(1000); // Atraso antes da próxima leitura
}