kofe88 / Signaling-Blynk

Signaling Arduino+esp8266+SIM800L+Blynk

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Signaling-Blynk

Signaling Arduino+esp8266+SIM800L+Blynk

Прошивка создана для платы из этого проекта: https://easyeda.com/MihAlex/signaling-Arduino-SIM800L_copy IMG_20190718_134050 IMG_20190718_133748

Статья по этому проекту https://pikabu.ru/story/gsmgprswifiblynk_signalizatsiya_na_arduino_6648404

Обновления:

05/09/2019

Плата NodeMcu:

  • Добавлена синхронизация времени через интернет.
  • В терминале Блинк указывается время прихода сообщения.

Плата Ардуино:

  • Автоматическая настройка и синхронизация времени часов от NodeMcu и от SIM800L.
  • Добавлена callback функция для каждого датчика. При срабатывании датчика выполняется эта функция. Для каждого может быть своя.
  • Добавлен массив ик-датчиков pult для управление сигнализацией с ИК пульта. При получении ик сигнала вызывается callback функция.
  • Добавлена функция сирены. Для подключения звуковой и световой сирены через реле.
  • Добавлена функция управлением реле закрытия и открытия двери с электрозамком (в квартие или автомобиле).

28/07/2019

В прошивку добавлен русский язык. Теперь имена датчиков и сообщения можно писать на русском языке. Принимать и отправлять смс на русском языке.

Плата NodeMcu:

  • оптимизировано создание кнопок при старте
  • добавлена поддержка кириллицы
  • добавлена возможность отключения/включения датчика нажатием его кнопки (активна/неактивна).

Плата Ардуино:

  • добавлены приём и отправка смс на русском языке
  • добавлено снятие/постановка на охрану по смс

28/05/2019

Плата NodeMcu:

  • оптимизировано создание кнопок при старте
  • оптимизирована отправка DTMF команд через терминал

Плата Ардуино:

  • реализовано автоопределение подключенных модемов
  • исправлен баг с постановкой/снятием с охраны звонком с номера USER
  • добавлены новые DTMF команды
  • добавлена функция электронных часов на индикаторе TM1637

На печатной плате могут разместиться:

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

Cигнализация модульная, можно выбрать ту конфигурацию, которая нужна в данном случае. Она может работать с SIM800L или NodeMcu на выбор, либо с обоими модулями одновременно. В последнем случае имеет два независимых канала связи, что более надёжно.

В состав проекта входят следующие скетчи:

Сборка проекта

Для сборки проекта вам необходимо скачать ZIP архив с файлами проекта с этого сайта, и всё содержимое архива распаковать

Для Windows

  • в папку Мои документы/Arduino/

Для Ubuntu

  • Домашняя папка/Arduino

Затем необходимо установить недостающие библиотеки, настроить среду Arduino IDE, открыть скетч, подсоединить плату к компьютеру и прошить её. Настройки датчиков производятся в самом скетче. Другие настройки осуществляются в файле настроек Arduino/libraries/main_type/settings.h

Необходимые библиотеки и настройки среды Arduino IDE

Для начала в Arduino IDE надо установить более раннюю версию менеджера плат.

Инструменты > Плата > Менеджер плат

Ждём окончания загрузки.

Кликаем на "Arduino AVR Boards".

Выбираем 1.6.21 из выпадающего меню

Кликаем "Установка".

Ждём окончания установки.

Для ангийского меню:

Tools > Board > Boards Manager

Wait for downloads to finish.

Click on "Arduino AVR Boards".

Select 1.6.21 from the dropdown menu.

Click "Install".

Wait for installation to finish.

Click "Close".

Если планируете использовать плату NodeMCU и приложение Blynk, то устанавливаем библиотеку для esp8266. Как это сделать, можете почитать здесь https://smartmodules.ru/esp8266-arduino-ide

Затем скачиваем и устанавливаем последнюю Blynk library от сюда:

https://github.com/blynkkk/blynk-library/releases/latest

или через менеджер библиотек в Arduino IDE, ищем по слову Blynk.

Дополнительная информация о Blynk здесь:

Downloads, docs, tutorials: http://www.blynk.cc

Sketch generator: http://examples.blynk.cc

Blynk community: http://community.blynk.cc

Follow us: http://www.fb.com/blynkapp http://twitter.com/blynk_app

