Last active
September 25, 2022 12:05
-
-
Save richardDobron/0d039c4f29ec60b32cefc6093a397a83 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Rui Santos | |
Complete project details at https://RandomNerdTutorials.com/esp32-door-status-telegram/ | |
Permission is hereby granted, free of charge, to any person obtaining a copy | |
of this software and associated documentation files. | |
The above copyright notice and this permission notice shall be included in all | |
copies or substantial portions of the Software. | |
*/ | |
#include <WiFi.h> | |
#include <WiFiClientSecure.h> | |
#include <UniversalTelegramBot.h> | |
#include <ArduinoJson.h> | |
// Set GPIOs for LED and reedswitch | |
const int reedSwitch = 4; | |
const int led = 2; //optional | |
const int buzzer = 9; //buzzer to arduino pin 9 | |
// Detects whenever the door changed state | |
bool changeState = false; | |
// Holds reedswitch state (1=opened, 0=close) | |
bool state; | |
String doorState; | |
// Auxiliary variables (it will only detect changes that are 1500 milliseconds apart) | |
unsigned long previousMillis = 0; | |
const long interval = 1500; | |
const char* ssid = "REPLACE_WITH_YOUR_SSID"; | |
const char* password = "REPLACE_WITH_YOUR_PASSWORD"; | |
// Initialize Telegram BOT | |
#define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" // your Bot Token (Get from Botfather) | |
// Use @myidbot to find out the chat ID of an individual or a group | |
// Also note that you need to click "start" on a bot before it can | |
// message you | |
#define CHAT_ID "XXXXXXXXXX" | |
WiFiClientSecure client; | |
UniversalTelegramBot bot(BOTtoken, client); | |
// Runs whenever the reedswitch changes state | |
ICACHE_RAM_ATTR void changeDoorStatus() { | |
Serial.println("State changed"); | |
changeState = true; | |
} | |
void setup() { | |
// Serial port for debugging purposes | |
Serial.begin(115200); | |
// Read the current door state | |
pinMode(reedSwitch, INPUT_PULLUP); | |
state = digitalRead(reedSwitch); | |
// Set LED state to match door state | |
pinMode(led, OUTPUT); | |
pinMode(buzzer, OUTPUT); // Set buzzer - pin 9 as an output | |
digitalWrite(led, !state); | |
// Set the reedswitch pin as interrupt, assign interrupt function and set CHANGE mode | |
attachInterrupt(digitalPinToInterrupt(reedSwitch), changeDoorStatus, CHANGE); | |
// Connect to Wi-Fi | |
WiFi.mode(WIFI_STA); | |
WiFi.begin(ssid, password); | |
client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org | |
while (WiFi.status() != WL_CONNECTED) { | |
delay(500); | |
Serial.print("."); | |
} | |
Serial.println(""); | |
Serial.println("WiFi connected"); | |
bot.sendMessage(CHAT_ID, "Bot started up", ""); | |
} | |
void loop() { | |
if (changeState){ | |
unsigned long currentMillis = millis(); | |
if(currentMillis - previousMillis >= interval) { | |
previousMillis = currentMillis; | |
// If a state has occured, invert the current door state | |
state = !state; | |
if(state) { | |
doorState = "closed"; | |
} | |
else{ | |
doorState = "open"; | |
tone(buzzer, 1000); // Send 1KHz sound signal... | |
} | |
digitalWrite(led, !state); | |
changeState = false; | |
Serial.println(state); | |
Serial.println(doorState); | |
//Send notification | |
bot.sendMessage(CHAT_ID, "The door is " + doorState, ""); | |
} | |
} | |
if(!state) { // door is open | |
delay(1000); | |
noTone(buzzer); // Stop sound... | |
digitalWrite(led, state); // off | |
delay(1000); | |
tone(buzzer, 1000); // Send 1KHz sound signal... | |
digitalWrite(led, !state); // on | |
} else { | |
noTone(buzzer); // Stop sound... | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment