ESP8266:Примеры/Система для отправки email-уведомлений при помощи ESP8266, PIR-датчика движения и NodeMCU

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Система для отправки email-уведомлений при помощи ESP8266, PIR-датчика движения и NodeMCU

В этом руководстве мы при помощи ESP8266 и PIR-датчика движения создадим систему, отправляющую уведомления на электронную почту. То есть вы сможете поместить эту систему в какое-либо место, и если кто-то пройдет мимо, то она отправит на заданную почту соответствующее email-уведомление. Кроме того, этот проект – наглядный пример того, как сконструировать домашнюю систему наблюдения стоимостью всего 6 долларов.

Для этого проекта вам нужен будет аккаунт в бесплатном сервисе IFTTT (англ. «if this then that»).

IFTTT – это платформа, позволяющая задействовать в своих проектах множество различных продуктов и приложений. При помощи IFTTT все эти сервисы и приложения можно заставить работать сообща. К примеру, систему можно настроить таким образом, что если вы отправите запрос к IFTTT, она запустит апплет, отправляющий email-уведомление.

Необходимое оборудование

IFTT

В этом проекте мы воспользуемся бесплатным сервисом IFTTT (это аббревиатура расшифровывается как «if this than that», т.е. «если это, то вот это»).

Этот сервис используется для онлайн-автоматизации самых разнообразных задач. В нашем случае надо, чтобы при обнаружении движения наша система уведомляла нас об этом с помощью email-сообщения. Зайдите на сайт ifttt.com и кликните на кнопку Get started. Затем заполните форму и создайте аккаунт.

Создаем апплет

Откройте вкладку My Applets, а затем нажмите на кнопку New Applet.

Кликните по слову This

и поищите сервис Webhooks.

Названием события (Event Name) нужно сделать «motion_detected». При помощи сервиса Webhooks вы можете запускать действие при выполнении HTTP-запроса на заданный URL.

Кликните по кнопке Create trigger:

Теперь нажмите на слово That

и поищите сервис Gmail.

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

Далее выберите вариант Send an email и введите в поле To Address электронную почту, на которую хотите отправить уведомление. Вы можете отредактировать тему и текст письма, но я – в демонстрационных целях – оставил их как есть. Наконец, нажмите на кнопку Create action.

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

Проверяем апплет

Откройте вкладку Search, найдите сервис Webhooks и откройте его.

Перейдите на вкладку Documentation.

Здесь находится ваш уникальный API-ключ, который нужно держать в тайне. Введите здесь название события – «motion_detected». В нижней части страницы должен появиться URL, скопируйте его.

Откройте в браузере новую вкладку, вставьте туда этот URL и нажмите на  ↵ Enter . В браузере должно появиться сообщение «Congratulations!» (Поздравляем!).

Или вы можете просто нажать внизу кнопку Test it, для отправки запроса.

Откройте Gmail. Там тоже должно появиться новое сообщение.

Если сообщение не появилось даже спустя несколько секунд, рекомендую еще раз проверить URL и название события – и в апплете, и в URL.

Примечание

Если все работает, скопируйте этот URL в «Блокнот», т.к. позже он нам еще понадобится.

Код для загрузки

-- Rui Santos
-- Complete project details at http://randomnerdtutorials.com

wifi.setmode(wifi.STATION)
wifi.sta.config("YOUR_NETWORK_NAME","YOUR_NETWORK_PASSWORD")
pin = 2   
gpio.mode(pin, gpio.INT)

function onChange ()
    -- A simple http client
    print('Motion Detected')
    conn = nil
    conn=net.createConnection(net.TCP, 0)
    conn:on("receive", function(conn, payload) end)
    conn:connect(80,"maker.ifttt.com")
    conn:on("connection", function(conn, payload)
        conn:send("POST /trigger/motion_detected/with/key/YOUR_API_KEY HTTP/1.1\r\nHost: maker.ifttt.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") end)
    conn:close()
    print('Email Sent')
end
gpio.trig(pin, 'up', onChange)

Как работает скрипт

Этот код начинается с переключения ESP8266 в режим станции. В следующей строчке мы задаем SSID и пароль для своей WiFi-сети – чтобы ESP8266 могла к ней подключиться.

