ESP32-CAM — автоматическая съёмка счётчика воды и отправка фото в Telegram по расписанию

ESP32-CAM фотографирует счётчики воды (или электричества) в заданное время и мгновенно отправляет снимок в Telegram. Никакого программирования — просто меняете 4 строки: Wi-Fi, токен и Chat ID бота, интервал съёмки. Идеальное решение для автоматической передачи показаний без ручного ввода, без облачных сервисов и подписок.

ESP32-CAM счётчик воды Telegram

Необходимые компоненты

  • ESP32-CAM (AI-Thinker)
  • Источник питания 5 В / 1–2 А
  • Доступ к Wi-Fi
  • Telegram-бот (токен + Chat ID)

Как это работает

  1. Подключение к Wi-Fi
  2. Захват кадра по таймеру (millis())
  3. Отправка JPEG в Telegram через UniversalTelegramBot
  4. Повтор каждые N минут/часов/дней

Пример кода

#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 "ВАШ_CHAT_ID"

WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);

unsigned long previousMillis = 0;
const long interval = 60UL * 1000UL; // 1 минута (измените на 24*60*60*1000UL для суток)

void setup() {
  Serial.begin(115200);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi connected");

  client.setInsecure();

  // Инициализация камеры (AI-Thinker)
  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_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_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_XGA;    // оптимально для счётчиков
  config.jpeg_quality = 10;
  config.fb_count = 1;

  esp_camera_init(&config);

  sendPhoto(); // первая съёмка сразу после старта
}

void sendPhoto() {
  camera_fb_t * fb = esp_camera_fb_get();
  if (!fb) {
    Serial.println("Camera capture failed");
    return;
  }

  bot.sendPhotoByBinary(CHAT_ID, "photo.jpg", fb->len, fb->buf);
  esp_camera_fb_return(fb);
  Serial.println("Фото отправлено");
}

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    sendPhoto();
  }
}
Делает следующее:
подключается к Wi-Fi.
инициализирует камеру ESP32-CAM (AI-Thinker).
отправляет фото в Telegram по таймеру (каждую минуту).
первое фото отправляется сразу после старта.

Бонус: режим глубокого сна (экономия батареи)

// Добавьте в конец loop() вместо delay
esp_sleep_enable_timer_wakeup(30ULL * 1000000ULL); // 30 секунд
esp_deep_sleep_start();

Преимущества

  • Автоматическая передача показаний
  • Читаемые фото даже при увеличении
  • Работает 24/7 без вашего участия
  • Можно питать от аккумулятора + сон
  • Никаких платных сервисов

Применение

  • Автоматическая сдача показаний воды/электричества
  • Контроль расхода на даче/в гараже
  • Удалённый мониторинг счётчиков в арендованных квартирах
  • Фиксация показаний для споров с УК

Заключение

ESP32-CAM превращает любой счётчик в «умный» за 15 минут. Просто направьте камеру на циферблат, прошейте скетч, измените 4 строки — и получайте фото показаний в Telegram каждый день/месяц. Никаких приложений, подписок и ручного ввода. Следующий шаг — добавим режим сна и автономность на месяцы от аккумулятора!

FAQ — ESP32-CAM для автоматической съёмки счетчиков и отправки фото в Telegram

Подходит ли ESP32-CAM для съемки счетчиков воды и электроэнергии?

Да. ESP32-CAM отлично подходит для ежедневной съемки циферблатов счетчиков благодаря встроенной камере, возможности настройки разрешения и стабильной работе с отправкой фото в Telegram. Достаточно один раз выставить ракурс и освещение.

Нужна ли SD-карта для работы ESP32-CAM в этом проекте?

Нет. Снимок отправляется напрямую в Telegram из оперативной памяти устройства с помощью UniversalTelegramBot. SD-карта не требуется, что упрощает сборку и делает систему более надежной.

Какой интервал съёмки можно установить?

Интервал задаётся в миллисекундах через переменную interval. Можно установить любое значение: от минут до суток. Для суточного режима используйте 24UL * 60UL * 60UL * 1000UL.

Можно ли питать ESP32-CAM от аккумулятора?

Да. При использовании режима глубокого сна ESP32-CAM может работать от аккумулятора неделями или месяцами. Достаточно подключить модуль питания 5 В или DC-DC преобразователь с USB.

Можно ли улучшить качество читаемости цифр на фото?

Да. Наиболее оптимальны режимы FRAMESIZE_XGA и UXGA. Дополнительно рекомендуются: постоянный источник света, минимальный наклон камеры и расстояние 10–20 см. JPEG-качество 8–12 обеспечивает хорошую читаемость при малом размере файла.

Что нужно изменить в коде для запуска?

Для работы достаточно изменить четыре значения: ssid, password, BOT_TOKEN, CHAT_ID. Всё остальное полностью готово для прошивки и запуска.

Можно ли отправлять фото в группу или канал Telegram?

Да. Получите ID группы или канала с помощью @userinfobot. Для канала бот должен быть назначен администратором с правом «Публиковать сообщения».

Работает ли проект без интернета?

Нет. Фото отправляется через API Telegram, поэтому требуется стабильное Wi-Fi-подключение. При отсутствии сети снимок не будет передан.

Можно ли добавить распознавание цифр на фото?

Да. Для автоматического распознавания можно использовать сторонние API (Google Vision, OCR.space) или локальный сервер OCR. ESP32-CAM отправляет фото, а обработку выполняет внешний сервис.

📁 Скачать примеры