Так же нам потребуется библиотека 1-Wire https://github.com/PaulStoffregen/OneWire

В менеджере библиотек ищется по слову OneWire. Не путать с OneWireHub!!!

Для датчика температуры DS18B20 устанавливаем https://github.com/milesburton/Arduino-Temperature-Control-Library

В менеджере библиотек ищется по слову DallasTemperature.

Для радиомодуля nRF24L01 https://github.com/nRF24/RF24

В менеджере библиотек называется RF24.

Для ИК-датчика и ИК-приёмника https://github.com/z3t0/Arduino-IRremote

В менеджере библиотек называется IRremote.

Для 7 сигментного индикатора часов TM1637 https://github.com/Seeed-Studio/Grove_4Digital_Display

В менеджере библиотек называется Grove 4-Digit Display.

Подключение 7 сегментного индикатора TM1637. Электронные часы

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

tm1637

В файле настроек main_type/settings.h нужно разрешить его использование дефайном

#define TM1637_ENABLE 1 // семисигментный индикатор для часов

И задать пины, к которым он будет подключен

#define CLK 7
#define DIO 8

Индикатор берёт время из часов модема SIM800L. Если модем не получил точное время автоматически от оператора связи, то его можно настройть вручную стандартной для этого модема AT командой из его даташита. Вид команды AT+CCLK=time

где time - время в формате "yy/MM/dd,hh:mm:ss±zz"

zz - часовой пояс.

Например, команда для времени 10 часов 1 минута 00 секунд 27 августа 2019 года, время Московское, будет выглядеть следующим образом:

AT+CCLK="19/08/27,10:01:00+03"

Эту команду нужно отправить по смс или через Блинк. Модем обновит своё текущее время. Затем нужно отправить DTMF команду синхронизации времени часов с временем модема 14#. На дисплей начнёт выводиться текущее время.

При наличии платы NodeMcu часы автоматически получают время из интернета с периодической синхронизацией.

Создание приложения Blynk для телефона

Для начала вам нужно скачать на свой телефон приложение Blynk для Arduino, ESP8266,RPi

IOS:

https://itunes.apple.com/us/app/blynk-control-arduino-raspberry/id808760481?ls=1&mt=8

Android:

https://play.google.com/store/apps/details?id=cc.blynk

Затем получить auth token.

Чтобы связать NodeMcu и приложение нам понадобится auth token, который нам вышлют на электронную почту.

Создайте новый аккаунт в приложении blynk.

2

Создайте новый проект. Выберите плату и тип подключения.

3

После создания, auth token придет вам на email.

4

Добавляем себе виджет Terminal

5

Устанавливаем виртуальный пин V0. Переключатели как на фото.

6

Добавляем виджет Table.

7

Устанавливаем виртуальный пин V1, переключатели в положение YES.

8

Размещаем удобно эти виджеты на экране, должно получиться примерно так:

9

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

О событиях будут сообщать следующие виджеты: Eventor, Notification, Email и Twitter. Добавляем их:

10

11

Добавляем новый Event. Устанавливаем виртуальный пин V2, прописываем условие срабатывания V2 is equal 1. Добавляем текст сообщения. Например ALARM.

12

13

Вписываем свой email, на который будут приходить сообщения от сигнализации.

14

В конце получаем следующее:

15

Настройка платы NodeMcu v3 после прошивки

Подключить плату к компьютеру. Открыть терминал для этой платы. Перезагрузить плату нажатием кнопки RESET, после чего в первые 2 секунды нажать и удерживать кнопку FLASH до появления следующих сообщений в терминале

18

Вам нужно записать данные вашей точки доступа Wi-Fi и токен Blynk в память микроконтроллера.

Для записи SSID отправьте через терминал команду вида

SSID=ВАШ_SSID

Для просмотра записанного значения отправьте команду SSID

В терминал будет выведена строка с новым значением.

Аналогично установите значение пароля командой PASS=ВАШ_ПАРОЛЬ_ТОЧКИ_ДОСТУПА

Для просмотра записи используйте команду PASS

Для подключения к серверам Blynk надо записать ваш токен командой TOKEN=ВАШ_ТОКЕН_Blynk

Для просмотра записи используйте команду TOKEN

Перезагрузите плату с удержанием кнопки FLASH. На экране терминала появятся ваши новые значения

