ESP32-Cam снять показания счетчика воды и отправить фотографию в Телеграм

ESP32-Cam снять показания счетчика воды и отправить фотографию в Телеграм

Продолжаем тему снятия показаний счётчика воды и отправки их в Телеграм, а при желании можно точно так же снять данные с электросчётчика. При этом можно вообще не быть программистом, а просто следовать инструкциям. И вся ваша работа будет в замене 4 строчек. Две — это доступ к своей WIFI сети, и ещё две это надо указать данные для доступа к Телеграм. Всё это было много раз рассказано на канале, так что в этом ничего сложного нет.

Приветствую всех моих подписчиков и гостей канала.
В этом видео я покажу как используя плату ESP32-CAM, а это модуль на основе платы ESP32 с камерой OV2640 делать фотографии в определённое время и присылать их в Телеграм. Можно присылать и на почту или выкладывать на FTP сервер или класть в базу для дальнейшего анализа потребления воды, но это будет в следующих видео, а пока только Телеграм.

В этом примере мы используем навыки трёх прошлых уроков

  • Это фотографирование при наступлении какого-нибудь события,
  • Отправка фото в Телеграм
  • Время ожидания без тормозов, используя функцию millis(),

Если вы их ещё не смотрели, то можете это сделать прямо сейчас, а потом снова вернуться к просмотру этого видео. А можно и не смотреть, а просто использовать готовый пример.

Посмотрим как это работает.
Как можно догадаться, я не буду ждать целый месяц для того что бы сделать первый снимок, а затем ещё один для второго. Я буду делать фотографии каждую минуту, так я прописал в скетче, а вы можете изменить это число и сделать что бы вам приходили сообщения раз в день или месяц.

Это первый пример из этой темы, поэтому здесь я не использовал возможность отправки камеры в спячку и пробуждение при наступлении определённого времени. В качестве бонуса, в конце видео я покажу отдельным примером как можно усыпить, а затем разбудить модуль.

Как видите фотографии приходят раз в минуту. И вы можете увеличить их для просмотра и посмотреть сколько воды вы использовали.
Я уже делал два видео про счётчики, но для того чтобы их повторить надо быть немного программистом, а здесь всё доступно абсолютно любому пользователю, особенно тем кто подписан на мой канал. Здесь даже не надо ничего собирать, просто загрузил скетч, установил в нужном месте и подал питание и всё готово. Особо заострю внимание именно на установку камеры. Её нужно установить так что бы было видно оба счётчика и чтобы светодиод не создавал блики при фотографировании. Светодиод можно отключить если у вас достаточно освещения в помещении, или установить инфракрасные светодиоды и тогда можно будет делать снимки почти в полной темноте. Как это будет работать я покажу в следующих видео. Пока это просто набросок, но вполне работающий и те кто не хочет ждать следующего урока может вполне себе установить этот пример и доработать его под себя. Основной же массе я советую подождать выхода следующего видео. Второй более полной версии.

Видите, при увеличении в компьютерной версии телеграм можно довольно чётко рассмотреть показания. В телефонной версии читается даже лучше и можно видеть номер счётчика.  Счётчик горячей воды у меня установлен под небольшим углом и поэтому его показания читаются похуже. Вот и ещё небольшая проблемка нарисовалась. Счётчики должны быть установлены как можно ровнее, тогда фото получится чётче. И не важно что вы легко читаете цифры, камера, из-за отражения от стекла считает данные хуже.

Ну думаю достаточно фотографий. Вы сами видели как это работает, и тем кому интересно то могут посмотреть дальше где я разберу работу скетча, а кому это не интересно, то спасибо за просмотр и не забудьте, что дальше в видео я покажу как работать с  режимами сна тем самым вы сможете экономить заряд батареи включая камеру только в момент фотографирования и усыпляя на всё оставшееся время.

Теперь рассмотрим скетч.
Полностью я его описывать не буду, так как делал это в прошлых видео, кому интересно могут посмотреть там. Расскажу только то что появилось новенького.
Это стандартные библиотеки, и если вы уже работали с платами ESP32 и ESP32-Cam то они у вас уже установлены.
Сюда записываем имя своей WIFI сети и пароль, а сюда вставляем токен своего бота Телеграм и ID своего канала.
Эта переменная будет нам нужна для хранения последнего, текущего времени. Так как время считается в миллисекундах, то это будет очень большое значение. В эту переменную можно сохранить до 4.2 миллиарда.
В переменной пауза указываем значение через которое будет происходить фотографирование. Значение указывается в миллисекундах, поэтому количество секунд надо умножить на 1000 что бы получить миллисекунды. 60000 миллисекунд равно 1 минуте, а в 30 днях почти 2.6 миллиарда.
Это проверка на соединение с WIFI сетью. Если вы не смогли соединиться то плата ESP32 будет перезагружена и будет повторена попытка соединения. Если вы подключились к своей сети, то светодиод мигнёт 5 раз.

