GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino

GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino Сигнализация, Arduino, Esp8266, Sim800l, Gprs, Blynk, Длиннопост

Приветствую всех. В предыдущих частях я рассказал, как сделать 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. На плате выведены разъёмы для подключения датчиков по этой шине.

GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino Сигнализация, Arduino, Esp8266, Sim800l, Gprs, Blynk, Длиннопост

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

GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino Сигнализация, Arduino, Esp8266, Sim800l, Gprs, Blynk, Длиннопост

Распиновка новой платы немного отличается от схемы предыдущего проекта. Поэтому я решил вынести прошивки в отдельный проект. Дальше будут выходить обновления только для этой платы. Новая версия скетча 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...

Перейдите туда, и следуя инструкции, создайте вот такое приложение:

GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino Сигнализация, Arduino, Esp8266, Sim800l, Gprs, Blynk, Длиннопост

После запуска и подключения к серверу Blynk увидим следующее:

GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino Сигнализация, Arduino, Esp8266, Sim800l, Gprs, Blynk, Длиннопост

В терминал будут выводиться сообщения сигнализации. Так же из него можно отправлять в сигнализацию команды управления (AT, СМС и DTMF команды).

Кнопки ALARM, GUARD и EMAIL в данной конфигурации означают флаги управления сигнализацией. Любой флаг можно включить и отключить из приложения нажатием на кнопку.


ALARM - флаг тревоги. Устанавливается в 1 при срабатывании одного из датчиков. Сбрасывается самостоятельно при завершении режима тревоги.

GUARD - флаг постановки на охрану.

EMAIL - флаг отправки сообщений сигнализации на указанную электронную почту. Так же включается и отключается из приложения.


Далее следует перечисление датчиков и их текущее показание. В данном примере у нас подключено два датчика:

18B20 - это датчик температуры DS18B20, распаянный на плате.

RADAR - микроволновый датчик движения RCWL-0516.


При срабатывании датчика на экране телефона появится сообщение тревоги

GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino Сигнализация, Arduino, Esp8266, Sim800l, Gprs, Blynk, Длиннопост

Если плата NodeMcu потеряет связь с сервером Blynk, то на телефон так же придёт сообщение.

GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino Сигнализация, Arduino, Esp8266, Sim800l, Gprs, Blynk, Длиннопост
GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino Сигнализация, Arduino, Esp8266, Sim800l, Gprs, Blynk, Длиннопост

Эти же сообщения отправятся на указанный вами в настройках e-mail.


Как видите, интерфейс очень простой. И при этом полностью функционален. Позволяет осуществлять полный контроль над сигнализацией. И при этом полностью бесплатен!

Можно было бы добавить графики и дополнительные визуальные плюшки. Для этого понадобилось бы докупить энергии. Каждый в праве доработать проект под себя. Я же ограничусь бесплатной версией.


Теперь несколько слов о том, как создать и подключить беспроводной Wi-Fi датчик.

В предыдущей своей статье я описал беспроводной датчик на ардуино с ИК-передатчиком.

Wi-Fi датчик представляет из себя тоже самое, только для связи мы используем радиомодули nRF24L01. Передающий в датчике, принимающий в сигнализации. Под этот модуль уже предусмотрено место на плате сигнализации. Учтите, что при его использовании будут заняты 9, 10, 11, 12 и 13 пины платы ардуино. По этой причине не возможно одновременное использование ИК и Wi-Fi приёмников.


Схема соединения выглядит следующим образом

GSM/GPRS/Wi-Fi+Blynk сигнализация на Arduino Сигнализация, Arduino, Esp8266, Sim800l, Gprs, Blynk, Длиннопост

Скетч проекта лежит по этой ссылке


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 запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

Вы смотрите срез комментариев. Показать все
9
Автор поста оценил этот комментарий

А зачем ардуина, nodemcu гораздо мощнее, я думаю можно запилить на ней исключительно

раскрыть ветку (50)
7
Автор поста оценил этот комментарий

Пинов мало. Менее стабильная. Тогда уж лучше сразу на ESP32.

раскрыть ветку (41)
2
Автор поста оценил этот комментарий

А  можно ли переделать проэкт под STM32 Blue Pill?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Можно, только планов таких нет. Не вижу смысла.

1
Автор поста оценил этот комментарий

Мене стабильная - это слабо сказано ))) Это скорее игрушка для получения опыта.

раскрыть ветку (9)
Автор поста оценил этот комментарий

А чем она нестабильная? У меня больше полутора лет провалялась на подоконнике с подключенным ds18b20 и скетчем, отсылающем температуру за окном на narodmon. Не работала временами лишь потому, что руками ее задевали и датчик отваливался.

раскрыть ветку (8)
3
Автор поста оценил этот комментарий

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

раскрыть ветку (7)
Автор поста оценил этот комментарий

