#include <WiFi.h>
#include <PubSubClient.h>
//#include "DHT.h"
int ledConf = 32; // choose the pin for the LED
int pinD = 5; // choose the input pin (for PIR sensor)
int estado = LOW; // we start, assuming no motion detected
int var = 0; // variable for reading the pin status
/*void setup() {
pinMode(ledConf, OUTPUT); // declare LED as output
pinMode(pinD, INPUT); // declare sensor as input
//Serial.begin(9600);
}*/
/*void loop() {
var = digitalRead(pinD); // read input value
if (var == HIGH) { // check if the input is HIGH
digitalWrite(ledConf, HIGH); // turn LED ON
if (estado == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
estado = HIGH;
}
} else {
digitalWrite(ledConf, LOW); // turn LED OFF
if (estado == HIGH) {
// we have just turned of
Serial.println("Motion ended!");
// We only want to print on the output change, not state
estado = LOW;
}
}
}*/
int led2 = 32;
//SENSOR DE TEMPERATURA DHT22
//#define DHTTYPE DHT22 //modelo do sensor - DHT22
//#define DHTPIN 5 //pino do sensor
//DHT dht(DHTPIN, DHTTYPE); //variavel para leitura
//int temperatura;
//int umidade;
//int atrasoTemp = 2000; //tempo do delay para chamar novamente a função de medir temperatura
unsigned long tempoAnteriorTemp = 0; //variável para delay usando millis
//BROKER MQTT
const char* mqtt_topic = "Projeto/caixa";
const char* mqtt_server = "broker.mqttdashboard.com"; //servidor mqtt
WiFiClient espClient; //abstrai
PubSubClient client(espClient); //abstrai
unsigned long lastMsg = 0; //unsigned long = inteiro de 32 bits sem sinal
#define MSG_BUFFER_SIZE 100 //abstrai
char msg[MSG_BUFFER_SIZE]; //abstrai
String pergunta;
void conectarBroker() {
client.setServer(mqtt_server, 1883);
//client.setCallback(callback);
if (!client.connected()) {
Serial.print("Conectando ao servidor MQTT...");
String clientId = "";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("Conectado");
client.subscribe("Projeto/caixa"); //inscrição no tópico para enviar mensagens
}
}
}
void reconectarBroker() {
if (!client.connected()) {
conectarBroker();
}
client.loop();
}
/*void callback(String topic, byte* payload, unsigned int lenght) {
if ((char)payload[0] == '0') { //Quando apertar o botão OFF
digitalWrite(LED01, LOW); //Desligar o ventilador
}
if ((char)payload[0] == '1') { //Quando apertar o botão ON
digitalWrite(LED01, HIGH); //Ligar o Ventilador
}
}*/
/*void piscaLed(){
var = digitalRead(pinD);
if(var == HIGH){
digitalWrite(ledConf, HIGH);
if(estado == LOW){
Serial.println("Movimento detectado");
estado = HIGH;
}
}else{
digitalWrite(ledConf, LOW);
if (estado == HIGH) {
Serial.println("Fora de alcançe");
estado = LOW;
}*/
/*temperatura = dht.readTemperature();
umidade = dht.readHumidity();
if(temperatura > 40 && umidade > 80){
digitalWrite(ledConf, LOW);
//digitalWrite(LED01, HIGH);
//digitalWrite(alarme, HIGH);
}else{
digitalWrite(ledConf, HIGH);
//digitalWrite(LED01, LOW);
//digitalWrite(alarme, LOW);
}
}*/
//MEDIR TEMPERATURA
/*void medirTemperatura() {
long int tempo = millis();
if (tempo > (tempoAnteriorTemp + atrasoTemp)) { //Vai entrar no if de atrasoTemp em atrasoTem vezes
tempoAnteriorTemp = tempo;
temperatura = dht.readTemperature(); //lê temperatura no dht22
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.println(F("°C"));
sprintf(msg, "%d", temperatura); //monta string
client.publish("lucas/temp", msg);//publica a mensagem no broker mqtt no tópico: lucas/temp
//umidade
umidade = dht.readHumidity();
sprintf(msg, "%i", umidade);
client.publish("lucas/umi", msg);
Serial.print("Umidade: ");
Serial.print(umidade);
Serial.println(F("%"));
piscaLed();
}
}*/
void setup() {
Serial.begin(9600);
//pinMode(led2, OUTPUT);
pinMode(ledConf, OUTPUT); // declare LED as output
pinMode(pinD, INPUT);
//dht.begin();
Serial.print("Conectando-se ao Wi-Fi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
//digitalWrite(ledConf, HIGH);
conectarBroker();
}
void piscaLed(){
//String pergunta1 = '';
var = digitalRead(pinD);
if(var == HIGH){
digitalWrite(ledConf, HIGH);
if(estado == LOW){
Serial.println("Movimento detectado");
estado = HIGH;
client.subscribe("Resposta/doacao");
Serial.println("Bem-vindo(a), deseja fazer uma doação?");
while (Serial.available() == 0) {} //wait for data available
pergunta = Serial.readString(); //read until timeout
pergunta.trim();
client.publish("Resposta/doacao", msg);
}
if(pergunta == "Sim"){
//Serial.println("Ótimo, agora sobre o valor...");
//client.publish("Resposta/doacao", msg);
//pergunta = msg;
Serial.println(pergunta);
Serial.println("Qual o valor que deseja doar?");
while (Serial.available() == 0) {} //wait for data available
//client.publish("Resposta/doacao", msg);
pergunta = Serial.readString(); //read until timeout
pergunta.trim();
//pergunta = msg;
Serial.println(pergunta);
client.publish("Resposta/doacao", msg);
//pergunta = msg;
Serial.println("Obrigado pela doação e tenha um ótimo dia");
}if(pergunta == "Não"){
Serial.println("Entendido, tenha um ótimo dia...");
}
//pergunta = "";
delay(9000);
}else{
//delay(100000);
digitalWrite(ledConf, LOW);
if (estado == HIGH) {
Serial.println("Fora de alcançe");
estado = LOW;
}
}
}
void loop(){
reconectarBroker();
piscaLed();
//medirTemperatura();
}