Здесь я установил некоторые из дополнительных настроек. В первых яя указал разрешение с которым камера будет делать фотографию. В процессе работы с камерой было замечено, что если указать очень высокое разрешение, то камера просто откажется снимать, а вам об этом не скажет и вы будете долго гадать почему же ничего не получается. Поэтому я бы посоветовал сначала ставить разрешение ниже, а потом постепенно увеличивать. И делать это в том месте где вы хотите использовать камеру. Например очень сильно влияете степень освещённости. При полутьме фотографии высокого разрешения не получатся, камера просто не будет их снимать.

И ещё я добавил яркости, контрастности и насыщения. По умолчанию они стоят посередине, то есть на нуле. Я установил на максимум, на двойку.
Ну и теперь нам осталось отправить свой токен и id для отправки первой фотографии. Так как это функция setup, то это всё выполняется только один раз при подачи питания на плату. И ещё один нюанс. Первое фото отправляется с худшим качеством чем последующие. Это надо иметь в виду.
Ну и последнее в этом примере – это отправка фотографий через определённый промежуток времени. Время берётся из переменной пауза, а там, как вы наверное помните стоит 1 минута.
Это условие говорит, что если текущее время больше чем 1 минута, то условие верно и мы входим в условие. Сразу изменяем прошлое текущее время на настоящее и отправляем токен и id, как мы это делали только что в setup.
Ещё раз повторюсь, что я продолжу усовершенствовать этот пример, конечно если будут желающие видеть продолжение. А теперь как и обещал показываю пример как с режимами сна в ESP32.

Режимы сна в ESP32 Cam

Рассмотрим один из них, Режим глубокого сна. Если хотите, то я сделаю разбор и остальных режимов.
У этого режима есть ещё варианты.

  • пробуждение по таймеру. Будет рассмотрено сегодня.
  • сенсорное пробуждение. Пробуждение от прикосновения к некоторым контактам ESP, а именно – контакты RTC_GPIO.
  • внешнее пробуждение. Срабатывает от внешних датчиков, например от датчика движения или при попадании света на фоторезистор и другое.

Есть несколько вариантов режима сна.

  • Активный режим
  • Спящий режим модема
  • Режим легкого сна
  • Режим глубокого сна
  • Режим гибернации

Во всех этих вариантах работают разные составляющие ESP. Процессор, WIFi, память, периферия, сопроцессор и другое. Например? в режиме глубокого сна работает только rtc память и периферия.
Для этого примера, в будущем понадобится режим пробуждения по таймеру, вот про него я и расскажу.

Если вы планирует питать своё устройство от батареек, и оно должно работать не постоянно, а при наступлении времени, то лучше всего использовать режим сна, и включать только когда это понадобится. Это значительно сократит расход заряда батареи. В этом примера я покажу как разбудить устройство через 10 секунд, и сколько потребляет плата в спящем и рабочем режиме. Говоря рабочий, я не говорю, что это какой-то супер активный режим, это значит что плата просто работает. Ничего не передаёт по WIFI, не снимает видео и не светит своим ярким светодиодом.

Как видите в рабочем режиме плата потребляет 0.042 А = 42 мА, а в режиме глубокого сна 0.002 А = 2 мА.
Это ну не как не микроамперы которые указаны в документации, но всё равно это экономия в 20 раз по сравнению с рабочим режимом, и это в 20 раз продлит службу от батареи. Так что этот метод надо будет использовать в следующих примерах.

Теперь пару слов по скетчу.
Правда я пока не совсем разобрался. Здесь вроде можно работать только с микросекундами, а не миллисекундами, а это ограничивает время только до 70 минут. Но может, и даже наверняка, я чего ещё не знаю. Кто знает напишите как работать с миллисекундами.
Вначале создаём переменную которая равна количеству микросекунд в 1 секунде. Это сделано просто для облегчения подсчёта секунд.
Здесь просто указываем сколько времени ESP будет спать, или через сколько она проснётся, это кому как нравится.
Это переменная для счётчика, она будет увеличиваться с каждым разом когда плата проснётся по истечении времени, и обнулится если пробуждение будет вызвано другим путём.
А здесь прописаны все возможные варианты пробуждения. Они будут показаны при возникновении этого случая. В этом случае я перезагрузил плату отключив питание.
Прошло 10 секунд и плата рабудилась по таймеру, что нам и здесь и показано, а ещё здесь показано, что это уже 3 перезагрузка.
Вот так переменная увеличивает своё значение и печатает сколько был перезагрузок.
А это функция для вывода на печать по какой причине была разбужена плата.
Эта, виновница пробуждения. Эта функция отвечает за пробуждение ESP по таймеру. В неё мы передаём значение переменных. Секунды умножаем на микросекунды.
Дальше просто обычный текст, и в конце погружаем плату в спячку до следующего пробуждения.

Надеюсь, что понятно рассказал и это кому-то понадобится.