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

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

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

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

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

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

Для выполнения мини-кейса у вас должна быть AT прошивка на модуле!

Что делаем?

До этого вы должны были зарегистрироваться на сайте.

  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 не строит графики, а передаёт информацию дальше другим компонентам. Теперь нужно задать действие при срабатывании твоего триггера.

  7. Нажми кнопку «that».

  8. Набери в поисковой строке «email» и выбери появившийся компонент.

  9. Выбери действие «Send me an email».

  10. Задай образец письма. Придумай заголовок (Subject), а тело письма (Body) оставь нетронутым. Затем нажми «Create action». Поля Value1, Value2 и Value3 позволяют передавать в письме дополнительные данные. Отправляя с Arduino запрос компоненту Webhooks, можно указать значения этих полей.

  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.

    /*
    Подключаем необходимые библиотеки: ESP8266.h для работы с Wi-Fi модулем
    и SoftwareSerial.h для использования программного UART.
    Кавычки вида <> означают, что мы используем библиотеку, встроенную в
    Arduino IDE. Кавычки вида " " — что мы используем внешнюю библиотеку.
    */
    #include "ESP8266.h"
    #include <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 && !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!");
      }
    }
  17. Нажми и удерживай кнопку. В Serial Monitor увидишь надпись: Notification has been sent.

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

Last updated