Прорывная технология обмена сообщениями

О чем эта статья.

В статье рассказано об опыте создания простого устройства передачи данных на микроконтроллере ESP8266 с помощью мессенджера «Телеграмм».

Что Вам понадобится.

Наличие доступа к интернету через сеть WiFi 2.4ГГц на объекте. Скорость не важна, объем трафика мал, обычного роутера с sim – картой вполне достаточно. Микроконтроллер NodeMcu V3 ESP8266, c шилдом Base_ver1.0 для удобства монтажа, плюс стабилизатор на плате дают широкий диапазон входного напряжения. Набор датчиков и сенсоров в зависимости от того какие параметры среды необходимо контролировать это может быть температура, влажность, дверные контакты, PIR-сенсор, датчик освещенности, акустический сенсор, датчик дыма. В качестве исполнительных устройств могут применяться контакты реле, Mosfet драйвер, либо драйвер двигателя.

Для кого эта статья.

Статья предназначена для людей, которые хотят реализовать не дорогой проект по мониторингу различных параметров среды на удаленном объекте. Базовое понимание платы и ее программирование ее является преимуществом.

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

 При подаче питания на AC-DC преобразователь 220В в 5в начинает заряжаться аккумулятор 18650, через плату заряда TP4052 тем самым обеспечивается автономность работы устройства 2-3ч, в случае выключения сетевого напряжения. Чтобы обеспечить NodeMcu V3, необходимым уровнем входного напряжения 6-10В, применена плата повышающего стабилизатора MT3608. Функциональная схема устройства на Рис.1

Для сбора данных о состоянии объекта, используется датчик температуры DS18B20 и датчик RCWL-0516 он определяет движение с помощью эффекта Доплера и микроволн. Исполнительным устройством является релейный модуль SRD-05VDC-SL-C который коммутирует сетевое напряжение 220В мощностью 2квт. Например для вкл/выкл тепловентилятора в холодное время. Отключение происходит по таймеру через 3часа. Отслеживание сетевого напряжения происходит с помощью резисторного делителя 43к и 51к подключенного к выходу AC-DC 5В т.о. при наличии сети 220В, на цифровом входе D11, логическая единица а при отсутствии сети ноль. Т.К. имеется автономное питание, то сообщения в мессенджер отправляются. Состояние самого аккумулятора контролируется с помощью 10 разрядного АЦП. На вход A0 поступает напряжение в диапазоне 2.5-4.2В от 18650. На плате NodeMcu V3 предусмотрен делитель 220к и 100к поэтому такое напряжение безопасно для микросхемы.

Механическая часть 

При грамотном размещении все модули можно уместить, в монтажную коробку 100х100 привинтив часть модулей с внешней стороны. Но у меня оказался под рукой, корпус Gainta 2113  150х200х30 в нем все свободно расположилось, монтаж занял минимум времени. Результат на Рис 2.

Была взята пластина (ненужная печатная плата) вырезана в размер основания корпуса.  На ней с помощью шестигранных стоек М2.5х6 закрепил плату контроллера, повышающего DC-DC, и реле. Все хорошо видно на Рис 4.  Остальные модули без крепежных отверстий просто приклеил на текстильную застежку с липким слоем. Держится отлично, монтируется быстро. Датчик температуры DS15b20 закреплен на внешней стороне для точности измерений, а RCVL-0516 удалось на шлейфе протиснуть через прорезь сделанную в боковой стенке. На Рис. 3 наглядно показано это.

Полностью себя оправдало применение клеммных колодок ЗПС4-10, для навесного монтажа не заменимая вещь.

Программная часть

Скетч написан в среде разработки Arduino IDE c использованием стандартного набора библиотек «WiFiClientSecure.h», «UniversalTelegramBot.h», «ArduinoJson.h», «OneWire.h» «DallasTemperature.h».  Программировал методом отдельных процедур, но все работает. Старался сделать универсальную программу, чтобы в дальнейшем использовать готовые части кода в других проектах. В основе программы циклический алгоритм, в котором каждый элемент выполняется по таймеру. Период таймера ~120мС. C помощью конструкции switch/case происходит переход по метке и выполнение инструкции. Полностью алгоритм приведен на Рис. 5

При отправке команды /start, бот присылает список команд, на которые он откликается.

Далее нажимая на строчку сообщения, оно будет автоматически отправляется. А через несколько секунд, возвращаться ответ.

Хочется остановиться на важных моментах. Чтобы повысить скорость распознавания тревог от датчика движения RCVL-0516 рекомендую настроить внешнее прерывание на его сигнальном входе. Т.е по прерыванию просто поднимается флаг «singl_send» датчик сработал. А отправка сообщения в мессенджер, происходит в основном цикле программы, при условии что кнопка вкл/выкл_охрана была нажата. После отправки флаг «singl_send» сбрасывается. Рис. 7 текст отправляемого сообщения