4 ds18b20, 1 dht( типа уровень со2), 1 bpm( темп и влажность), пол года от розетки без сбоев и зависаний. Слало на Телеграмм по критериям+народный мониторинг постоянно+ локальный сервер внутри. И это простая Есп 8266. Может вы управляли высоковольтным чем-то, что сильные помехи слало в пространство. Того оно и залипало.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Пока писал приложение Blynk, очень часто падало при обмене данными с ардуиной по i2c. Пытался создать двумерный динамический массив, чтобы очищать память когда он не нужен. Вижу что делаю всё правильно. С++ знаю хорошо. Но вот начинает глючить и перезагружаться. Оставил только один массив динамическим, остальные сделал обычными глобальными. Работает как часы. Понимаю что дело не в чипе, а в его компиляторе, который кривой. С ардуиной таких проблем нет. Под есп программировать нужно с ограничениями. А не так как привык.

Ещё были случаи, когда запускал долгую задачу, есп перезагружался по вотчдогу. Что меня раздражает. Поэтому он мне не нравится.

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

В задачах, где надо просто снимать показания датчиков, он хорош.

Автор поста оценил этот комментарий
Для этого есть прерывания, DMA, аппаратные буферы, распределение времени на задачи
раскрыть ветку (3)
1
Автор поста оценил этот комментарий

Для этого есть ARM. В esp8266 нет DMA. Serial использует программный буфер. Не годится этот чип для систем реального времени.

раскрыть ветку (2)
Автор поста оценил этот комментарий
Можно и без Арма обойтись в таких тривиальных задачах, а крутить софт на беспроводном модуле. Многие содержат 8051 ядро, на него полно документации. Сейчас уже перетаскивают вч ядро на одну подложку рядом с кортексом. Было бы желание сделать энергоэффективно и в меньших габаритах
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

У меня не промышленное изделие. Всё упирается в порог вхождения. Для esp код накидать можно за вечер. Blynk его поддерживает. Любой школьник может переделать код под себя. Под другой чип надо программировать в другой среде. Изучать его. Искать другое решение для обмена с сервером. Задача слишком усложняется. Лучше враг хорошего.

Автор поста оценил этот комментарий

Эм... может я ошибаюсь, но читал, что там два ядра - на одном вайфай, на другом скетч

upd: тупанул же, это esp32

Автор поста оценил этот комментарий

у esp-12 пинов кстати достаточно много ;)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Для меня мало)) Если пинов хватает, можно датчики подключить на esp. Дописать скетч, настроить эвенты в Blynk, и тоже будет работать как сигнализация.

Автор поста оценил этот комментарий

загорелся нодемцу, сделал простой пример с розеткой, теряет вифи

пробовал с другими рутерами, другое питание, другие нодемцу заказывал, всё равно теряет коннект

Автор поста оценил этот комментарий

Да Esp32 тоже так себе развлечение...

раскрыть ветку (17)
1
Автор поста оценил этот комментарий

Купил для пробы, что-нибудь сделаю на ней.

раскрыть ветку (16)
1
Автор поста оценил этот комментарий

Ну... именно что-то) У нас на работе энтузиасты есть. Все норовят сигналы со стендового оборудования по WiFi гнать. Итог: Esp8266 и Esp32 только в качестве аварийных каналов(дублированных). Сам сбор информации на Stm32 и передача через ESP(клиенты). Esp в качестве сервера-мрак. В качестве платы сбора информации-смешно)

раскрыть ветку (15)
2
Автор поста оценил этот комментарий

Почему-то подозревал, что по надёжности с нормальными контроллерами никакие ESP не сравнятся. Поэтому не стал брать эту плату за основу для сигнализации. Планирую сделать менее ответственный агрегат. Будет управлять нагревателем в одном моём устройстве. Связь в режиме точки доступа. Управление с телефона напрямую, без интернета. Отображение температуры в режиме реального времени, все настройки с телефона. Хочу обойтись только ESP и электронным ключом. Без физических кнопок и экранов.

раскрыть ветку (11)
Автор поста оценил этот комментарий

Там где особо не полыхнет, можно и поставить) Тут от задачи зависит)  Иногда мы даже ставим отечественные процессоры вместо STM/Atmel)) Там где температурный диапазон -70..+80 у наших линейность АЦП например лучше))

раскрыть ветку (10)
2
Автор поста оценил этот комментарий

У нас в институте теперь все новые разработки ведутся на отечественных процессорах. Импортозамещение))

раскрыть ветку (8)
Автор поста оценил этот комментарий

Все бы ничего, приспособиться можно,но габариты...))

раскрыть ветку (7)
1
Автор поста оценил этот комментарий

В студенческие времена была в моде шутка, о том, что у нас в институте разработали процессор, который имеет 16 ножек и ... 2 ручки для переноски.

1
Автор поста оценил этот комментарий

Я смотрел новые платы, вроде нормальные габариты. Те же ARM с китайских заводов, только с нашим названием))

раскрыть ветку (4)
Автор поста оценил этот комментарий

Ну, в целом можно смириться) Единственное, что меня постоянно беспокоит-фактически 2 поставщика в стране)