17

Теперь при включении плата NodeMcu будет автоматически подключаться к вашей домашней Wi-Fi сети и соединяться с сервером Blynk.

Настройка сирены

Сигнализация позволяет использовать два любых пина для управдения реле, которые будут включать звуковую сирену или световую сигнализацию в случае тревоги. Для подключения функции в файле с настроками settings.h установить дефайн в 1

#define SIRENA_ENABLE 1

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

// пины включения сирены

#define SIREN_RELAY_PIN 9 // пин реле включения сирены

#define SIREN2_RELAY_PIN 10 // пин реле включения сирены 2

Так же нужно указать тип реле. Реле могут включаться как от высокого уровня, так и от низкого.

// 1 - включение единицей HIGH

// 0 - включение нулём LOW

#define SIREN_RELAY_TYPE 0

#define SIREN2_RELAY_TYPE 0

При срабатывании датчиков в режиме Тревога включатся реле сирены. По завершению режима Тревога, или при снятии с охраны сигнализации, реле автоматически выключатся. Разрешающие флаги отобразятся в приложении Blynk. Там можно запретить сирену.

Настройка открытия и закрытия электрозамка двери

Дом или автомобиль может быть оборудован электрозамками. Для их открывания или закрывания в сигнализации присутствует соответствующая функция. Для подключения функции в файле с настроками settings.h установить дефайн в 1

// Использование реле для открытия/закрытия двери при снятии/постановке на охрану

#define RELAY_ENABLE 1

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

// пины открывание и закрывание двери

#define OPEN_DOOR_RELAY_PIN 7 // пин для открывающего реле

#define CLOSE_DOOR_RELAY_PIN 8 // пин для закрывающего реле

Так же нужно указать тип реле. Реле могут включаться как от высокого уровня, так и от низкого.

// 1 - включение единицей HIGH

// 0 - включение нулём LOW

#define DOOR_RELAY_TYPE 0

И последняя настройка, задание времени, в течении которого реле будет включено

//Время включения реле двери, сек

#define DOOR_RELAY_TIME 1

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

Зарезервированные номера пинов arduino nano

