ESP8266:Примеры/Отслеживание открытия/закрытия двери с помощью ESP8266

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

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


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


Отслеживание открытия/закрытия двери с помощью ESP8266[1]

Эта статья рассказывает, как отслеживать статус двери при помощи модуля ESP8266. Но ее главная цель – показать, какие возможности открывает этот 4-долларовый WiFi-модуль, если использовать его вместе с бесплатным сервисом IFTTT.

Перед тем, как приступить к проекту, ознакомьтесь с этими руководствами (или используйте их в качестве шпаргалки):

Для начала посмотрите это видео:

[Видео]

О сервисе IFTTT

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

IFTTT – это платформа, позволяющая управлять и настроить взаимодействие между десятками продуктов и приложений. То есть с его помощью можно сделать так, чтобы разные приложения работали сообща. К примеру, если послать запрос на IFTTT, это запустит рецепт (слово «рецепт» означает что-то вроде проекта, сделанного в IFTTT), который отправит вам в ответ оповещение по электронной почте.

Создание аккаунта в IFTT

Аккаунт в IFTTT создается бесплатно. Зайдите на официальный сайт и кликните по кнопке «Sign Up», которая находится в правом верхнем углу страницы. Затем заполните поля формы (нужно вписать электронный адрес и пароль; см. картинку ниже) и нажмите на кнопку «Sign up».

Ifttt-signup.jpg

Открытие рецепта

Я создал рецепт специально для этого проекта. Залогинившись в IFTTT, откройте вот этот URL.

Откроется новая страница, в центре которой будет зеленый прямоугольник с ползунком-переключателем и надписью «Turn on»:

Door-ifttt-recipe.jpg

Передвиньте ползунок в правую сторону. Откроется страница, запрашивающая доступ к Maker Webhooks и Gmail:

Ifttt-permissions.jpg

Когда вы завершите подключение этих сервисов, откроется новая страница:

Body-of-recipe.jpg

Добавление данных в рецепт

Теперь заполняем рецепт данными:

  1. В поле, над которым написано «Name your event exactly "door_status"», вписываем «door_status»
  2. Редактируем текст, который ESP8266 будет отправлять вам на электронную почту. Ни в коем случае не удаляйте «Value1»
  3. Нажмите кнопку «Save»

Теперь пройдите по этой ссылке, а когда откроется новая страница, кликните по кнопке «Documentation», которая находится в правом верхнем углу. Откроется еще одна страница, в верхней части которой будет надпись «Your key is: …», после которой будет идти беспорядочный набор символов. Это ключ – скопируйте его в безопасное место, т.к. он вам еще понадобится. В моем случае это «b6eDdHYblEv2Sy32qLwe».

Maker-webhooks-key.jpg

Тестирование рецепта

Теперь давайте проверим, правильно ли работает рецепт. Вставьте ключ, скопированный в разделе выше, в конец этого URL:

https://maker.ifttt.com/trigger/door_status/with/key/ВАШ_API_КЛЮЧ

К примеру, если я подставлю туда свой ключ, то получится следующее:

https://maker.ifttt.com/trigger/door_status/with/key/b6eDdHYblEv2Sy32qLwe

Теперь вставьте этот URL с ключом в адресную строку браузера и нажмите  ↵ Enter . В результате должно получится следующее:

Ifttt-triggered.png

Это переводится как «Поздравляем! Вы запустили событие door_status». Теперь откройте электронный ящик – туда должно прийти новое письмо.

Door Status Monitor using the ESP8266 email 1.png

Необходимые компоненты

  • Один модуль ESP8266
  • Один программатор FTDI
  • Один геркон
  • Один резистор на 10 кОм
  • Одна макетная плата

Схема для загрузки кода на ESP8266

Программатор FTDI и ESP8266 подключаются друг к другу очень просто. Вам лишь нужно настроить между ними последовательную коммуникацию, чтобы загрузить код.

Flashing-Firmware-FTDI-Programmer.png

Загрузка кода на ESP8266

Сначала убедитесь, что в IDE Arduino установлен аддон для ESP8266. Если не установлен, то о том, как это сделать, можно почитать здесь.