раскрыть ветку (3)
Автор поста оценил этот комментарий
В тех же корпусах все
Автор поста оценил этот комментарий
Наблюдал обратную ситуацию, у миландра входное сопротивление сильнее меняется чем у той же стм
Автор поста оценил этот комментарий

А почему? У меня на esp работает вся автоматика. Примерно год эксплуатации показал, что из косяков только необходимость раз в месяц привентивно перезагружать каждую esp т.к. если этого не делать, то есть риск зависания при непрерывной работе в течение нескольких месяцев и не будет работать модуль до перезагрузки.

В целом, не могу больше ничего предъявить. На каждой esp висит набор из 4 датчиков + монитор. Работают в открытых корпусах при влажности 80-90%.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Пробовали 16 ESP8266 и 4 модуля ESP32. Прием данных по Serial, передача на сервер по TCP/IP. NodeMcu+Lua. У нас часто отваливались по disconnect. Сервер промышленный. Случайно, закономерности не было. Уходили на перезагрузку. Для пробы переходили на самопальные на openwrt- все четко. Может конечно партия кривая(покупались на ali одной партией). Так что... решили что медь-это медь) А по WiFi только запаску)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

У меня группа esp8266 и тоже часть данных теряются. Отправляю данные 10 раз в минуту, стабильно теряют 2-3 из 10. При этом потери идут как по отсутствию связи, так и по другим причинам, что легко отслеживается отображением на дисплее без передачи на сервер, либо идут пропуски даже на дисплее. С другой стороны, я это за минус не считаю, в моей задаче получить 7-8 из 10 показаний в минуту - это достаточно.


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


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


Такое зависание единственный существенный косяк. Но это со всеми бюджетными wifi устройствами так. Дешёвый роутер косячит точно так же. А роутер за $200 работает уже лет 5 без перезагрузок.

1
Автор поста оценил этот комментарий

Ардуинолюб рассказывает про стабильность, улыбнуло

раскрыть ветку (7)
2
Автор поста оценил этот комментарий

Что не так с чипом от Atmel? За пару лет эксплуатации своих сигналок на ардуинке не словил ни одного зависания. С esp всё печальнее.

раскрыть ветку (6)
Автор поста оценил этот комментарий

с атмелами все более-менее нормально, за исключением того что 328p морально устарел еще до того как вышел =) я на самом деле про т.н. модульность - на мой взгляд использовать модули в готовом продукте - такое себе. там конечно не те частоты и не критические требования к питанию чтобы было обязательным избавляться от pla соединений и лишних элементов на этих модулях, но сам подход... Опять же личное мнение - собрал на хлебной доске прототип > отладил > нарисовал плату > заказал на ***pcb.com десяток плат и на lc**.com рассыпухи и через месяц у тебя красивая и компактная железяка. Печальностей с esp чёт не замечал - если у него нормальное питание и выходы не ворочают большие токи(ограничение по току с пинов на порядок отличается от атмелов в худшую сторону) то работает нормально, а esp32 так еще и всяких вкуснях дополнительных предлагает

раскрыть ветку (5)
2
Автор поста оценил этот комментарий
Вам не заплатили за рекламу, поэтому вы назло другим не говорите где делают платы?
раскрыть ветку (3)
Автор поста оценил этот комментарий

тут, говорят, можно по жопе получить за всякие ссылки, связанные с получением прибыли =)

раскрыть ветку (2)
Автор поста оценил этот комментарий
Если это ссылка на твою контору, то да.
раскрыть ветку (1)
Автор поста оценил этот комментарий

контора не моя, allpcb, jlcpcb

1
Автор поста оценил этот комментарий

У меня не было желания разводить всю обвязку для микроконтроллеров. Поэтому использую модули. Так проще. Это изделие не для продажи. Если мне понадобится, я могу достать из платы модуль и использовать в другом проекте. И плату я делал такую, чтобы её можно было применить не только в сигнализации. Ваш подход более правильный, если изделие хотя бы мелкосерийное.

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

Автор поста оценил этот комментарий

тоже подобная мысль возникла, почему не raspberry? ардуино этож больше просто для обучения и прототипирования.

раскрыть ветку (7)
6
Автор поста оценил этот комментарий

Всё работает, зачем компьютер городить? А если свет выключат, как у него с потреблением?

раскрыть ветку (5)
Автор поста оценил этот комментарий

от кроны работает вроде

раскрыть ветку (4)
3
Автор поста оценил этот комментарий

И как долго? Ардуина в режиме сна проживёт от одного аккумулятора несколько суток. И при этом будет сторожить. Поэтому на ней и делал.

раскрыть ветку (3)
Автор поста оценил этот комментарий

хм. У меня в режиме сна на двух АА - более двух месяцев

раскрыть ветку (2)
4
Автор поста оценил этот комментарий

Значит ей ничего не снится.

1
Автор поста оценил этот комментарий

Я не измерял время, не хочется так долго ждать. В норме сигнализация работает от сети.

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