РадиоКот :: Миртек - Оправка показаний на Email или SMS
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Защита и контроль >

Теги статьи: Добавить тег

Миртек - Оправка показаний на Email или SMS

Автор: LEVV2006
Опубликовано 22.03.2024
Создано при помощи КотоРед.

Коты привет!

Данный проект проходил под флагом «Быстро и просто». Поэтому и статья должна быть емкой, простой и с картинками! :)  Погнали!

Сразу оговорюсь: все что вы делаете, вы делаете на свой страх и риск. В статье описаны мои эксперименты, и я не призываю делать также!

Идея!

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

Модель счетчика "Миртек-12-ру-sp3-a1r1".

Железо:

1) WT32-ETH01. Готовая плата с ESP32 + Ethernet (Из минусов: нет USB-COM конвектора, Надо допаять керамический конденсатор на 10Мкф между ножками EN и GND).
2) DS3231. Часы. Была взята готовая китайская плата и распаяна.
3) CH340C. USB-COM конвектор + небольшой обвес для возможности программирования.
4) E07-M1101S. Модуль беспроводной связи на 433МГц.
5) MCP23017. Расширитель GPIO для светодиодов состояния.
6) SIM800L. GSM модуль для сотовой связи. Лучше брать несколько штук. Часто попадается брак.
7) DC-DC-LM2596. Готовый модуль питания. Требуется 2шт.
8) BME280. Модуль температуры и влажности. (Как дополнительная фишка!).

Дополнительно:
Корпус РЭА Z10-3 (100/68/50).
Корпус для датчика температуры.
Разъём телефонный для I2C датчика температуры.
Разъем питания.
Малая антенна.
Держатель батарейки.
Антенна для 433Мгц.
Антенна для GSM.
Разъем U.FL-R-SMT.
Трехпозиционный переключатель.

Схема устройства (фото кликабельно).

    Сама плата простая, однослойная. Дорожки 0.4 с зазором 0.4. По желанию можно увеличить. Применял SMD резисторы размера 0805. (У меня только такие). Их тоже можно поменять на больший размер. Применял готовые модули для понижения напряжения. Советую в них заменить переменный резистор на постоянный, дабы не иметь возможных проблем в дальнейшем. Питание ESP32 осуществляется напряжением 3.3в, а модель SIM800 питается от 4в. Питание всей схемы осуществляется напряжением 9-12в. С током не менее 2А. (Иначе не будет работать модуль SIM800). Светодиоды круглые 3мм.
    Питание датчика температуры осуществляется от линии 3.3в через телефонный разъем на 4 пина. Так же припаял разъёмы U.FL-R-SMT на радио модуль, и ESP32. Но тут без микроскопа обойтись будет трудно . Внешний датчик крепится термоклеем на металлический уголок. С платы датчика были выпаяны подтягивающие резисторы линий SCL и SDA. В корпусе просверлены отверстия 3.5мм (Шаблон прилагается) и закрыты изнутри мелкой сеткой приклеенной клеем секунда.

Фото внутренностей (фото кликабельно).

 

СОФТ.

    Сразу скажу, что я не программист, а электроника только мое хобби. Так что если знаете, как улучшить, дополнить, исправить, то я буду только рад.
    Программа написана в среде VS code platformio на базе Framework: Arduino. Из-за того, что применяется модуль SIM800 было принято решение использовать FreeRTOS на 3 задачи. После старта устройства происходит инициализация всех модулей и чтение конфигурационного файла «config.json» из памяти устройства. Далее идет анализ ошибок инициализации. Если есть ошибки по модулю часов или файловой системе, то устройство перезагрузится через 10с. Если все хорошо, то инициализируются задачи.

    Задача №1 «Engine_Task». В ней происходит весь алгоритм работы устройства, опрос модуля часов (раз в секунду), логика светодиодов, опрос датчика температуры (раз в минуту), снятие показаний (раз в час), логика попыток связи при неудачной отправке сообщений и многое другое.

    Задача №2 «Ethernet_Task». Все что связано с интернет-соединением, Web интерфейсом и работой с файлами находится тут.

    Задача №3 «SIM_Task». Тут вся логика работы с модулем SIM800. Отправка и прием сообщений, обработка запросов и мониторинг ответов модуля. Если модуль перестает отвечать или сыпет ошибками, то произойдет перезагрузка модуля с последующий инициализацией, не затронув другие задачи.

    Для доступа к общем ресурсам во FreeRTOS я применял «Mutex-ы», а для хранения кодов ошибок и флагов команд применял «EventGroup».

    Возможно это не совсем грамотно… Но для минимизирования использования Mutex я множил структуры данных для каждой задачи. ДА с точки зрения использования памяти это вообще не эффективно, но проект маленький и памяти хватает за глаза.