Полезной функцией оказалось отправка отчета о состоянии бота один раз в сутки. Он содержит информацию о напряжении «сеть есть/нет» «Охрана вкл/выкл» и «Т град С°». Момент отправки определяется по времени UTC. Текущее значение, сравнивается с константой (например 8:20). В случае совпадения происходит отправка.

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

Спасибо всем кто дочитал до конца. Буду рад, конструктивной обратной связи по этому направлению DIY.

P.S.

Текст программы не привожу, т.к. много страниц и куча настроечных параметров, которые индивидуальны. Переделывать это, равносильно заново написать. Но тем кто непременно захочет посмотреть его, выкладываю ссылку на Яндекс диск.

Комментарии (12)


  1. shadrap
    23.06.2022 21:51
    +1

    я уже отстал, у 3й версии нодемсу уже 9,10,11 гпио доступны к использованию?

    RCRCWL-0516в

    вы его реально в полях пробовали или только дома на столе? по моему мнению он не годится как сенсор присутствия от слова никак.... и даже более навороченный 5Ггц то ж не годится ибо срабатывают как бог на душу....


    1. Jemmax Автор
      23.06.2022 22:45

      По поводу RCVL-0516 я в 20 году на али брал несколько штук сразу, у меня ни каких вопросов к этим модулям нет сейчас все работают, без ложных срабатываний и весьма чувствительны. Через OSB стену 9мм присутствие человека определяют с вероятностью 98%. А брал через год, осенью 21 года у другого продавца. Проверил на столе есть отличие чувствительность хуже стала, хотя по печатной плате все одинаково с прежним. Видимо настоечные резисторы другие.


  1. georgevp
    23.06.2022 22:15
    +1

    Может быть, стоит поправить?


    1. Jemmax Автор
      23.06.2022 22:50

      Полностью согласен с Вами "Device_status" с грамматикой у меня всегда трудно было.


  1. eteh
    23.06.2022 23:00
    +1

    А смысл датчика наличия/отсутствия, если можно поставить условные сухие контакты на двери и снимать данные по фронтам? Таймер же можно +- на оптимальное время нахождения выставить в помещении для условия «зашел-вышел»…


    1. Jemmax Автор
      24.06.2022 11:13

      Полностью согласен с Вами. Дверной контакт, смк (магнито-контактный датчик) правильное решение. Но монтажные работы в этом случае весьма усложняются протягиванием проводов, креплением их. Установкой контактных колодок, обеспечением надежного соединения. У меня цель была сделать устройство, с максимально простым монтажом. У которого, только одно подключение сеть 220В. Микроволновый датчик вполне успешно справляется с задачей определения движения в радиусе 3-5м. У меня блок висит напротив входа в временное помещение. Причем первое сообщение о тревоге прилетает когда, только стою перед дверью, замок навесной снимаю. Сначала думал что ложные тревоги, но потом понял что стены, двери из ОСБ это радиопрозрачный материал.
      Таймер «зашел-вышел» действительно можно прикрутить. Но проще мне кажется сообщение отправить /Ohrana_On_Off когда уже выехал с объекта. За одно убедиться что телефон не забыл ;)


  1. deelayka
    24.06.2022 10:41
    +1

    Контроллер зарядки TP40526 нельзя использовать с аккумулятором в буферном режиме, из-за постоянного наличия тока нагрузки в цепи зарядки, зарядка аккумулятора никогда не прекратится. Надо добавить подачу напряжения в обход зарядки, схемы можно найти по запросам TP4056 power path / TP4056 load sharing.


    1. Jemmax Автор
      24.06.2022 12:11

      Спасибо большое. Честно даже не задумывался над этим, теперь буду знать. Припаять mosfet, диод и резистор не сложно. За одно проверить, это схемное решение.


  1. Melias
    24.06.2022 11:04
    +1

    Правильно я понимаю, что устройство содержит в себе датчик движения, датчик температуры и реле на 10А?

    А почему не воспользоваться готовым изделием, например - Sonoff TH10? (а лучше TH16, в котором реле на 16А, что для вашей нагрузки в 2 КВт явно больше подходит)

    Или Sonoff TH Elite, там вообще 20А и еще и дисплей есть, что иногда оказывается полезно

    Внутри у них все тот же esp8266, который прошивается чем угодно - Tasmota, ESPHome, ESPEasy, можно ваш скетч использовать, а можно оставить китайское облако с его уведомлениями и автоматизациями.

    Что касается датчика движения, то его можно посадить на свободные распаяные контакты sonoff и запитать от них же (HC-SR602 или AM312 которым хвтатает 3.3В )

    Все это будет по бюджету дешевеле, а по потраченному времени - несопоставимо меньше.

    (ну и конечно есть куча других альтернатив - от shelly, tuya, xiaomi и еще десятки брендов и экосистем)

    Хотя если это хобби и желание что-нибудь попаять на досуге, то тогда это вполне оправданный проект )

    PS А еще первая фраза статьи "Прорывная технология обмена сообщениями" - немножечко дезориентирует, честно говоря. Не совсем понятно, к чему она относится.


    1. Jemmax Автор
      24.06.2022 14:27

      Правильно я понимаю, что устройство содержит в себе датчик движения, датчик температуры и реле на 10А?
      - Все верно Дат_Движ, Дат_темп, Реле, и Датчик наличия внешней сети 220В. Можно включить еще RSSI на wi-fi. Все это питается от UPS на 5В
      А почему не воспользоваться готовым изделием, например - Sonoff TH10? (а лучше TH16, в котором реле на 16А, что для вашей нагрузки в 2 КВт явно больше подходит)
      - У меня есть несколько Sonoff устройств, действительно если просто реле вкл/выкл через eWeLink удобная штука. Но уже хочется гораздо большего. Хотя бы адекватного измерение температуры, не один раз в час. Плюс весьма задумчивый софт в телефоне утомляет.
      Или Sonoff TH Elite, там вообще 20А и еще и дисплей есть, что иногда оказывается полезно. Внутри у них все тот же esp8266, который прошивается чем угодно - Tasmota, ESPHome, ESPEasy, можно ваш скетч использовать, а можно оставить китайское облако с его уведомлениями и автоматизациями.
      - Да экран есть выглядит классно и цена в целом соответствует. Но вот чтобы прошить чем то другим это танцы с бубном. Нет штатного разъема программирования, нужно как то на ножки подпаивать. С Tasmota, ESPHome, ESPEasy тоже не все гладко это ведь кем то написанные программы и к ним нужно приспосабливать свои желания и возможности.
      Что касается датчика движения, то его можно посадить на свободные распаяные контакты sonoff и запитать от них же (HC-SR602 или AM312 которым хвтатает 3.3В )
      Припаять можно но софт переделать под эту новую функцию. Лично для меня это гораздо сложнее чем с чистого листа сделать свой девайс.
      Все это будет по бюджету дешевеле, а по потраченному времени - несопоставимо меньше.
      Вот тут я бы поспорил Sonoff TH Elite 16A/20FА с АМ3201 сенсором стоит 1518р у меня по цене за комплектующие выходит +/- тоже самое.
      Потраченное время, - сомневаюсь что меньше будет, с учетом опыта который уже есть. Скорее нет, чем да. Самое важное на выходе получается устройство, которое заточено под мои цели и задачи, они даже могут поменяются немного. Переписываю программу, и все опять работает.
      (ну и конечно есть куча других альтернатив - от shelly, tuya, xiaomi и еще десятки брендов и экосистем)
      У каждого из этих вариантов свои особенности и нюансы. Все это зависит от работающего облака и доступа к нему. В текущих реалиях только бы не заблочили.
      Хотя если это хобби и желание что-нибудь попаять на досуге, то тогда это вполне оправданный проект )
      Это верно Хобби есть хобби когда для души оно всегда приятно.
      PS А еще первая фраза статьи "Прорывная технология обмена сообщениями" - немножечко дезориентирует, честно говоря. Не совсем понятно, к чему она относится.
      Не могу не согласиться с Вами «Прорывного тут крайне мало» но просто так получилось ;)


  1. GeorgeIV
    24.06.2022 11:55
    +1

    Как защищаете систему от посторонних? Любой может послать сообщение и отключить систему?


    1. Jemmax Автор
      24.06.2022 14:43

      Отправить сообщение действительно может любой человек для этого нужно просто знать имя бота. Но выполняться они будут только с того устройства или из того чата где совпадает CHAT ID
      // использую полученные данные из сообщений
      #define CHAT_ID "-5*4*3*7*1, 3*4*76*1" // чат "боты дача", + мой ID
      // Это мы выполняем если пришло новый запрос с телефона
      void handleNewMessages(int numNewMessages) {
      Serial.println("handleNewMessages");
      Serial.println(String(numNewMessages));

      for (int i = 0; i < numNewMessages; i++) {
      // Chat id of the requester
      String chat_id = String(bot.messages[i].chat_id);
      if (chat_id != CHAT_ID) { // ** в этой строчке проверятся доступ к выполнению команд **
      bot.sendMessage(chat_id, "Неизвесный_пользователь", ""); // "Unauthorized user"
      continue;
      }