ESP8266 Wi-Fi кнопка – клон DIY Amazon Dash Button
В этом проекте вы создадите ESP8266 Wi-Fi кнопку, которая может запускать любое событие домашней автоматизации. Это своего рода пульт дистанционного управления, который можно носить в кармане или разместить в любом месте, и при нажатии он отправляет email. Его также можно назвать клоном DIY Amazon Dash Button.
Смотрите видеоверсию
Это руководство доступно в видеоформате (смотрите ниже) и в текстовом формате (продолжайте читать эту страницу).
Предварительные требования
Перед тем как приступить к этому руководству, рекомендуем ознакомиться со следующими ресурсами:
Если вам нравится ESP8266 и вы хотите узнать о нём больше, рекомендую скачать мой курс: Домашняя автоматизация с ESP8266.
Введение
Wi-Fi кнопка – это не новая идея, и эта концепция была популяризирована компанией Amazon, которая создала Dash button – маленькую кнопку, которая мгновенно заказывает товар к вам домой.
Поскольку платы ESP настолько недорогие, мы можем создать аналогичный проект, который работает как Dash button, но с нашими собственными возможностями.
Вместо заказа товара мы можем включить свет, переключить лампу, отправить значение, вызвать email-уведомление и многое другое, как вы увидите к концу этого проекта.
IFTTT
Для этого проекта мы будем использовать бесплатный сервис под названием IFTTT, что означает If This Than That (Если это, то то).
Этот сервис используется для автоматизации самых разнообразных задач в интернете. В данном случае мы будем отправлять email при нажатии кнопки ESP.
Введите в браузере https://ifttt.com и нажмите кнопку «Get started» в центре страницы. Заполните форму своими данными и создайте аккаунт.
Создание апплета
Откройте вкладку «My Applets» и нажмите кнопку «New Applet».
Нажмите на слово «This» и найдите сервис «Webhooks».
Получение веб-запроса
Вам нужно ввести имя события button_pressed. С помощью сервиса Webhooks вы можете вызвать действие, когда делаете HTTP-запрос на определённый URL.
Нажмите кнопку «Create trigger»:
Теперь нажмите на слово «That» и найдите сервис Gmail.
Отправка email
Если вы впервые используете сервис Gmail с IFTTT, откроется новое окно, и вам нужно будет предоставить доступ, чтобы IFTTT мог отправлять email через ваш аккаунт.
Выберите опцию «Send email» и введите email-адрес в поле «To address», на который вы хотите получать уведомления.
Вы можете настроить тему и тело письма, но для демонстрации я оставлю значения по умолчанию. В завершение нажмите кнопку «Create action».
Ваш апплет должен быть создан после нажатия «Finish»:
Тестирование апплета
Откройте вкладку «Search», найдите сервис Webhooks и откройте его.
Перейдите на вкладку «Documentation».
Здесь вы можете найти свой уникальный API KEY, который необходимо хранить в секрете. Введите имя события button_pressed. Ваш итоговый URL должен появиться в нижней части веб-страницы. Скопируйте этот URL.
Откройте новую вкладку в браузере и нажмите Enter. Вы должны увидеть сообщение «Congratulations!».
Откройте свой почтовый клиент – новое сообщение должно быть там.
Если email не пришло через несколько секунд, рекомендуется дважды проверить URL и убедиться, что вы используете правильное имя события как в апплете, так и в URL.
Примечание: если всё сработало, сохраните свой уникальный URL в блокноте, потому что он понадобится вам позже в этом проекте.
Загрузка кода
Вот код, который вам нужно загрузить на плату ESP. Вам нужно изменить три переменные: SSID, password и resource.
/*
* ESP8266 Wi-Fi Button
* Rui Santos
* Complete Project Details https://randomnerdtutorials.com
*/
#include <ESP8266WiFi.h>
// Replace with your SSID and Password
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Replace with your unique IFTTT URL resource
const char* resource = "REPLACE_WITH_YOUR_IFTTT_URL_RESOURCE";
// How your resource variable should look like, but with your own API KEY (that API KEY below is just an example):
//const char* resource = "/trigger/button_pressed/with/key/nAZjOphL3d-ZO4N3k64-1A7gTlNSrxMJdmqy";
// Maker Webhooks IFTTT
const char* server = "maker.ifttt.com";
void setup() {
Serial.begin(115200);
initWifi();
makeIFTTTRequest();
// Deep sleep mode until RESET pin is connected to a LOW signal (pushbutton is pressed)
ESP.deepSleep(0);
}
void loop() {
// sleeping so wont get here
}
// Establish a Wi-Fi connection with your router
void initWifi() {
Serial.print("Connecting to: ");
Serial.print(ssid);
WiFi.begin(ssid, password);
int timeout = 10 * 4; // 10 seconds
while(WiFi.status() != WL_CONNECTED && (timeout-- > 0)) {
delay(250);
Serial.print(".");
}
Serial.println("");
if(WiFi.status() != WL_CONNECTED) {
Serial.println("Failed to connect, going back to sleep");
}
Serial.print("WiFi connected in: ");
Serial.print(millis());
Serial.print(", IP address: ");
Serial.println(WiFi.localIP());
}
// Make an HTTP request to the IFTTT web service
void makeIFTTTRequest() {
Serial.print("Connecting to ");
Serial.print(server);
WiFiClient client;
int retries = 5;
while(!!!client.connect(server, 80) && (retries-- > 0)) {
Serial.print(".");
}
Serial.println();
if(!!!client.connected()) {
Serial.println("Failed to connect, going back to sleep");
}
Serial.print("Request resource: ");
Serial.println(resource);
client.print(String("GET ") + resource +
" HTTP/1.1\r\n" +
"Host: " + server + "\r\n" +
"Connection: close\r\n\r\n");
int timeout = 5 * 10; // 5 seconds
while(!!!client.available() && (timeout-- > 0)){
delay(100);
}
if(!!!client.available()) {
Serial.println("No response, going back to sleep");
}
while(client.available()){
Serial.write(client.read());
}
Serial.println("\nclosing connection");
client.stop();
}
Вот как работает код:
Он запускает последовательную связь на скорости 115200 бод;
Выполняет функцию initWifi, которая устанавливает Wi-Fi соединение между ESP и вашим роутером;
Затем выполняет функцию makeIFTTTRequest, которая делает запрос к сервису IFTTT, и в конечном итоге IFTTT отправит email.
О функции глубокого сна
Наконец, мы используем функцию глубокого сна (Deep Sleep), чтобы ESP всегда был выключен и потреблял очень мало энергии. Функция глубокого сна ESP8266 была подробно рассмотрена в предыдущем руководстве, которое вы можете найти здесь.
Если кратко, когда вы нажимаете кнопку, ESP просыпается, выполняет действие и возвращается в режим глубокого сна для экономии заряда батареи. Принцип работы довольно прост.
После добавления SSID, пароля и URL загрузите код на ESP. Вы можете нажать здесь, чтобы узнать, как загрузить код на ESP-01 с помощью программатора FTDI.
О схеме
Мы хотим, чтобы это устройство было портативным и простым в изготовлении, поэтому мы будем питать ESP от литиевой батареи.
Стабилизатор напряжения
Для безопасного питания ESP8266 от литиевой батареи вам нужно сделать схему стабилизатора напряжения. Мы также рассмотрели эту тему в предыдущем руководстве, которое вы можете прочитать здесь.
Необходимые компоненты
После того как код запущен на ESP-01, вот компоненты, которые вам потребуются для схемы:
ESP-01 – прочитайте Лучшие платы разработки ESP8266 Wi-Fi
Стабилизатор напряжения:
Вы можете использовать ссылки выше или перейти на MakerAdvisor.com/tools, чтобы найти все детали для ваших проектов по лучшей цене!
Схемы
Вот принципиальная схема, которой нужно следовать:
Вот версия для макетной платы:
Рекомендую сначала собрать схему на макетной плате, чтобы проверить, что всё работает правильно.
Затем вы можете сделать постоянную схему с помощью небольшой полосковой платы, нескольких проводов и пластикового корпуса для хранения всего.
После сборки всего, вот как выглядит готовое изделие:
Оно немного похоже на пульт дистанционного управления. Теперь вы можете носить его с собой или разместить в любом месте.
Давайте протестируем. Когда я нажимаю кнопку, я получаю email в течение нескольких секунд:
Примечание: несмотря на то, что ESP питается от батареи, он может работать неделями или даже месяцами, потому что он всегда находится в режиме глубокого сна.
Подведение итогов
Я думаю, важно помнить, что применение этого проекта безгранично. Например, событие «button_pressed», в зависимости от того, где вы разместите ESP, может иметь разное значение.
Если вы разместите его как кнопку дверного звонка, вы можете использовать его, чтобы узнать, есть ли кто-то у вашего дома.
Также обратите внимание, что вместо использования стороннего сервиса, такого как IFTTT, вы можете:
Включить реле, подключённое к другому ESP8266;
Отправить запрос на другое устройство в вашей сети;
Сделать HTTP-запрос к Node-RED для запуска действия;
Опубликовать MQTT-сообщение;
Подключиться к любому другому программному обеспечению домашней автоматизации.
Развитие идеи
Вы также можете заменить кнопку другими датчиками или исполнительными механизмами. Например, если вы замените кнопку на PIR-датчик движения, вы сможете получать уведомления, когда кто-то входит в комнату вашего дома. Или вы можете использовать его для обнаружения дыма в комнате:
Замена кнопки на магнитный геркон позволяет определять, открыл ли кто-то дверь или окно. Вы даже можете прикрепить его к почтовому ящику, чтобы видеть, когда вы получаете настоящие письма или посылки.
На этом всё. Надеюсь, этот проект был интересным, и вы сможете применить эти концепции в своих собственных проектах домашней автоматизации.
Это отрывок из моей книги Home Automation using ESP8266 eBook. Если вам нравится ESP8266 и вы хотите узнать о нём больше, рекомендую скачать мой курс: Home Automation using ESP8266.
Надеюсь, это руководство было полезным. Спасибо за чтение!