К сожалению, я не смог найти ответ как можно хотя бы считывать данные и не получить риск их повреждения другой задачей. Если вы знаете, как сделать это более элегантно, то дайте пожалуйста знать.

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

    Дополнительно я напичкал программу ЛОГ сообщениями. И в COM порте можно увидеть все что делает в данный момент устройство, а также выводится весь обмен сообщениями с модулем SIM800. Это все облегчает поиск неисправностей и быстрое их устранение.

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

WEB интерфейсу и управление.

    Для удобства WEB интерфейс разбит на блоки.

    Зеленые прямоугольники являются кнопками.
    Кружочки условными лампочками, сигнализирующими о наличии ошибок в модулях, неудачных попыток связи или опроса. Лампочка зеленая – Ошибок нет.

    Блок №1. Это номер электросчетчика. Для его изменения нажмите 2 раза на цифры. Откроется поле ввода, где можно изменить номер. Завершить ввод клавишей Enter. Для сохранения изменений нажмите кнопку «Сохранить».

    Блок №2. Информация о местоположении счетчика. Для его изменения нажмите 2 раза. Откроется поле ввода, где можно изменить адрес. Завершить ввод клавишей Enter. Для сохранения изменений нажмите кнопку «Сохранить».

    Блок №3. Информация о текущей дате и времени на устройстве. Для синхронизации с временем на ПК, нажмите на зеленую кнопку с датой и временем.

    Блок №4. Показания датчика температуры и влажности.

    Блок №5. Опрос электросчётчика. Выводит показания тарифов Т1, Т2 и их сумму. А также дату и время последнего удачного опроса счетчика. Для принудительного опроса нажмите на кнопку «Показания».

    Блок №6. Настройка отправки показаний. Галочками выбираем как хотим получать показания. Выкидным списком настраиваем периодичность отправки. Можно выбрать «Раз в час», «Раз в день», «Раз в неделю», «Раз в месяц». В зависимости от выбора откроется дополнительный выкидной список, где можно настроить день недели или определить дату. А также есть возможность задать время, когда будет осуществлена отправка показаний. Кнопки «SMS» и «Email» нужны для принудительной отправки показаний. (Своего рода тест связи).

    Блок №7. Информация о GSM модуле. Выводится название сети, где зарегистрировалась SIM карта и уровень сигнала. При нажатии на кнопку «SIM» откроется окно, где задается номер телефона получателя SMS сообщений. Для сохранения изменений нажмите кнопку «Сохранить». Проверить работоспособность можно нажав кнопку «SMS». При удачной отправке придет SMS, а лампочка будет зеленой.

    Блок №8. Настройка Wi-Fi. Выводится название подключенной Wi-Fi сети и уровень сигнала. Для настройки нажмите на кнопку «WiFi». В открывшемся окне нажмите на значок «Обновить» список сетей, выберете ваш Wi-Fi и укажите пароль от сети в поле ввода. Нажмите на символ «Дискета». Для сохранения настроек нажмите кнопку «Сохранить».

    Блок №9. Настройка IP адреса. Отображается настроенный IP адрес и состояние «пинга» DNS сервера и Шлюза. (Это удобно для отслеживания наличия доступа в интернет и зависания роутера). Все сетевые настройки являются статическими!!!! Для их настройки нажмите на кнопку с IP адресом. В открывшемся окне задайте настройки сети и нажмите на символ «Дискета». Для сохранения настроек нажмите кнопку «Сохранить».

    Блок №10. Настройки Email. Отображает Email получателя сообщений. Для настройки нажмите на кнопку «SMTP». Откроется окно, в котором необходимо заполнить все поля и нажмите на символ «Дискета». Для сохранения настроек нажмите кнопку «Сохранить». Проверить работоспособность можно нажав кнопку «Email». При удачной отправке вам на почту придет письмо, а лампочка будет зеленой.

       

    Кнопка «Сохранить» передает все настройки с WEB интерфейса в устройство и сохраняет их. При сохранении настроек из блоков 7,8,9 требуется перезагрузка устройства. В остальных случаях нет.
    Кнопка «Reboot» перезагрузит устройство.

    На лицевой панели устройства красными лампочками продублированы все ошибки блоков. Зеленые лампочки указывают на выбор интернет интерфейса. Рычажком можно переключить интерфейс. Устройство автоматически перезагрузится и инициализирует выбранный интерфейс.
    Кнопка Reset выведена для удобства.

    Так же есть возможность небольшого управления по SMS. Команда «Status» пришлет стандартный отчет по показаниям и статусам. Команда «ESPRestart» перезагрузит устройство.

Вид приходящих сообщений.

    На данный момент устройство тестируется в лабораторных условиях уже 3 недели без остановки, работает штатно. Полевые испытания будут летом.

Вот и весь проект. Берите, пользуйтесь, модернизируйте!

Всем спасибо что дочитали до конца. Всем пока!


Файлы:
Исходники и схема


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

16 2 1