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

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Система для отправки 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. Затем заполните форму и создайте аккаунт.

Iftt main page 1.PNG

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

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

Iftt new applet 1.PNG

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

Iftt new applet if+this then that 1.PNG

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

Iftt new applet webhooks searches 1.PNG

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

Iftt choose trigger 1.PNG

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

Iftt create trigger motion detected 1.PNG

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

Ifttt if webhooks then +that 1.PNG

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

Ifttt if webhooks then +that gmail 1.PNG

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

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

Ifttt if webhooks then +that gmail settings 1.PNG

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

Ifttt if webhooks then +that gmail settings finish motion detected 1.PNG

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

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

Ifttt webhooks service 1.PNG

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

Ifttt webhooks service main page 1.PNG

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

Ifttt webhooks service api test motion detected 1.PNG

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

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

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

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

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

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

 1 -- Rui Santos
 2 -- Complete project details at http://randomnerdtutorials.com
 3 
 4 wifi.setmode(wifi.STATION)
 5 wifi.sta.config("YOUR_NETWORK_NAME","YOUR_NETWORK_PASSWORD")
 6 pin = 2   
 7 gpio.mode(pin, gpio.INT)
 8 
 9 function onChange ()
10     -- A simple http client
11     print('Motion Detected')
12     conn = nil
13     conn=net.createConnection(net.TCP, 0)
14     conn:on("receive", function(conn, payload) end)
15     conn:connect(80,"maker.ifttt.com")
16     conn:on("connection", function(conn, payload)
17         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)
18     conn:close()
19     print('Email Sent')
20 end
21 gpio.trig(pin, 'up', onChange)

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

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

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

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

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

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

 1 function onChange ()
 2     -- Простой HTTP-клиент
 3     print('Motion Detected') -- 'Обнаружено движение'
 4     conn = nil
 5     conn=net.createConnection(net.TCP, 0)
 6     conn:on("receive", function(conn, payload) end)
 7     conn:connect(80,"maker.ifttt.com")
 8     conn:on("connection", function(conn, payload)
 9         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)
10     conn:close()
11     print('Email Sent') -- 'Электронное письмо отправлено'
12 end
13 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 можно почитать здесь.

Pir sensor motion.jpg

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

До пайки

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

Pir motion sensor 3.3v pin.PNG

После пайки

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

Pir motion sensor 3.3v pin soldering.PNG

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

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

Esp8266 nodemcu lua pir motion sensor.PNG

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

Что дальше

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

См.также

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