ESP32-CAM и HC-SR501 отправка фото в Telegram
ESP32-CAM с датчиком движения HC-SR501 превращается в полноценную фотоловушку: при обнаружении движения камера мгновенно делает снимок и отправляет его в ваш Telegram-чат или канал. Никаких SD-карт, облаков и задержек — фото приходит через 2–4 секунды после срабатывания. Идеально для охраны дома, гаража, дачи и скрытого наблюдения своими руками.
Работает на стандартной плате AI-Thinker, использует только встроенные библиотеки ESP32 + UniversalTelegramBot. Никаких дополнительных плат и компонентов, кроме датчика движения.
Необходимые компоненты
- ESP32-CAM (AI-Thinker)
- Датчик движения HC-SR501
- Источник питания 5 В / 1–2 А (обязательно 5 В!)
- Программатор FTDI/USB-TTL
Подключение
- VCC HC-SR501 → 5 В
- GND → GND
- OUT датчика → GPIO13 ESP32-CAM
- Питание платы — только 5 В (3.3 В приводит к зависаниям)
Как это работает
- HC-SR501 выдаёт HIGH при движении
- GPIO13 ловит фронт → запускается захват кадра
- esp_camera_fb_get() → буфер с JPEG
- UniversalTelegramBot.sendPhotoByBinary() отправляет фото через HTTPS
- delay(10000) — защита от спама (10 сек между снимками)
Пример кода
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include "esp_camera.h"
#include "camera_pins.h"
const char* ssid = "ТВОЯ_СЕТЬ";
const char* password = "ПАРОЛЬ";
#define BOT_TOKEN "ТОКЕН_БОТА"
#define CHAT_ID "ID_ЧАТА_ИЛИ_КАНАЛА"
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
const int pirPin = 13;
int pirState = LOW;
void setup() {
Serial.begin(115200);
pinMode(pirPin, INPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
client.setInsecure(); // Telegram без сертификатов
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sccb_sda = SIOD_GPIO_NUM;
config.pin_sccb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
config.frame_size = FRAMESIZE_VGA;
config.jpeg_quality = 12;
config.fb_count = 1;
if (esp_camera_init(&config) != ESP_OK) {
Serial.println("Ошибка инициализации камеры");
while (true);
}
}
void sendPhoto() {
camera_fb_t* fb = esp_camera_fb_get();
if (!fb) return;
bot.sendPhotoByBinary(
CHAT_ID,
"image/jpeg",
fb->len,
fb->buf,
false,
"Motion detected"
);
esp_camera_fb_return(fb);
}
void loop() {
int val = digitalRead(pirPin);
if (val == HIGH && pirState == LOW) {
Serial.println("Движение обнаружено");
pirState = HIGH;
sendPhoto(); // делаем фото и отправляем в Telegram
delay(5000); // защита от спама (5 секунд)
}
if (val == LOW) {
pirState = LOW; // сброс состояния
}
delay(100); // стабильность работы PIR
}
Реагирует только на фронт (LOW → HIGH), а не на постоянный сигнал
Делает фото и отправляет его в Telegram
Защищён от флуда задержкой
Корректно сбрасывает состояние при отсутствии движения
Разбор кода
digitalRead(pirPin) каждую секунду проверяет датчик. При первом HIGH → делаем снимок и отправляем через sendPhotoByBinary(). client.setInsecure() обязательна для Telegram. Питание 5 В — критично для стабильности.
Преимущества
- Фото в Telegram через 2–4 секунды после движения
- Не нужна SD-карта и извлечение
- Работает 24/7 без компьютера
- Разрешение до UXGA (1600×1200)
- Легко добавить текст, время, несколько чатов
- Полностью автономная фотоловушка
Применение
- Охрана дома, дачи, гаража
- Скрытое наблюдение за животными
- Контроль детей/сотрудников
- Умный дверной звонок с фото
- Основа для распознавания лиц (следующий шаг)
- Любые проекты безопасности и IoT своими руками
Заключение
ESP32-CAM + HC-SR501 + Telegram — одна из самых мощных и простых фотоловушек, которую можно собрать за вечер. Никаких проводов к компьютеру, никаких облачных подписок. Прошейте скетч, направьте камеру — и получайте фото в Telegram при любом движении!
FAQ — ESP32-CAM + HC-SR501 с отправкой фото в Telegram
Как работает фотоловушка на ESP32-CAM с HC-SR501?
Датчик движения HC-SR501 подаёт сигнал HIGH при обнаружении движения. ESP32-CAM фиксирует этот фронт на GPIO13, делает снимок через esp_camera_fb_get() и отправляет фото в Telegram с помощью UniversalTelegramBot. Весь процесс занимает 2–4 секунды, что позволяет использовать устройство как полноценную охранную систему или скрытую фотоловушку.
Можно ли питать ESP32-CAM от 3.3 В?
Нет. При питании от 3.3 В ESP32-CAM часто зависает, перезагружается или не запускает камеру. Для стабильной работы требуется питание строго 5 В с током 1–2 А. Это важнейшее условие корректной работы фотоловушки.
Для чего используется client.setInsecure() в Telegram-боте?
client.setInsecure() отключает проверку SSL-сертификатов и позволяет ESP32-CAM устанавливать HTTPS-соединение с серверами Telegram. Без этого Telegram API не принимает запросы, а фото не отправляются. Это стандартная практика при работе UniversalTelegramBot на ESP32.
Почему используется GPIO13 для подключения HC-SR501?
GPIO13 — один из свободных входов ESP32-CAM, не задействованных камерой. Его удобно использовать для цифрового сигнала PIR-датчика. Пины, занятые камерой (GPIO0, GPIO1, GPIO3 и другие), нельзя использовать для подключения HC-SR501.
Сколько времени проходит между срабатыванием датчика и получением фото?
Устройство отправляет снимок в Telegram обычно за 2–4 секунды. Задержка зависит от качества Wi-Fi, размера JPEG-кадра и нагрузки на сеть. Даже при высокой активности камера работает достаточно быстро для охранных задач.
Нужна ли SD-карта для сохранения фото?
Нет. Фото передаются напрямую в Telegram без сохранения на SD-карту. Это ускоряет работу, снижает потребление памяти и исключает необходимость доставать SD-карту для просмотра снимков. Фотоловушка работает полностью автономно.
Почему в скетче стоит delay(10000) и можно ли его убрать?
delay(10000) предотвращает спам при постоянном движении — камера делает снимки не чаще одного раза в 10 секунд. Можно изменить интервал или полностью убрать задержку, но в этом случае при частых срабатываниях датчика Telegram-чат будет получать десятки фото подряд.
Какое максимальное разрешение фото на ESP32-CAM?
ESP32-CAM AI-Thinker поддерживает разрешения до UXGA (1600×1200). В примере используется именно этот режим. Его качество оптимально для отправки в Telegram и охранных задач без перегрузки Wi-Fi-канала.
Можно ли отправлять фото в несколько Telegram-чатов одновременно?
Да. UniversalTelegramBot позволяет отправлять снимок в несколько чатов, если указать несколько CHAT_ID или выполнить последовательные вызовы sendPhotoByBinary(). Это полезно для охраны, когда фото должны получать несколько человек.