#include <WiFi.h> // Biblioteca para conectar o ESP32 ao WiFi
#include <HTTPClient.h> // Biblioteca para fazer requisições HTTP
#include <UrlEncode.h> // Biblioteca para codificar texto em formato de URL
#include <LiquidCrystal.h> // Biblioteca para controlar LCD tradicional
// Definição das credenciais do WiFi
const char* ssid = "redeteste"; // Nome da rede WiFi para o ESP fazer a conexão
const char* password = "senhateste"; // Senha do WiFi
// Definição dos pinos do botão e LEDs
#define botao 21 // Pino de conexão no ESP para o botão
#define led1 23 // Pino conexão no ESP para o LED externo PROTOBOARD (acende ao enviar mensagem)
#define led2 2 // Pino para o LED interno do ESP (indica o status de conexão)
// Definição dos pinos do LCD (painel tradicional)
LiquidCrystal lcd(12, 13, 14, 27, 26, 25); // RS, EN, D4, D5, D6, D7
bool flag = 1; // Variável de controle para evitar múltiplos envios da mensagem
// Número de telefone e chave da API para CallMeBot
String phoneNumber1 = "559581101542"; // Número de telefone para enviar mensagem (Brasil 55)
String apiKey1 = "8310257"; // Chave de API para autenticação no CallMeBot
// Função para enviar a mensagem via CallMeBot API
void sendMessage(String phoneNumber, String apiKey, String message) {
String url = "https://api.callmebot.com/whatsapp.php?phone=" + phoneNumber +
"&apikey=" + apiKey + "&text=" + urlEncode(message);
HTTPClient http;
http.begin(url);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpResponseCode = http.POST(url);
if (httpResponseCode == 200) {
Serial.println("Mensagem enviada com sucesso");
} else {
Serial.println("Erro no envio da mensagem");
Serial.print("HTTP response code: ");
Serial.println(httpResponseCode);
}
http.end();
}
void setup() {
Serial.begin(115200);
pinMode(botao, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
WiFi.begin(ssid, password);
Serial.println("Conectando...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
digitalWrite(led2, !digitalRead(led2));
}
Serial.println("");
Serial.print("Conectado ao WiFi neste IP: ");
digitalWrite(led2, HIGH);
Serial.println(WiFi.localIP());
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aguardando...");
}
void loop() {
int estado_botao = digitalRead(botao);
if (estado_botao == 0) {
Serial.println("Botão Pressionado, enviando mensagem");
digitalWrite(led1, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pessoa em perigo");
if (flag) {
sendMessage(phoneNumber1, apiKey1, "SOCORRO!!!!, ME AJUDE");
flag = 0;
}
} else {
flag = 1;
digitalWrite(led1, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Aguardando...");
}
}