GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino
Приветствую всех. В предыдущих частях я рассказал, как сделать GSM сигнализацию на ардуино. Затронул тему изготовления беспроводных датчиков для неё. Обещал сделать датчик, работающий по Wi-Fi. И в итоге так увлёкся, что переработал весь проект.
Итак, я решил, что мобильный GPRS это конечно хорошо, но будет ещё лучше, если сигнализация сможет подключаться к домашней Wi-Fi сети и общаться со смартфоном через интернет и мобильное приложение. Для этого мне понадобилась отдельная плата с Wi-Fi модулем. Я подключил к ардуине плату NodeMcu v3 с чипом esp8266. Управление сигнализацией реализовал со смартфона в приложении Blynk.
Для новой сигнализации спроектировал печатную плату, на которой могут разместиться:
- Arduino Nano V3.0
- NodeMcu v3 для выхода в интернет.
- SIM800L для мобильной связи.
- Радиомодуль NRF24L01 для приёма сигналов от беспроводных датчиков.
- ИК-приёмник
- Датчик температуры DS18B20.
- Термистор.
- Микроволновый датчик движения RCWL-0516.
- Зуммер.
- Микрофон.
- MOSFET транзисторы AO3400A для включения платы NodeMcu и внешних маломощных устройств.
- Разъёмы для подключения других датчиков
- Переключение на резервный источник питания
Кроме того, к свободным пинам могут подключаться любые другие ардуиновские датчики и модули.
Т.к. сигнализация модульная, можно выбрать ту конфигурацию, которая нужна именно Вам.
Связь может осуществляться через SIM800L или NodeMcu на выбор, либо с обоими модулями одновременно (рекомендуется). В последнем случае имеет два независимых канала связи, что более надёжно.
Ардуино и NodeMcu общаются по шине I2C. На плате выведены разъёмы для подключения датчиков по этой шине.
После сборки получаем неприметную коробочку, которую можно спрятать в недоступном месте. Идеально в сочетании с беспроводными датчиками.
Распиновка новой платы немного отличается от схемы предыдущего проекта. Поэтому я решил вынести прошивки в отдельный проект. Дальше будут выходить обновления только для этой платы. Новая версия скетча Signalka.ino подходит и для старого проекта. Ею можно обновляться. Необходимо лишь привести в соответствие номера зарезервированных пинов в файле https://github.com/wisenheimer/Signaling-Blynk/blob/master/l...
Прошивка для NodeMcu написана в среде Arduino IDE. Чтобы собрать проект, необходимо установить библиотеку для esp8266. Как это сделать, можете почитать, например, здесь https://habr.com/ru/post/371853/
Хочу обратить внимание, что с последней версией библиотеки у меня проект не заработал. Плата не хотела подключаться к серверам Blynk. Пришлось откатиться на версию 2.4.2. И проблема исчезла.
Для управления сигнализацией через плату NodeMcu нам надо создать в телефоне приложение Blynk. Это такой конструктор, в котором собирается мобильное приложение из готовых визуальных элементов - виджетов. За каждый виджет нужно платить местной валютой - энергией. Бесплатно даётся 2000 энергии. Если не уложиться в эту сумму, то дополнительную энергию можно докупить за реальные деньги. Мы же из соображений бережливости соберём приложение, которое стоит ровно 2000 энергии.
В статье я не буду затрагивать технические детали по созданию приложения Blynk, настройке и работе сигнализации. Всё это я изложил в файле описания проекта
https://github.com/wisenheimer/Signaling-Blynk/blob/master/R...
Перейдите туда, и следуя инструкции, создайте вот такое приложение:
После запуска и подключения к серверу Blynk увидим следующее:
В терминал будут выводиться сообщения сигнализации. Так же из него можно отправлять в сигнализацию команды управления (AT, СМС и DTMF команды).
Кнопки ALARM, GUARD и EMAIL в данной конфигурации означают флаги управления сигнализацией. Любой флаг можно включить и отключить из приложения нажатием на кнопку.
ALARM - флаг тревоги. Устанавливается в 1 при срабатывании одного из датчиков. Сбрасывается самостоятельно при завершении режима тревоги.
GUARD - флаг постановки на охрану.
EMAIL - флаг отправки сообщений сигнализации на указанную электронную почту. Так же включается и отключается из приложения.
Далее следует перечисление датчиков и их текущее показание. В данном примере у нас подключено два датчика:
18B20 - это датчик температуры DS18B20, распаянный на плате.
RADAR - микроволновый датчик движения RCWL-0516.
При срабатывании датчика на экране телефона появится сообщение тревоги
Если плата NodeMcu потеряет связь с сервером Blynk, то на телефон так же придёт сообщение.
Эти же сообщения отправятся на указанный вами в настройках e-mail.
Как видите, интерфейс очень простой. И при этом полностью функционален. Позволяет осуществлять полный контроль над сигнализацией. И при этом полностью бесплатен!
Можно было бы добавить графики и дополнительные визуальные плюшки. Для этого понадобилось бы докупить энергии. Каждый в праве доработать проект под себя. Я же ограничусь бесплатной версией.
Теперь несколько слов о том, как создать и подключить беспроводной Wi-Fi датчик.
В предыдущей своей статье я описал беспроводной датчик на ардуино с ИК-передатчиком.
Wi-Fi датчик представляет из себя тоже самое, только для связи мы используем радиомодули nRF24L01. Передающий в датчике, принимающий в сигнализации. Под этот модуль уже предусмотрено место на плате сигнализации. Учтите, что при его использовании будут заняты 9, 10, 11, 12 и 13 пины платы ардуино. По этой причине не возможно одновременное использование ИК и Wi-Fi приёмников.
Схема соединения выглядит следующим образом
Скетч проекта лежит по этой ссылке
https://github.com/wisenheimer/Signaling-Blynk/blob/master/n...
Там необходимо будет указать свои датчики, подключенные к ардуино.
В скетче задано два датчика. Вам нужно только вписать свои.
Sensor sens[SENS_NUM]=
{
Sensor(DOOR_PIN,DIGITAL_SENSOR, "DOOR", HIGH, 0),
Sensor(5, DIGITAL_SENSOR, "MOVE", LOW)
};
Первый датчик это геркон, второй - датчик движения.
Пин DOOR_PIN зарезервирован под геркон и соответствует 4 пину ардуины.
При срабатывании любого из этих датчиков по Wi-Fi будет отправлено сообщение RF_CODE, которое примет сигнализация, и включит режим тревоги.
Соответственно в скетче сигнализации нужно аналогично прописать беспроводной датчик
Sensor sens[SENS_NUM]={
Sensor(DOOR_PIN, DIGITAL_SENSOR,"DOOR", HIGH, 0),
Sensor(DOOR_PIN, DS18B20, "18B20", LOW, 10, 45),
Sensor(A7, TERMISTOR, "TERM", LOW, 10, 45),
Sensor(6, DIGITAL_SENSOR,"RADAR",LOW),
#if RF_ENABLE // Датчик с Wi-Fi модулем nRF24L01
Sensor( RF24_SENSOR, "Koridor",RF0_CODE),Sensor( RF24_SENSOR, "Zal",RF1_CODE)
#endif
};
В примере заданы два беспроводных Wi-Fi датчика, где
RF24_SENSOR - тип датчика
"Koridor" и "Zal" - имена датчиков, которые будут выводиться в сообщениях
RF0_CODE и RF1_CODE - индивидуальные коды RF_CODE, которые отправляют датчики при срабатывании.
В будущем постараюсь добавить поддержку Blynk в прошивку ардуино с модемом SIM800L. Чтобы можно было обойтись без NodeMcu. Пока на всё это не хватает времени.
Скачать проект можно по ссылке https://github.com/wisenheimer/Signaling-Blynk
Arduino & Pi
1.4K постов20.6K подписчиков
Правила сообщества
В нашем сообществе запрещается:
• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)
• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском
• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)
• Рассуждать на темы политики
• Нарушать установленные правила Пикабу