Снятие показаний счетчиков воды: ESP8266 + Android

в 8:12, , рубрики: android, diy или сделай сам, esp8266, умный дом

Снятие показаний счетчиков воды: ESP8266 + Android - 1У многих сейчас стоят счетчики воды. И большинство сталкиваются с проблемой снятия показаний с этих счетчиков и их своевременной сдачей. Я не стал исключением. Показания у меня было снимать удобно, но вот сдавать я их постоянно забывал и вспоминал в самый неподходящий момент. Было решено автоматизировать процесс снятие показаний, чтобы можно было их просмотреть в любой момент времени. Кому интересно как получить картинку слева у себя на телефоне прошу под кат.

Введение

Идея по реализации мне пришла после прочтения этой статьи. Во время ремонта я сразу поставил импульсные счетчики. Была сделана первая версия устройства на основе ESP-03. Код написан на LUA. Данные также передавались на thingspeak.com.

Первая версия
Первая версия

После 2 месяцев использования были выявлены следующие недостатки:

  1. Не было световой индикации работы, т. к. модуль пару раз завис, то это было важно
  2. Сложность настройки, т. к. настройки находились в коде
  3. Для питания был необходим провод с miniUSB разъемом. У меня такой был только от Sony Playstation
  4. Не удобно просматривать результаты на thingspeak.com
  5. Относительная сложность реализации.

Поэтому было решено сделать вторую версию, которая будет отвечать следующим требованиям:

  1. Разъем питания microUSB
  2. Осуществлять настройку подключаясь к устройству по WiFi
  3. Индикация работы
  4. Удобство просмотра информации
  5. Легкость повторения
  6. Эстетический внешний вид
  7. Маленькая себестоимость

Плата

Схема платы довольна простая. В основе лежит таже ESP-03. С основными особенностями подключения мне помог сайт esp8266.ru.

Снятие показаний счетчиков воды: ESP8266 + Android - 3

COLD, HOT — розетки RJ9
LED1 — служит для индикации работы платы (режим настройки — постоянно горит, ошибка — частое мигание, нормальная работа — мигание раз в секунду)
LED2 — индикация наличия питания
R3, R4 — 330Ом
R1, R2, R5, R6, R7 — 6.8кОМ
С1 — танталовый конденсатор на 33мкФ
С2 — керамический конденсатор на 0.1мкФ
LM1117 — для преобразования 5В в 3.3В
J1 — джампер для перепрошивки ESP-03
BTN — для выбора режима работы платы

Для прошивки модуля и записи скриптов добавлен разъем miniUSB. Для питания отдельно добавлен еще один разъем microUSB без подвода к нему выводов RX и TX(на схеме он не отображен). Это сделано из-за того, что если запитать модуль через разъем miniUSB, куда подведены RX и TX, то модуль почему-то зависал. Я пробовал подтягивать RX и TX, но ничего не помогало. Поэтому решил оставить так, к тому же кабелей с microUSB у меня было много.

Размеры составляющих компонентов позволяют легко изготовить плату методом ЛУТ, что и было сделано для отладки скриптов. Позже я заказал изготовление платы у китайцев. Размер платы подгонялся под имеющийся корпус.

Фото до монтажа:

image

Фото после:

Снятие показаний счетчиков воды: ESP8266 + Android - 5

Прошивка

Прошивку собрал при помощи online-конструктора. Он дает возможность сгенерировать прошивку NodeMCU только с необходимыми модулями, что позволяет увеличить объем свободной памяти. Проблему с не хваткой памяти я не испытывал и в итоге у меня на скрипты и вспомогательные файлы ушло примерно 30% свободного пространства. Прошивку заливал с помощью nodemcu-flasher. Для написания и заливки скриптов использовал ESPlorer.

Работа импульсного счетчика аналогична нажатию на кнопку. При прохождении определенных значений контакты замыкаются и размыкаются. Мой счетчик замыкал контакты при цифре 7, а размыкал при цифре 2. Счетчики повесил на порты GPIO12, GPIO13 и землю с подтяжкой по питанию(используется внутренний резистор). Таким образом, когда порт поменяет свое значение на 0, то можно считать, что было потрачено 10л воды.

Устройство может работать в 2 режимах: режим настройки и режим снятия показаний. Для перехода в режим настройки при подаче питания необходимо зажать кнопку BTN. На это дается 2 секунды. В этом режиме ESP начинает работать как точка доступа и представлять из себя простой web-сервер. Появляется доступная сеть ESP-???????, где вместо символов ? будет id ESP. Для настройки необходимо подключиться к этой сети и в браузере перейти по адресу 1.1.1.1. Отобразиться следующая страница:

Снятие показаний счетчиков воды: ESP8266 + Android - 6

Если при подаче питания кнопка не была зажата, то запускается режим снятия показаний. В этом режиме каждую секунду проверяются состояния портов GPIO12 и GPIO13. Если где-то появился 0, то увеличивается соответствующее значение. Изначально я сделал проверку на основе прерываний, но этот способ оказался не надежный(ESP периодически зависала). Каждую минуту идет попытка отправить данные на сервер(если были изменения). По каждому счетчику передается 2 значения: текущее показание счетчика и величина изменения с последней передачи данных.

Android приложение

Как я уже говорил, на thingspeak.com мне было неудобно просматривать показания. Я решил написать Android приложение. В итоге получилось приложение, которое позволяет:

  • Строить графики потребления по часам, дням, месяцам
  • Иметь доступ к данным оффлайн
  • Добавить виджет с показателями

Thingspeak.com имеет API, которое дает возможность забирать данные. Используя это API, приложение при каждом запуске или перед обновлением виджета запрашивает последние данные и сохраняет в локальную базу. Дальше работа ведется уже с ней. В приложение добавил 2 типа виджетов: в виде счетчика и в виде графика потребления. Получилось довольно удобно.

Скриншоты приложения

Снятие показаний счетчиков воды: ESP8266 + Android - 7 Снятие показаний счетчиков воды: ESP8266 + Android - 8 Снятие показаний счетчиков воды: ESP8266 + Android - 9

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

Заключение

Себестоимость устройства, без учета корпуса, составила приблизительно 450 рублей. Часть компонентов покупалась во всем известном магазине. Если все брать у китайцев, то себестоимость можно снизить приблизительно до 370 рублей. Данная версия за 4 месяца еще ни разу не зависла и не подвела. Получившееся устройство легко повторить и доработать. При помощи него я узнал, что бачок унитаза медленно, но верно пропускал воду.

Полезные ссылки:

Автор: LAVElek

Источник

  1. GDI:

    “Это сделано из-за того, что если запитать модуль через разъем miniUSB, куда подведены RX и TX, то модуль почему-то зависал.” – Это потому что у ESP8266 это UART, т.е. по сути COM-порт, а не USB. Нельзя просто так взять и подключить их в разъем USB. Надо ставить микросхему UART2USB типа FTDI или CP2102, как сделано на NodeMCU.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js