Проект локальных беспроводных устройств к каждом из которых подключается датчик (температуры, влажности), датчик движения, различные устройства с цифровым выходом, которые можно использовать для охраны. Вся информация, выводится на смартфон, также как и управление и настройка.

Данное устройство разрабатывалось на основе микроконтроллера esp32 (ap), esp8266 (node) и смартфона os Android. 

Программа для микроконтроллеров написана на языке Си для андроид на языке Котлин (скачать возможно по ссылке download). 

Каждый из микроконтроллеров подключенный в данном проекте имеет одинаковые функции. Максимальное количество node можно подключить 20 штук.  

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

 

Схема беспроводной связи esp8266--esp32--osAndroid
Схема беспроводной связи esp8266--esp32--osAndroid

 

Схема беспроводной связи протокол MQTT esp8266--esp32--internet broker---clients
Схема беспроводной связи протокол MQTT esp8266--esp32--internet broker---clients

Каждый из портов можно настроить функционалом выбираемым в настройках node.   

Перечислим специальные функции:  

1 порт — регулятор температуры

Задаём среднее значение и гетерезис, выбираем включение порта на повышение или на понижение температуры. Подключаем подогреватель или охладитель. 

2 порт — регулятор влажности

Задаём среднее значение и гетерезис на повышение влажности. Подключаем увлажнитель.   

3 порт — оповещение

Порт включится после превышения температуры (работает как пожарная сигнализация), после появления высокого уровня на INP1 или INP2, если активирована сигнализация (охрана или 24/7). Подключаем сирену. 

4 порт — по событию (возможно совмещать с таймером)

Подключаем любое устройство с отключением или включением при появлении высокого уровня на INP2. 

5 порт — освещение

Имеет функционал для управления освещением и включением порта от INP1. Подключаем led лампу при появлении высокого уровня на INP1, включается порт на заданный промежуток времени (возможно плавное включение).  

Кроме специальных функций с 1 по 4 порт возможно установить: 

  • таймер время с выбором дня недели (2 режима),

  • таймер цикл. 

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

INP1, INP2 порт — настроен на входные значения т.е. при появлении высокого уровня:

  • INP1 если активирован 5 порт произойдет включение 5 порта (плавный запуск). Включение датчика движения на порт INP1 позволяет производить включение порта 5 на промежуток времени (5-120 сек), при необходимости можно установить отключение в дневной период. 

-  INP1, INP2 если активирована сигнализация (охрана или 24/7), включится оповещение (порт 4) и (или) звуковой сигнал на смартфоне. Возможно изменить статусы контактов (на INP1, INP2), установить контакты нормально-разомкнутые  или нормально-замкнутые.  

На каждый из входных портов возможно назначить функции сигнализации (охрана или датчики 24/7). Датчики 24/7 позволяют мониторить различные датчики к примеру (дыма, утечки воды, пожарные извещатели).

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

Установку времени осуществляем следующим образом: 

-- при каждом новом запуске esp32:  

->обновление через node, если нет

->обновление через смартфон, если нет

->обновление через интернет. 

-- при каждом новом запуске esp8266: 

->обновление через esp32. 

Все данные передаются на смартфон, интерфейс программы выглядит таким образом. 

Каждый node имеет поля со значениями температуры, влажности, статусы портов, текущее время. Каждый порт имеет информацию о настройках порта, поле для изменения статуса. Информацию о изменении температуры, влажности статусы INP1, INP2 в течении часа, в виде графиков.  

Программа позволяет осуществлять настройку параметров в esp32, esp8266 в удобном и интуитивно понятным способом.

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

Пример для быстрого подключения и создания минимальной обвязки к esp32 devboard
Пример для быстрого подключения и создания минимальной обвязки к esp32 devboard
Пример для быстрого подключения  и создания минимальной обвязки к esp8266 devboard mini
Пример для быстрого подключения  и создания минимальной обвязки к esp8266 devboard mini

 

Ссылка по подробному описанию интерфейса программы 

Ссылка на загрузку прошивку, программы, схемы

Ссылка на видео как запрограммировать микроконтроллер, настроить программу подробно показано в видео «первый запуск»

Ссылка на видео описания проекта 

