Наконец то дошли руки доделать начатое: поставил датчики на три замка, а также поменял метод определения того, закрыт замок или нет. Сначала думал реализовать определение состояния замков с помощью аналогового входа A0 на плате NodeMCU, подключал датчики по такой схеме:
Согласно которой, в зависимости от замкнутого контакта изменялось сопротивление, далее NodeMCU на входе A0 считывает значение и в зависимости от напряжения вычислялось какие замки закрыты. Но использование микриков:
показалось ненадежным, поэтому решил поменять на модули TCRT5000, которые покупал тут, встроил их в дверь вот таким способом:
После чего, используя плату NodeMCU, подключил все модули и с помощью программы FLProg накидал программу, которая с помощью протокола MQTT будет передавать данные на сервер Умного дома. Также плата NodeMCU будет иметь Web-интерфейс, зайдя на который после авторизации, можно будет посмотреть состояние датчиков и поменять некоторые параметры. Ниже пример интерфейса. На данный момент на главной странице можно узнать о состоянии замков,
а на странице настроек можно включить режим отладки через порт UART (будет слать данные с указанного датчика при изменении), а также тут можно изменить длительность включения подсветки при открытии двери.
В дальнейшем планирую доработать прошивку, добавив в нее новый функционал и в веб интерфейс. Первое, что планирую, это добавить режим включения подсветки в зависимости от освещенности помещения и световую индикацию, если дверь находится в открытом состоянии слишком долго (забыли закрыть замки).
Как я писал выше, используя программу FLProg, написал прошивку. Прошивка состоит из нескольких плат:
Плата MQTT:
Отвечает за настройки MQTT, здесь берутся "Переменные пользователя" (такие как сервер MQTT, логин и пароль сервера), заданные в настройках и передаются в пользовательский блок "MQTT ESP main". С помощью этого блока в дальнейшем данные передаются на сервер.
Плата Light:
Эта плата отвечает за включение подсветки при открытии двери. Блок TOF подает логическую единицу на ВЫХОД "LightON" на определенное время, заданное в переменной "LightOn time", когда на его вход EN подается логическая единица.
PS: В принципе тут пока ничего сложного. В дальнейшем хочу доработать и сделать включение/ выключение плавным. Пока решил оставить так. Из-за вспышки Коронавируса в Китае, мне не пришла посылка, заказанная на Ali, в которой были светодиодные ленты и нужные реле.
Плата Debug:
Эта плата отвечает за вывод информации с датчиков в порт UART при изменении значений. По умолчанию плата не выполняется, но при необходимости в настройках Web-интерфейса можно включить выполнение, также указав какой датчик следует мониторить.
Плата Main:
Тут вся основная логика программы, если кратко описать ее, то данные с датчика замка передаются на MQTT сервер с помощью блока "MQTT ESP Pub", а также сохраняются в переменные. Как видно из схемы, она разбита на три идентичных блока, согласно количеству замков, а блок, отвечающий за открытие/закрытие двери берет данные с остальных блоков и также передает на сервер MQTT. Также данные сохраняются в переменные, которые используются при отображении или управлении информации по web-интерфейсу.
PS: Усли вам нужен будет файл проекта для программы FLProg, пишите в комментариях, могу вам выслать его на почту. А также если возникли дополнительные вопросы, оставляйте комментарии, постараюсь ответить.