/*
#include <WiFi.h>
#include <HTTPClient.h>
// Defina os pinos usados
#define pinPIR 13 // Pino ao qual o sensor PIR está conectado
#define pinBuzzer 14 // Pino ao qual o buzzer está conectado
#define pinLed 15 // Pino ao qual o LED está conectado
#define powerPin 9 // Pino ao qual o sensor PIR está alimentado
// Suas credenciais WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Configurações do ThingSpeak
const char* server = "http://api.thingspeak.com";
String writeAPIKey = "OZJYMUWIBP12BK23";
String readAPIKey = "T2FB62D0EUWFMH2D";
String channelID = "2620890";
void setup() {
pinMode(pinPIR, INPUT); // Configura o pino PIR como entrada
pinMode(pinBuzzer, OUTPUT); // Configura o pino do buzzer como saída
pinMode(pinLed, OUTPUT); // Configura o pino do LED como saída
pinMode(powerPin, OUTPUT); // Configura o pino de alimentação do sensor PIR como saída
digitalWrite(powerPin, HIGH); // Alimenta o sensor PIR
Serial.begin(9600); // Inicializa a comunicação serial
// Conecta ao WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando ao WiFi...");
}
Serial.println("Conectado ao WiFi.");
}
void loop() {
bool valorPIR = digitalRead(pinPIR); // Lê o valor do sensor PIR
if (valorPIR) {
unsigned long startTime = millis(); // Captura o tempo inicial
Serial.println("movimento detectado !!"); // Imprime "movimento detectado !!" se o sensor detectar movimento
sendDataToThingSpeak(1); // Envia valor 1 para ThingSpeak
while (millis() - startTime <= 30000) { // Loop por 30 segundos
if (checkStopCommand()) {
break;
}
tone(pinBuzzer, 1000); // Emite som no buzzer
digitalWrite(pinLed, HIGH); // Acende o LED
delay(500); // Aguarda 500 ms
noTone(pinBuzzer); // Desliga o som do buzzer
digitalWrite(pinLed, LOW); // Apaga o LED
delay(10); // Aguarda 500 ms
}
sendDataToThingSpeak(0); // Reseta o valor no ThingSpeak
} else {
Serial.println("-------"); // Imprime "-------" se não houver movimento detectado
digitalWrite(pinBuzzer, LOW); // Desativa o buzzer
digitalWrite(pinLed, LOW); // Desativa o LED
}
delay(500); // Adiciona um pequeno atraso para evitar leituras excessivas
}
void sendDataToThingSpeak(int value) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(server) + "/update?api_key=" + writeAPIKey + "&field1=" + String(value);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.println("Enviado para ThingSpeak: " + String(value));
} else {
Serial.println("Erro ao enviar para ThingSpeak.");
}
http.end();
} else {
Serial.println("Erro na conexão WiFi.");
}
}
bool checkStopCommand() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = String(server) + "/channels/" + channelID + "/fields/2.json?api_key=" + readAPIKey + "&results=1";
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
if (payload.indexOf("\"field2\":\"1\"") >= 0) {
Serial.println("Comando de parada recebido.");
return true;
}
} else {
Serial.println("Erro ao verificar o comando de parada.");
}
http.end();
} else {
Serial.println("Erro na conexão WiFi.");
}
return false;
}
*/
#include <WiFi.h>
#include <HTTPClient.h>
#define pinPIR 13 // Pino ao qual o sensor PIR está conectado
#define pinBuzzer 14 // Pino ao qual o buzzer está conectado
#define pinLed 15 // Pino ao qual o LED está conectado
#define powerPin 9 // Pino ao qual o sensor PIR está alimentado
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* server = "api.thingspeak.com";
const char* writeAPIKey = "RSGJB4U54G00R3V7";
const char* readAPIKey = "W1RKPBWN3UWA7RJ8";
const char* channelID = "2620889"; // Substitua pelo ID do seu canal
void setup() {
pinMode(pinPIR, INPUT); // Configura o pino PIR como entrada
pinMode(pinBuzzer, OUTPUT); // Configura o pino do buzzer como saída
pinMode(pinLed, OUTPUT); // Configura o pino do LED como saída
pinMode(powerPin, OUTPUT); // Configura o pino de alimentação do sensor PIR como saída
digitalWrite(powerPin, HIGH); // Alimenta o sensor PIR
Serial.begin(115200); // Inicializa a comunicação serial
// Conecta-se ao WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando-se ao WiFi...");
}
Serial.println("Conectado ao WiFi.");
}
void loop() {
bool valorPIR = digitalRead(pinPIR); // Lê o valor do sensor PIR
if (valorPIR) {
unsigned long startTime = millis(); // Captura o tempo inicial
Serial.println("movimento detectado !!"); // Imprime "movimento detectado !!" se o sensor detectar movimento
// Envia valor 1 para ThingSpeak
enviarDados(1);
while (millis() - startTime <= 30000) { // Loop por 30 segundos
// Verifica o estado do alarme no ThingSpeak
if (verificarEstadoAlarme() == 0) {
break; // Sai do loop se o alarme for desativado pelo aplicativo
}
tone(pinBuzzer, 1000); // Emite som no buzzer
digitalWrite(pinLed, HIGH); // Acende o LED
delay(500); // Aguarda 500 ms
noTone(pinBuzzer); // Desliga o som do buzzer
digitalWrite(pinLed, LOW); // Apaga o LED
delay(10); // Aguarda 500 ms
}
// Envia valor 0 para ThingSpeak após 30 segundos
enviarDados(0);
} else {
Serial.println("-------"); // Imprime "-------" se não houver movimento detectado
digitalWrite(pinBuzzer, LOW); // Desativa o buzzer
digitalWrite(pinLed, LOW); // Desativa o LED
}
delay(500); // Adiciona um pequeno atraso para evitar leituras excessivas
}
void enviarDados(int valor) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://" + String(server) + "/update?api_key=" + String(writeAPIKey) + "&field1=" + String(valor);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
Serial.println("Dados enviados para ThingSpeak.");
} else {
Serial.println("Erro ao enviar dados para ThingSpeak.");
}
http.end();
} else {
Serial.println("WiFi não conectado.");
}
}
int verificarEstadoAlarme() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://" + String(server) + "/channels/" + String(channelID) + "/fields/1/last?api_key=" + String(readAPIKey);
http.begin(url);
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
Serial.println("Estado do alarme: " + payload);
return payload.toInt();
} else {
Serial.println("Erro ao verificar estado do alarme.");
}
http.end();
} else {
Serial.println("WiFi não conectado.");
}
return 1; // Retorna 1 por padrão se não conseguir verificar o estado do alarme
}