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

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

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


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

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

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

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

[Видео]

О сервисе IFTTT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/*
 Автор  Руи Сантос (Rui Santos)
 Более подробно о проекте на: http://randomnerdtutorials.com/
 Этот код основан на скетчах-примерах для ESP8266
*/

#include <ESP8266WiFi.h>

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
const char* host = "maker.ifttt.com";
const char* apiKey = "YOUR_IFTTT_API_KEY";

int pin = 2;
volatile int state = false;
volatile int flag = false;
const char* door_state = "closed";

unsigned long previousMillis = 0; 
const long interval = 3000;

void changeDoorStatus() {

    unsigned long currentMillis = millis();
 
    if(currentMillis - previousMillis >= interval) {
        previousMillis = currentMillis;   
    
        state = !state;
        if(state) {
            door_state = "opened";  //  "открыта"
        }
        else{
            door_state = "closed";  //  "закрыта"
        }
        flag = true;
        Serial.println(state);
        Serial.println(door_state);
    }
    
}


void setup() {
    Serial.begin(115200);
    delay(100);
    Serial.println("Preparing the Door Status Monitor project...");
               //  "Подготовка проекта Door Status Monitor..."
    
    pinMode(pin, OUTPUT);
    attachInterrupt(digitalPinToInterrupt(pin), changeDoorStatus, CHANGE);

    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");  //  "Подключение к "
    Serial.println(ssid);
    
    WiFi.begin(ssid, password);
    
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
  
    Serial.println("");
    Serial.println("WiFi connected");
               //  "Выполнено подключение к WiFi"
    Serial.println("IP address: ");
               //  "IP-адрес: "
    Serial.println(WiFi.localIP());  
}

void loop() {

      if(flag){
          Serial.print("connecting to ");  //  "Подключение к "
          Serial.println(host);
          
          WiFiClient client;
          const int httpPort = 80;
          if (!client.connect(host, httpPort)) {
            Serial.println("connection failed"); 
                       //  "Подключиться не удалось"
            return;
          }
    
          String url = "/trigger/door_status/with/key/";
          url += apiKey;
          
          Serial.print("Requesting URL: ");
                   //  "Запрос URL: "
          Serial.println(url);
          client.print(String("POST ") + url + " HTTP/1.1\r\n" +
                       "Host: " + host + "\r\n" + 
                       "Content-Type: application/x-www-form-urlencoded\r\n" + 
                       "Content-Length: 13\r\n\r\n" +
                       "value1=" + door_state + "\r\n");
          flag = false;
      }  
      delay(10);
}

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

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

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

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

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

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

См.также

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