Обсуждения, вопросы

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


  1. nikolz
    15.06.2025 03:45

    Задаём среднее значение и гетерезис

    Может быть гистерезис?


    1. TINLAB Автор
      15.06.2025 03:45

      Всем верно моя ошибка.


  1. nikolz
    15.06.2025 03:45

    У ESP8266 только два пина не создают импульсы при включении питания. У Вас исполнительные элементы подключены ко всем пинам. Как ведет себя ваш умный дом, когда сетевое питание отключается , а потом включается?


    1. TINLAB Автор
      15.06.2025 03:45

      При отключении питания. Все как обычно перезагрузка. Обновление времени с esp32, и по заданным параметрам.


    1. randomsimplenumber
      15.06.2025 03:45

      За эти пару миллисекунд исполнительные элементы ничего особого не исполнят.


      1. nikolz
        15.06.2025 03:45

        Вы это у DeepSeek узнали или сами придумали?

        Из своего опыта могу сообщить, что у ESP8266 время выполнения первичного загрузчика составляет примерно 30 миллисекунд. Потом работает второй загрузчик.

        А на пинах будет вот это:

        За это время успеют сработать реле и не только и не один раз.

        Если в умном доме будет управление кранами или нагревателями,

        то можно получить потоп или пожар.


        1. TINLAB Автор
          15.06.2025 03:45

          На пинах при перезапуске будет то, что заданно при инициализации. По умолчанию 0, а дальше по параметрам.


          1. nikolz
            15.06.2025 03:45

            Вы не угадали. На пинах будут импульсы. Они появятся до их инициализации и генерируются внутренней схемой чипа. Этой проблеме у ESP8266 уже 10 лет, а вы и не знаете это.

            Напряжение на выводах будет соответствовать установленному Вами при инициализации примерно через 100 миллисекунд после включения питания. До этого момента будет что угодно (см в таблице)


            1. TINLAB Автор
              15.06.2025 03:45

              Очень интересно. Если эта проблема и есть то при запуске это не актуально. На днях доберусь до анализатора проверю.


        1. randomsimplenumber
          15.06.2025 03:45

          потоп или пожар

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


          1. nikolz
            15.06.2025 03:45

            Я не возражаю, делайте себе такой умный дом.

            Проблема уже давно решена. Статья запоздала лет десять.

            Cтавить ESP32 не имеет смысла так как ESP8266 может работать одновременно и с ESP-NOW и c WiFi . Но это все уже устарело.


            1. randomsimplenumber
              15.06.2025 03:45

              Я тоже не возражаю, если кто-то делает себе умный дом ;)

              это все уже устарело

              А что сейчас в тренде?


              1. nikolz
                15.06.2025 03:45

                ESP32C3, ESP32H2. - RISC-V.

                Но если не надо WiFi, то интереснее чипы :

                TLSR82xx,TLSR83xx, NRF52840,CH582F,CH584F,PHY6252


                1. randomsimplenumber
                  15.06.2025 03:45

                  Термометр на esp32 будет быстрее измерять температуру чем на 8266?

                  Так то я и не возражаю, новые чипы лучше. Но в подобном проекте пофиг.


            1. TINLAB Автор
              15.06.2025 03:45

              Esp32 работает с ble (для андроида) и esp-now, и нужен как точка доступа всех остальных ESP 8266. Но ESP-now не может работать одновременно с wi-fi. В данном проекте для mqtt происходит переключение, и приостановка очередей для ESP-now, но это быстро максимум 7 сек.


              1. nikolz
                15.06.2025 03:45

                Это очень плохое решение, так как ESP32 в режиме BLE потребляет очень много , что противоречит самой идее BLE. Вообще все чипы ESP имеют очень плохой энергетический баланс и требуют источники с большим импульсным током. В настоящее время много чипов позволяющих строить умные дома с энергопотреблением в 10 -100 раз меньше чем на ESP.

                Вариант на ESP - это скорее игрушка, чем серьезное решение.

                Если очень хочется, то можно все сделать на ESP8266 и использовать WiFi. более того WiFi позволяет обращаться в интернет и реализовать голосовое управления или еще какие-то модные приблуды. и это будет и дешевле и проще и менее потребляемое.


                1. TINLAB Автор
                  15.06.2025 03:45

                  Не согласен. Esp очень крут при правильном коде.


                  1. nikolz
                    15.06.2025 03:45

                    Для каких задач?

                    Назовите хотя бы одну в умном доме, которую Вы решили на ESP32 и не смогли решить на ESP8266.


                    1. TINLAB Автор
                      15.06.2025 03:45

                      В ESP 32 больше пинов и ещё есть идеи как из использовать, в отличии от ESP 8266, где все уже заняты в этом проекте.


                1. TINLAB Автор
                  15.06.2025 03:45

                  Скачек потребления при запуске, затем обычное потребление, передача пакетами.


                  1. nikolz
                    15.06.2025 03:45

                    Вы опять ошибаетесь. Причем здесь запуск. При передаче работает передатчик. Он потребляет до 400 мА у ESP32 и до 300 mA у ESP8266. Если модем не отключаете то работает всегда приемник - это 70 mA..

                    В вашем решении у Вас ESP32 всегда включено.

                    --------------------

                    На хабре есть моя статья как уменьшить потребление ESP8266 в 10 раз.

                    Суть в том, что ESP8266 являются датчиками или исполнительными элементами и они могут спать. Можно реализовать время активности в режиме WiFi не более 0.1 сек и нет надобности в ESP-NOW. При этом число узлов не ограничено 20-ю.


                    1. TINLAB Автор
                      15.06.2025 03:45

                      Если будут спать когда им работать или они вообще не нужны.


                      1. nikolz
                        15.06.2025 03:45

                        Действительно. Но есть время, когда им работать не надо. В это время они будут лишь греть воздух.

                        Например, Вы на работе 8 часов. а еще Вы 7 часов спите. В итоге Вам 15 часов из 24 не нужно щелкать выключателем .

                        Все это время ESP, которая включает вашу любимую лампочку,

                        будет бездействовать но потреблять как эта лампочка.

                        Правда, прикольно.


                      1. TINLAB Автор
                        15.06.2025 03:45

                        Здесь не только лампочка, изменение температуры контроль, регулятор, таймеры если заснёт код не работает. И вообще он же робот пусть работает 24/7 и выполняет задачи. Если не нужен выключи и не трать энергию на сон.


                1. TINLAB Автор
                  15.06.2025 03:45

                  Вывод информации и изменение параметров как вы планируете осуществить. По любому wi-fi более прожорлив чем ble.


                  1. nikolz
                    15.06.2025 03:45

                    Посмотрите мои статьи на хабре о том как уменьшить потребление ESP8266.

                    Но в вашей задаче потребление не принципиально, так как Вы не сможете применить питание от батарейки. Если надо от батарейки то надо брать модуль BLE и это не ESP32.


                    1. TINLAB Автор
                      15.06.2025 03:45

                      Так какая проблема запитать esp32, а esp8266 если нужно вешайте на батарейку.


                      1. nikolz
                        15.06.2025 03:45

                        А зачем?


            1. TINLAB Автор
              15.06.2025 03:45

              И ещё связка ESP 32(ble)--андроид, и ESP 32(wifi)--андроид, не одно и тоже. Потому как потребление намного меньше.


              1. nikolz
                15.06.2025 03:45

                Для ESP32 это не так.

                Потребление будет практически одинаковое.

                Более того, питание все равно надо делать от сети.


  1. nikolz
    15.06.2025 03:45

    1) Какое потребление?

    2)Сколько времени уходит на восстановление работы устройств при сбое в питании?

    3) Как опознается зависшее устройство? Как устраняется эта проблема?


    1. TINLAB Автор
      15.06.2025 03:45

      1. Потребление как мануале. Задействован протокол esp-now.

      2 Обычный сброс происходит мгновенно.

      3. Сброс может произойти при отсутствии питания. Загружайте тестируйте.


      1. lapot2
        15.06.2025 03:45

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

        Заинтересуйте читателя вкусным описанием параметров загрузить и протестировать это.


  1. lapot2
    15.06.2025 03:45

    Я конечно же заплюсил для поддержки начинающего автора, но есть один вопрос...

    В чём суть статьи, да ещё и с кучей грамматических ошибок?
    Не могли бы вы об этом рассказать подробнее? Вы этим хотите продвигать свою программу liknode?

    —Выходные порты—
    Выходные порты имеют обвязку
    в виде полевых транзисторов npn. Это значит на выходе разрыв gnd, что позволяет подключать внешнее питание.

    Это цитата вашего текста из вашего телеграм-канала. Очень плохо.

    Но вы можете всё это быстро исправить, если захотите.


    1. TINLAB Автор
      15.06.2025 03:45

      Исправил.