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

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1898 статей для сайта.

Контакты:

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


Ambox content.png Черновик


Отслеживание открытия/закрытия двери с помощью 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

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

См.также

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

  1. randomnerdtutorials.com - Door Status Monitor using the ESP8266