Далее кликните в IDE Arduino по Инструменты > Плата > Generic ESP8266 Module (Tools > Board > Generic ESP8266 Module).

Arduino-IDE-select-esp8266.png

Скопируйте скетч, представленный ниже, в IDE Arduino. Впишите собственные SSID, пароль и ключ API для IFTTT.

  1 /*
  2  Автор  Руи Сантос (Rui Santos)
  3  Более подробно о проекте на: http://randomnerdtutorials.com/
  4  Этот код основан на скетчах-примерах для ESP8266
  5 */
  6 
  7 #include <ESP8266WiFi.h>
  8 
  9 const char* ssid = "YOUR_SSID";
 10 const char* password = "YOUR_PASSWORD";
 11 const char* host = "maker.ifttt.com";
 12 const char* apiKey = "YOUR_IFTTT_API_KEY";
 13 
 14 int pin = 2;
 15 volatile int state = false;
 16 volatile int flag = false;
 17 const char* door_state = "closed";
 18 
 19 unsigned long previousMillis = 0; 
 20 const long interval = 3000;
 21 
 22 void changeDoorStatus() {
 23 
 24     unsigned long currentMillis = millis();
 25  
 26     if(currentMillis - previousMillis >= interval) {
 27         previousMillis = currentMillis;   
 28     
 29         state = !state;
 30         if(state) {
 31             door_state = "opened";  //  "открыта"
 32         }
 33         else{
 34             door_state = "closed";  //  "закрыта"
 35         }
 36         flag = true;
 37         Serial.println(state);
 38         Serial.println(door_state);
 39     }
 40     
 41 }
 42 
 43 
 44 void setup() {
 45     Serial.begin(115200);
 46     delay(100);
 47     Serial.println("Preparing the Door Status Monitor project...");
 48                //  "Подготовка проекта Door Status Monitor..."
 49     
 50     pinMode(pin, OUTPUT);
 51     attachInterrupt(digitalPinToInterrupt(pin), changeDoorStatus, CHANGE);
 52 
 53     Serial.println();
 54     Serial.println();
 55     Serial.print("Connecting to ");  //  "Подключение к "
 56     Serial.println(ssid);
 57     
 58     WiFi.begin(ssid, password);
 59     
 60     while (WiFi.status() != WL_CONNECTED) {
 61       delay(500);
 62       Serial.print(".");
 63     }
 64   
 65     Serial.println("");
 66     Serial.println("WiFi connected");
 67                //  "Выполнено подключение к WiFi"
 68     Serial.println("IP address: ");
 69                //  "IP-адрес: "
 70     Serial.println(WiFi.localIP());  
 71 }
 72 
 73 void loop() {
 74 
 75       if(flag){
 76           Serial.print("connecting to ");  //  "Подключение к "
 77           Serial.println(host);
 78           
 79           WiFiClient client;
 80           const int httpPort = 80;
 81           if (!client.connect(host, httpPort)) {
 82             Serial.println("connection failed"); 
 83                        //  "Подключиться не удалось"
 84             return;
 85           }
 86     
 87           String url = "/trigger/door_status/with/key/";
 88           url += apiKey;
 89           
 90           Serial.print("Requesting URL: ");
 91                    //  "Запрос URL: "
 92           Serial.println(url);
 93           client.print(String("POST ") + url + " HTTP/1.1\r\n" +
 94                        "Host: " + host + "\r\n" + 
 95                        "Content-Type: application/x-www-form-urlencoded\r\n" + 
 96                        "Content-Length: 13\r\n\r\n" +
 97                        "value1=" + door_state + "\r\n");
 98           flag = false;
 99       }  
100       delay(10);
101 }

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

Схема для проекта

Теперь соедините компоненты друг с другом, чтобы собрать проект:

Magnetic-contact-switch bb-2.png

Демонстрация

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

Door Status Monitor using the ESP8266 2.png

Теперь, если кто-то откроет или закроет дверь, вам на электронный ящик придет соответствующее уведомление. На то, как проект выглядит вживую, можно посмотреть в видео в самом начале статьи.

См.также

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