Telegram: ESP32 обнаружение движения с уведомлениями (Arduino IDE)
В этом руководстве показано, как отправлять уведомления в ваш Telegram-аккаунт, когда ESP32 обнаруживает движение. Пока у вас есть доступ к интернету на смартфоне, вы будете получать уведомления, где бы вы ни находились. Плата ESP будет программироваться с помощью Arduino IDE.
Обзор проекта
В этом руководстве показано, как получать уведомления в вашем Telegram-аккаунте, когда ESP32 обнаруживает движение.
Вот краткое описание того, как работает проект:
Вы создадите Telegram-бота для своего ESP32.
ESP32 подключён к PIR-датчику движения.
Когда датчик обнаруживает движение, ESP32 отправляет предупреждающее сообщение в ваш Telegram-аккаунт.
Вы будете получать уведомления в своём Telegram-аккаунте каждый раз, когда обнаруживается движение.
Это простой проект, но он демонстрирует, как можно использовать Telegram в ваших IoT-проектах и проектах домашней автоматизации. Идея состоит в том, чтобы применить изученные концепции в собственных проектах.
Знакомство с Telegram
Telegram Messenger — это облачный сервис мгновенных сообщений и голосовой связи. Вы можете легко установить его на свой смартфон (Android и iPhone) или компьютер (PC, Mac и Linux). Он бесплатный и без рекламы. Telegram позволяет создавать ботов, с которыми можно взаимодействовать.
«Боты — это сторонние приложения, которые работают внутри Telegram. Пользователи могут взаимодействовать с ботами, отправляя им сообщения, команды и встроенные запросы. Вы управляете своими ботами с помощью HTTPS-запросов к Telegram Bot API».
ESP32 будет взаимодействовать с Telegram-ботом для отправки сообщений в ваш Telegram-аккаунт. Каждый раз, когда обнаруживается движение, вы будете получать уведомление на свой смартфон (при условии, что у вас есть доступ к интернету).
Создание Telegram-бота
Перейдите в Google Play или App Store, скачайте и установите Telegram.
Откройте Telegram и выполните следующие шаги для создания Telegram-бота. Сначала найдите «botfather» и нажмите на BotFather, как показано ниже. Или откройте эту ссылку t.me/botfather на своём смартфоне.
Должно открыться следующее окно, и вам будет предложено нажать кнопку start.
Введите /newbot и следуйте инструкциям для создания бота. Дайте ему имя и username.
Если ваш бот успешно создан, вы получите сообщение со ссылкой для доступа к боту и токеном бота. Сохраните токен бота, потому что он понадобится вам, чтобы ESP32 мог взаимодействовать с ботом.
Получение Telegram User ID
Любой, кто знает username вашего бота, может с ним взаимодействовать. Чтобы убедиться, что мы игнорируем сообщения не из нашего Telegram-аккаунта (или любых авторизованных пользователей), вы можете получить свой Telegram User ID. Тогда, когда ваш Telegram-бот получит сообщение, ESP сможет проверить, соответствует ли ID отправителя вашему User ID, и обработать сообщение или проигнорировать его.
В вашем Telegram-аккаунте найдите «IDBot» или откройте эту ссылку t.me/myidbot на своём смартфоне.
Начните разговор с этим ботом и введите /getid. Вы получите ответ с вашим user ID. Сохраните этот user ID, потому что он понадобится вам позже в этом руководстве.
Подготовка Arduino IDE
Мы будем программировать плату ESP32 с помощью Arduino IDE, поэтому убедитесь, что у вас установлены необходимые компоненты.
Библиотека Universal Telegram Bot
Для взаимодействия с Telegram-ботом мы будем использовать библиотеку Universal Telegram Bot, созданную Brian Lough, которая предоставляет удобный интерфейс для Telegram Bot API.
Выполните следующие шаги для установки последней версии библиотеки.
Нажмите здесь, чтобы скачать библиотеку Universal Arduino Telegram Bot.
Перейдите в Sketch > Include Library > Add .ZIP Library….
Добавьте библиотеку, которую вы только что скачали.
Важно: не устанавливайте библиотеку через Arduino Library Manager, потому что может быть установлена устаревшая версия.
Для получения подробной информации о библиотеке посмотрите страницу Universal Arduino Telegram Bot Library на GitHub.
Библиотека ArduinoJson
Вам также необходимо установить библиотеку ArduinoJson. Выполните следующие шаги для установки библиотеки.
Перейдите в Sketch > Include Library > Manage Libraries.
Найдите «ArduinoJson».
Установите библиотеку.
Мы используем библиотеку ArduinoJson версии 6.5.12.
Необходимые компоненты
Для этого проекта вам понадобятся следующие компоненты:
Схема подключения
Для этого проекта вам нужно подключить PIR-датчик движения к вашей плате ESP32. Следуйте следующей схеме подключения.
В этом примере мы подключаем вывод данных PIR-датчика движения к GPIO 27. Вы можете использовать любой другой подходящий GPIO. Прочитайте ESP32 GPIO Guide.
Telegram обнаружение движения с уведомлениями — скетч ESP32
Следующий код использует вашего Telegram-бота для отправки предупреждающего сообщения в ваш Telegram-аккаунт каждый раз, когда обнаруживается движение. Чтобы этот скетч работал у вас, необходимо вставить ваши сетевые учётные данные (SSID и пароль), токен Telegram-бота и ваш Telegram user ID.
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/telegram-esp32-motion-detection-arduino/
Project created using Brian Lough's Universal Telegram Bot Library: https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
*/
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
// Replace with your network credentials
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);
const int motionSensor = 27; // PIR Motion Sensor
bool motionDetected = false;
// Indicates when motion is detected
void IRAM_ATTR detectsMovement() {
//Serial.println("MOTION DETECTED!!!");
motionDetected = true;
}
void setup() {
Serial.begin(115200);
// PIR Motion Sensor mode INPUT_PULLUP
pinMode(motionSensor, INPUT_PULLUP);
// Set motionSensor pin as interrupt, assign interrupt function and set RISING mode
attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, RISING);
// Attempt to connect to Wifi network:
Serial.print("Connecting Wifi: ");
Serial.println(ssid);
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) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
bot.sendMessage(CHAT_ID, "Bot started up", "");
}
void loop() {
if(motionDetected){
bot.sendMessage(CHAT_ID, "Motion detected!!", "");
Serial.println("Motion Detected");
motionDetected = false;
}
}
Как работает код
В этом разделе объясняется, как работает код. Продолжайте чтение или перейдите к разделу Демонстрация.
Начнём с импорта необходимых библиотек.
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
Сетевые учётные данные
Вставьте свои сетевые учётные данные в следующие переменные.
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
Токен Telegram-бота
Вставьте токен вашего Telegram-бота, полученный от Botfather, в переменную BOTtoken.
#define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" // your Bot Token (Get from Botfather)
Telegram User ID
Вставьте ваш chat ID. Тот, который вы получили от IDBot.
#define CHAT_ID "XXXXXXXXXX"
Создайте нового WiFi-клиента с помощью WiFiClientSecure.
WiFiClientSecure client;
Создайте бота с токеном и клиентом, определёнными ранее.
UniversalTelegramBot bot(BOTtoken, client);
Датчик движения
Определите GPIO, к которому подключён датчик движения.
const int motionSensor = 27; // PIR Motion Sensor
Булева переменная motionDetected используется для индикации того, было ли обнаружено движение или нет. По умолчанию она установлена в false.
bool motionDetected = false;
detectsMovement()
Функция detectsMovement() — это функция обратного вызова, которая выполняется при обнаружении движения. В данном случае она просто изменяет состояние переменной motionDetected на true.
void IRAM_ATTR detectsMovement() {
//Serial.println("MOTION DETECTED!!!");
motionDetected = true;
}
setup()
В setup() инициализируйте Serial Monitor.
Serial.begin(115200);
Прерывание PIR-датчика движения
Установите PIR-датчик движения как прерывание и назначьте detectsMovement() функцией обратного вызова (при обнаружении движения эта функция будет выполнена):
// PIR Motion Sensor mode INPUT_PULLUP
pinMode(motionSensor, INPUT_PULLUP);
// Set motionSensor pin as interrupt, assign interrupt function and set RISING mode
attachInterrupt(digitalPinToInterrupt(motionSensor), detectsMovement, RISING);
Примечание: Рекомендуемое чтение: ESP32 с PIR-датчиком движения с использованием прерываний и таймеров
Инициализация Wi-Fi
Инициализируйте Wi-Fi и подключите ESP32 к вашей локальной сети с помощью SSID и пароля, определённых ранее.
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Наконец, отправьте сообщение, чтобы указать, что бот запущен:
bot.sendMessage(CHAT_ID, "Bot started up", "");
loop()
В loop() проверяйте состояние переменной motionDetected.
void loop() {
if(motionDetected){
Если оно true, это означает, что движение было обнаружено. Поэтому отправьте сообщение в ваш Telegram-аккаунт, указывающее, что обнаружено движение.
bot.sendMessage(CHAT_ID, "Motion detected!!", "");
Отправка сообщения боту очень проста. Вам просто нужно использовать метод sendMessage() для объекта bot и передать в качестве аргументов chat ID получателя, сообщение и режим разбора.
bool sendMessage(String chat_id, String text, String parse_mode = "")
Наконец, после отправки сообщения, установите переменную motionDetected в false, чтобы можно было снова обнаружить движение.
motionDetected = false;
Вот примерно так работает код.
Демонстрация
Важно: перейдите в свой Telegram-аккаунт и найдите своего бота. Вам нужно нажать «start» на боте, прежде чем он сможет отправлять вам сообщения.
Загрузите код на свою плату ESP32. Не забудьте перейти в Tools > Board и выбрать используемую плату. Перейдите в Tools > Port и выберите COM-порт, к которому подключена ваша плата.
После загрузки кода нажмите встроенную кнопку EN/RST на ESP32, чтобы начать выполнение кода. Затем вы можете открыть Serial Monitor, чтобы увидеть, что происходит в фоновом режиме.
Когда ваша плата впервые загрузится, она отправит сообщение в ваш Telegram-аккаунт: «Bot started up». Затем поднесите руку к PIR-датчику движения и проверьте, что вы получили уведомление об обнаружении движения.
В то же время вот что вы должны увидеть в Serial Monitor.
Заключение
В этом руководстве вы узнали, как создать Telegram-бота для взаимодействия с платой ESP32. При обнаружении движения отправляется сообщение.
С помощью этого бота вы также можете использовать свой Telegram-аккаунт для отправки сообщений на ESP32, чтобы управлять его выходами или запрашивать показания датчиков, например.
Преимущество использования Telegram для управления вашими платами ESP в том, что пока у вас есть подключение к интернету (и у ваших плат тоже), вы можете управлять ими и контролировать их из любой точки мира.
Другие проекты с Telegram:
—
Источник: :doc:`Telegram: ESP32 Motion Detection with Notifications (Arduino IDE) <../telegram-esp32-motion-detection-arduino/index>` — Random Nerd Tutorials