> For the complete documentation index, see [llms.txt](https://itdocs.kvantorium21.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://itdocs.kvantorium21.ru/it-engineering/i.-internet-veshei/case-1a/mini-case-2.md).

# Мини-кейс 2: Напоминальник \[НЕ РАБОТАЕТ]

Возможность отправлять по ипочте стало платным. Не работает.

*Соберём систему напоминаний. На твой e-mail может приходить письмо, содержащее время нажатия на кнопку. Для этого воспользуемся сторонним сервисом.*

Для отправки e-mail используется особый протокол: ***SMTP***. Он не очень удобен для работы напрямую с Arduino. Гораздо проще использовать готовые сервисы. Один из таких — ***IFTTT***. Тебе понадобится [зарегистрироваться в нём](https://ifttt.com/home).

**IFTTT (IF This Then That — если это, сделай то)**. Сервис позволяет подключать множество компонентов друг к другу по принципу «если произошло событие А, сделай действие Б». Комбинации действий и условий называются апплетами (applet, application — приложение, -let — уменьшительный суффикс).

Компонент *Webhooks* сервиса *IFTTT* умеет принимать простые *HTTP*-запросы, а компонент *Email* — отправлять письма.

![Схема работы в примере](https://1234485992-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LuCyLoyEs8r9SqV2MS6%2F-MIokyOs6sKhmi3j16t4%2F-MIodaaJS15GF8c5yj_t%2Fmini-case-2-1.jpg?alt=media\&token=e0c658a3-aef6-4fb5-9d83-1f96a4535802)

{% hint style="danger" %}
Для выполнения мини-кейса у вас должна быть [AT прошивка](/it-engineering/i.-internet-veshei/case-1a/10.md) на модуле!
{% endhint %}

### Что делаем?

До этого вы должны были [зарегистрироваться на сайте](https://ifttt.com/home).

1. Зайди на ifttt.com. Нажми вверху кнопку «My Applets», а затем «New Applet».
2. Нажми кнопку «this».
3. Набери в поисковой строке «Webhooks». В появившемся списке выбери «Webhooks».
4. Нажми «Connect».
5. Выбери действие «Receive a web request»
6. Поле «Event Name» назови «feed» и нажми кнопку «Create trigger».\
   \
   Ты создал условие (триггер). Теперь компонент Webhooks готов принимать HTTP-запросы от Arduino. Это похоже на работу сервиса dweet.io, но Webhooks не строит графики, а передаёт информацию дальше другим компонентам. Теперь нужно задать действие при срабатывании твоего триггера.<br>
7. Нажми кнопку «that».
8. Набери в поисковой строке «email» и выбери появившийся компонент.
9. Выбери действие «Send me an email».
10. Задай образец письма. Придумай заголовок (Subject), а тело письма (Body) оставь нетронутым. Затем нажми «Create action».\
    \
    Поля Value1, Value2 и Value3 позволяют передавать в письме дополнительные данные. Отправляя с Arduino запрос компоненту Webhooks, можно указать значения этих полей.<br>
11. Наконец, жми «finish».
12. Webhooks использует уникальный ключ для идентификации устройства и выдаёт его самостоятельно. Чтобы узнать этот ключ, перейди во вкладку «My applets», нажми на иконку апплета и выбери вкладку «Maker Webhooks». Нажми на «Webhooks».
13. Нажми на кнопку «Documentation».
14. Webhooks сообщит тебе ключ для идентификации — его потребуется скопировать в код.
15. Установи кнопку на Breadboard и Wi-Fi модуль на Slot Shield.
16. Загрузи скетч в *Arduino* и открой *Serial Monitor*. Дождись сообщения, что *Arduino* подключилась к Wi-Fi.

    <pre class="language-cpp" data-line-numbers><code class="lang-cpp">/*
    Подключаем необходимые библиотеки: ESP8266.h для работы с Wi-Fi модулем
    и SoftwareSerial.h для использования программного UART.
    Кавычки вида &#x3C;> означают, что мы используем библиотеку, встроенную в
    Arduino IDE. Кавычки вида " " — что мы используем внешнюю библиотеку.
    */
    #include "ESP8266.h"
    #include &#x3C;SoftwareSerial.h>

    #define WIFI_SSID "dimdimdim" // Указываем SSID и пароль Wi-Fi сети, с которой будем выходить в интернет
    #define WIFI_PASSWORD "" // Спрашиваем у препода
    #define BTN_PIN A1 // ПИН, с которого считываем показания Troyka-модуля кнопки.

    SoftwareSerial mySerial(4, 5); // TX и RX WI-FI модуля
    ESP8266 wifi(mySerial);

    boolean buttonWasUp = true; // Запоминаем, была ли кнопка отпущена.
    String maker_ID = "id_компонента_webhooks"; // Заводим переменную, в которой храним ID для компонента Webhooks.

    void setup(void) {
      Serial.begin(9600); // Запускаем аппаратный UART на скорости 9600 бод. Он потребуется для вывода информации в Serial Monitor.
      while(!wifi.joinAP(WIFI_SSID, WIFI_PASSWORD)) {
        Serial.println("Wi-Fi connection error");
      }
      Serial.println("Wi-Fi connect.");
      Serial.println("I'm ready! Press the button.");
    }

    void loop(void) {
      // Обрабатываем нажатие кнопки
      boolean buttonIsUp = digitalRead(BTN_PIN);
      // Если программа зафиксирует клик — запустится функция sendEmail, а в Serial Monitor
      // появится сообщение «Notification has been sent».
      if (buttonWasUp &#x26;&#x26; !buttonIsUp) {
        delay(10);
        buttonIsUp = digitalRead(BTN_PIN);
        if (!buttonIsUp) {
          sendEmail();
          Serial.println("Notification has been sent.");
        }
      }
      buttonWasUp = buttonIsUp;
    }

    // Функция sendEmail отправляет запрос компоненту Webhooks
    boolean sendEmail() {
      if (wifi.createTCP("maker.ifttt.com", 80)) {
      // Поля Value1, Value2 и Value3 позволяют передавать в запросе дополнительные данные.
      // Это могут быть числа или строки. В целом, использовать их не обязательно. Используем только параметр Value1 со значением «Hello!»
        String value1 = "Hello!";
        String request = "GET /trigger/feed/with/key/" + maker_ID + "?value1=" + value1 + " HTTP/1.1\r\n";
        request += "Host: maker.ifttt.com\r\n\r\n";
        wifi.send(request.c_str(), request.length());
        wifi.releaseTCP();
      } else {
        Serial.println("Сreate tcp error!");
      }
    }
    </code></pre>
17. Нажми и удерживай кнопку. В *Serial  Monitor* увидишь надпись: Notification has been sent.

*В течение **нескольких минут тебе на почту** придёт сообщение с «Не верь коту. Он ел.» и дополнительным полем «Hello!» Теперь, когда ты с утра покормил кота, нажми на кнопку. Если кот днём попросит еды, покажи ему письмо — пусть не клянчит.*
