Мини-кейс 2: Напоминальник [НЕ РАБОТАЕТ]
Возможность отправлять по ипочте стало платным. Не работает.
Соберём систему напоминаний. На твой e-mail может приходить письмо, содержащее время нажатия на кнопку. Для этого воспользуемся сторонним сервисом.
Для отправки e-mail используется особый протокол: SMTP. Он не очень удобен для работы напрямую с Arduino. Гораздо проще использовать готовые сервисы. Один из таких — IFTTT. Тебе понадобится зарегистрироваться в нём.
IFTTT (IF This Then That — если это, сделай то). Сервис позволяет подключать множество компонентов друг к другу по принципу «если произошло событие А, сделай действие Б». Комбинации действий и условий называются апплетами (applet, application — приложение, -let — уменьшительный суффикс).
Компонент Webhooks сервиса IFTTT умеет принимать простые HTTP-запросы, а компонент Email — отправлять письма.

Для выполнения мини-кейса у вас должна быть AT прошивка на модуле!
Что делаем?
До этого вы должны были зарегистрироваться на сайте.
Зайди на ifttt.com. Нажми вверху кнопку «My Applets», а затем «New Applet».
Нажми кнопку «this».
Набери в поисковой строке «Webhooks». В появившемся списке выбери «Webhooks».
Нажми «Connect».
Выбери действие «Receive a web request»
Поле «Event Name» назови «feed» и нажми кнопку «Create trigger». Ты создал условие (триггер). Теперь компонент Webhooks готов принимать HTTP-запросы от Arduino. Это похоже на работу сервиса dweet.io, но Webhooks не строит графики, а передаёт информацию дальше другим компонентам. Теперь нужно задать действие при срабатывании твоего триггера.
Нажми кнопку «that».
Набери в поисковой строке «email» и выбери появившийся компонент.
Выбери действие «Send me an email».
Задай образец письма. Придумай заголовок (Subject), а тело письма (Body) оставь нетронутым. Затем нажми «Create action». Поля Value1, Value2 и Value3 позволяют передавать в письме дополнительные данные. Отправляя с Arduino запрос компоненту Webhooks, можно указать значения этих полей.
Наконец, жми «finish».
Webhooks использует уникальный ключ для идентификации устройства и выдаёт его самостоятельно. Чтобы узнать этот ключ, перейди во вкладку «My applets», нажми на иконку апплета и выбери вкладку «Maker Webhooks». Нажми на «Webhooks».
Нажми на кнопку «Documentation».
Webhooks сообщит тебе ключ для идентификации — его потребуется скопировать в код.
Установи кнопку на Breadboard и Wi-Fi модуль на Slot Shield.
Загрузи скетч в 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!"); } }
Нажми и удерживай кнопку. В Serial Monitor увидишь надпись: Notification has been sent.
В течение нескольких минут тебе на почту придёт сообщение с «Не верь коту. Он ел.» и дополнительным полем «Hello!» Теперь, когда ты с утра покормил кота, нажми на кнопку. Если кот днём попросит еды, покажи ему письмо — пусть не клянчит.
Last updated
Was this helpful?