(см. https://github.com/wisenheimer/Signaling-Blynk/blob/master/libraries/main_type/main_type.h):

#define RING_PIN 2 // отслеживает вызовы с модема

#define POWER_PIN 3 // отслеживает наличие питания

#define DOOR_PIN 4 // датчик двери (геркон). Один конец на GND, второй на цифровой пин arduino. К этому же пину подключён встроенный датчик температуры DS18B20. При совместном использовании датчиков геркон должен быть только NC типа (нормально закрытый).

#define BOOT_PIN 5 // перезагрузка модема SIM800L

#define RADAR_PIN 6 // микроволновый датчик движения RCWL-0516

Пины для подключения модуля RF24L01 по SPI интерфейсу

#define CE_PIN 9

#define CSN_PIN 10

#define MO_PIN 11

#define MI_PIN 12

#define SCK_PIN 13

Для ИК-приёмника

#define RECV_PIN 11

Зуммер (пищалка)

#define BEEP_PIN A2

НАСТРОЙКА ДАТЧИКОВ

Инициализируем каждый датчик

Если у вас другой датчик (не из списка), опишите его аналогично, и добавьте в SENSORS_INIT

Номер параметра и значение (см. sensor.cpp)

  1. пин ардуино
  2. тип датчика. Типы датчиков перечислены в "sensor.h"
  3. уникальное имя датчика (будет выводиться в отчётах).
  4. уровень на цифровом пине датчика в спокойном режиме (LOW или HIGHT)
  5. время на подготовку датчика при старте в секундах, когда к нему нельзя обращаться, чтобы не получить ложные данные. Если не указать, то он будет равен 10 сек.
  6. порог срабатывания аналогового датчика. По умолчанию равен 200.
  7. callback функция. Будет выполнена при срабатывании датчика. Не обязательна.

Для беспроводных датчиков и приёмников команд управления с ИК пульта задаётся 4 параметра.

Номер параметра и значение (см. sensor.cpp)

  1. тип датчика IR_SENSOR или RF24_SENSOR
  2. уникальное имя датчика. Будет выводиться в отчётах.
  3. кодовое слово, передаваемое беспроводным датчиком при срабатывании
  4. callback функция (не обязательна).

Примеры описания датчиков:

Геркон. Для него зарезервирован 4 пин ардуины DOOR_PIN

Sensor(DOOR_PIN, DIGITAL_SENSOR,"Дверь", HIGH,0)

или с callback функцией

Sensor(DOOR_PIN, DIGITAL_SENSOR, "Дверь", HIGH,0,200, alarm_on)

где alarm_on - функция без параметров void alarm_on()

Аналогично с остальными датчиками

Датчик температуры DS18B20. Распаян на плате на пине DOOR_PIN

Sensor(DOOR_PIN, DS18B20, "Температура", LOW, 10, 45)

или

Sensor(DOOR_PIN, DS18B20, "Температура", LOW, 10, 45, alarm_on)

Датчик температуры и влажности DHT11, DHT21 или DHT22.

Sensor(PIN, DHT11, "DHT")

Sensor(PIN, DHT21, "DHT")

Sensor(PIN, DHT22, "DHT")

Датчики с аналоговым выходом

Датчик температуры термистор. Заведён на плате на пин А7

Sensor(A7, TERMISTOR, "Термистор", LOW, 10, 45)

Датчик газа MQ-2. Порог срабатывания задан равным 120.

Sensor(A0, ANALOG_SENSOR, "Газ", LOW, 120)

Все датчики, где на выходе либо низкий, либо высокий логический уровень

Датчик движения RCWL-0516

Sensor(PIN, DIGITAL_SENSOR,"Движение",LOW)

Датчик огня с проверкой на ложное срабатывание 10 сек.

Sensor(PIN, CHECK_DIGITAL_SENSOR, "Огонь", HIGH)

Беспроводные датчики:

Датчик с передающим ик-диодом

Sensor(IR_SENSOR, "IR_0", IR_CODE)

Датчик с передающим модулем RF24L01

Sensor(RF24_SENSOR, "nRF_0", RF0_CODE)

Примеры сообщений от сигнализации

В ответном смс

номер звонившего (админа)

AT+CMGS="+79xxxxxxxxx"

состояния флагов (1 - вкл, 0 - выкл).

Svet ON.GUARD=1 EMAIL=0 TEL=1 SMS=1

где Svet ON - есть внешнее питание, Svet OFF - внешнее питание отсутствует.

GUARD - флаг охраны

EMAIL - флаг разрешения отправки сообщений по e-mail

TEL - флаг разрешения звонков

SMS - флаг разрешения отправки сообщений по sms.

DOOR:0 FIRE:0 RADAR:0

названия и счётчик срабатываний всех датчиков.

Ответ оператора на USSD запрос:

+CUSD: 0, "Balance:27,60r", 15

Управление сигнализацией

Внимание! Сигнализация управляется только с номеров, записанных в телефонную книгу симкарты.

Если на симкарте уже есть номера, то их владельцы являются пользователями, которые могут включать и отключать сигнализацию. Перед использованием удалите ненужные номера. Администратором считается номер с именем ADMIN. Если на симкарте нет такого номера, то первый позвонивший незарегистрированный пользователь станет Администратором. Его номер будет занесён в телефонную книгу.

Администратор — единственный пользователь, который может отправлять DTMF и смс команды.

Для удалённого добавления пользователя в телефонную книгу Администратор должен отправить смс вида

AT+CPBW=,"+xxxxxxxxxxx",145,"USER"

где +xxxxxxxxxxx - номер телефона

USER - имя абонента

Модем настроен на поднятие трубки при звонке с номера Админа. Это сделано для возможности использовать DTMF команды. Звонки с других номеров будут сбрасываться.

SMS с телефона Админа

Охрана 1 или Guard 1 - постановка на охрану

Охрана 0 или Guard 0 - снятие с охраны

Для переключения состояния пинов Ардуины отправьте смс вида pin НОМЕР_ПИНА on/off

Например, pin 14 on и pin 14 off задают пину 14 (А0) значения HIGH или LOW соответственно. Поддерживаются пины от 5 до 19, где 14 соответствует А0, 15 соответствует А1 и т.д.

Внимание! Пины A6 и A7 не поддерживаются, т.к. они не работают как цифровые выходы.

Отправка AT команд модему SIM800L.

Модем можно настраивать AT командами из его даташита. Для этого надо отправить в сигнализацию смс с AT командой с телефона Админа.

DTMF команды

Примечание! Все команды можно отправлять через терминал приложения Blynk.

Администратор может отправлять DTMF команды из списка ниже. Если команда принята, сигнализация сбросит звонок. Отчёт о выполнении команды придёт на почту или смс. Любая команда представляет собой цифру и знак #, который означает завершение ввода. После этого модем завершит звонок и выполнит полученную команду.

1#

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

2#

GUARD_OFF - снятие с охраны. Устанавливает флаг GUARD в 0.

3#

EMAIL_ON_OFF - включить/отключить GPRS/EMAIL. Меняет состояние флага EMAIL.

4#

SMS_ON_OFF - включить/отключить SMS. Меняет состояние флага SMS.

5#

TEL_ON_OFF - включить/отключить звонок при тревоге. Меняет состояние флага TEL.

6#

GET_INFO - сбор и отправка всех данных датчиков

Пример ответного смс:

AT+CMGS="+79xxxxxxxxx" Svet ON.GUARD=1 EMAIL=0 TEL=1 CONNECT=0 SMS=1 DOOR:0 FIRE:0 RADAR:0

7#

EMAIL_ADMIN_PHONE - отправляем на почту номер админа

8#

EMAIL_PHONE_BOOK - отправка на почту телефонной книги

9#

ADMIN_NUMBER_DEL - админ больше не админ

10#

SM_CLEAR - удалить все номера с симкарты

11#

MODEM_RESET - перезагрузка модема

12#

ESP_RESET - перезагрузка платы NodeMCU ESP8266

13#

BAT_CHARGE - показывает заряд батареи в виде строки +CBC: 0,100,4200 где 100 - процент заряда 4200 - напряжение на батарее в мВ.

14#

SYNC_TIME - синхронизация времени модема SIM800L и часов на 7сигментном индикаторе. Ответ выводится только в терминале в режиме отладки.

15#

SIREN_ON_OFF - включить/отключить использование сирены

Кроме того, возможно выполнение любого USSD запроса, поддерживаемого оператором мобильной связи. Например, запрос баланса *100# Наберите 100# (знак * вводить не нужно).

В ответном смс

AT+CMGS="+79xxxxxxxxx" - номер звонившего (админа)

+CUSD: 0, "Balance:27,60r", 15 - ответ оператора

Проблемы и способы их устранения

SIM800L не отправляет e-mail

Возможные причины:

1. Не определён оператор связи.

При загрузке модем SIM800L определяет оператора свзязи и отправляет в порт его имя, которое можно посмотреть в терминале в режиме отладки. Например

+COPS: 0,0,"Bee Line GSM"

OK

Имёна известных операторов и пароли для GPRS соединения перечислены в файле https://github.com/wisenheimer/Signaling-Blynk/blob/master/libraries/modem/modem.cpp

ADD_OP(0, "MTS", "mts");

ADD_OP(1, "MEGAFON", "gdata");

ADD_OP(2, "MegaFon", "gdata");

ADD_OP(3, "Tele2", "");

ADD_OP(4, "MOTIV", "");

ADD_OP(5, "Beeline", "beeline");

ADD_OP(6, "Bee Line", "beeline");

В массиве ниже должно быть столько же операторов, сколько перечисленно выше.

const OPERATORS op_base[] PROGMEM = {

{op_0, user_0},

{op_1, user_1},

{op_2, user_2},

{op_3, user_3},

{op_4, user_4},

{op_5, user_5},

{op_6, user_6}

};

Если вашего оператора нет в списке, или написание его имени отличается, необходимо добавить его в список/отредактировать имеющуюся запись.

После этого появится возможность отправлять e-mail по GPRS.

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

2. Проблема в операторе связи. Он рвёт соединение.

  • модем не дружит с этой конкретной симкой, попробовать с другой, желательно другого оператора

  • не подходящий тариф

  • не достаточно денег на счету.

3. Проблема с почтовым ящиком.

  • Не отправляет письма. Решение: создать другую почту на Яндекс, и попробовать с ней.

  • Не отображает русский текст в письмах. Решение: отправлять письма на другой почтовый сервис, например Gmail.

About

Signaling Arduino+esp8266+SIM800L+Blynk

License:GNU General Public License v3.0


Languages

Language:C++ 90.2%Language:C 9.8%