Далее создаем переменную «pin = 2» (это контакт GPIO4) и переключаем этот контакт в режим прерывания (INTERRUPT). К этому контакту будет подключен PIR-датчик движения.

wifi.setmode(wifi.STATION)
wifi.sta.config("YOUR_NETWORK_NAME","YOUR_NETWORK_PASSWORD")
pin = 2   
gpio.mode(pin, gpio.INT)

Итак, для этого проекта мы используем режим прерывания – оно будет происходить, когда PIR-датчик будет переключать свой контакт из «LOW» в «HIGH». Как видите, в самой последней строчке скрипта – в методе gpio.trig(pin, 'up', onChange) – мы используем тип прерывания «up».

При обнаружении движения будет вызвана функция onChange(), которая создаст TCP-соединение с IFTTT и сделает HTTP-запрос POST.

function onChange ()
    -- Простой HTTP-клиент
    print('Motion Detected') -- 'Обнаружено движение'
    conn = nil
    conn=net.createConnection(net.TCP, 0)
    conn:on("receive", function(conn, payload) end)
    conn:connect(80,"maker.ifttt.com")
    conn:on("connection", function(conn, payload)
        conn:send("POST /trigger/motion_detected/with/key/YOUR_API_KEY HTTP/1.1\r\nHost: maker.ifttt.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") end)
    conn:close()
    print('Email Sent') -- 'Электронное письмо отправлено'
end
gpio.trig(pin, 'up', onChange)

Вам нужно будет заменить ссылку в функции conn:send() на свою ссылку из https://ifttt.com/maker.

То есть вместо...

conn:send("POST /trigger/motion_detected/with/key/YOUR_API_KEY HTTP/1.1\r\nHost: maker.ifttt.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") end)

...нужно вписать что-то вроде:

conn:send("POST /trigger/motion_detected/with/key/b6eDdHYblEv2Sy32qLwe HTTP/1.1\r\nHost: maker.ifttt.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") end)

Загружаем Lua-скрипт

Чтобы загрузить на ESP8266 Lua-скрипт, проделайте следующее:

  1. Подключите ESP8266 к ПК
  2. Выберите COM-порт, к которому подключен ESP8266
  3. Нажмите на кнопку «Open/Close»
  4. Выберите вкладку «NodeMCU+MicroPython»
  5. Создайте новый файл под названием «init.lua»
  6. Нажмите на кнопку «Save to ESP»

Также в окне Output в IDE ESPlorer должны появиться команды, отправляемые ESP8266.

Адаптация PIR-датчика движения под работу с 3.3 вольтами

Для этого проекта, как уже говорилось выше, нам понадобится PIR-датчик движения. Такие датчики используются для обнаружения движений, производимых животными и людьми. Руководство по использованию PIR-датчика движения с Arduino можно почитать здесь.

По умолчанию этот датчик работает на 5 вольтах, но в нем есть стабилизатор напряжения, понижающий напряжение до 3.3 вольт. Я нашел в интернете пост о том, как обойти этот стабилизатор и напрямую запитать датчик от 3.3 вольт. Как раз то, что нам нужно.

До пайки

Некоторые PIR-датчики по умолчанию имеют контакты, припаянные к правому верхнему углу платы, что избавляет от необходимости что-либо паять. Вам остается лишь подключить провод-перемычку к контакту, который помечен на фото ниже красным цветом. В моем случае к этому месту пришлось припаять небольшой проводок.

После пайки

После того, как я припаял этот проводок, плата начала выглядеть как на фото ниже. Теперь, если подать через этот красный провод 3.3 вольта, PIR-датчик будет работать на 3.3 вольтах.

Собираем цепь

Цепь для этого проекта собирается очень просто (см. схему ниже):

Теперь, если вы проведете рукой над PIR-датчиком движения или если кто-то пройдет рядом с ним, на вашу почту будет тут же отправлено соответствующее имейл-уведомление. Круто, а?

Что дальше

IFTTT – это очень мощная платформа, благодаря которой вы можете наладить взаимодействие между ESP8266 и более чем 200 приложениями и сервисами. Вот список приложений и сервисов, которые вы можете задействовать в своих ESP8266-проектах.

См.также

Внешние ссылки