Интернет вещей обладает огромным потенциалом DIY. Обладая достаточным ноу-хау и несколькими дешевыми компонентами, вы можете построить сложную систему подключенных устройств.
Иногда, однако, вы хотите что-то простое. Никаких наворотов, просто кнопка, которая выполняет одну задачу. Возможно, вы уже знакомы с чем-то подобным, если когда-либо использовали кнопку Amazon Dash для изменения порядка предметов домашнего обихода.
Сегодня мы сделаем кнопку с поддержкой Wi-Fi, используя NodeMCU, и запрограммируем ее на использование IFTTT для выполнения… ну, чего угодно! Письменные инструкции после видео, если вы предпочитаете.
Что вам нужно
Тебе понадобится:
- 1 плата NodeMCU (ESP8266), доступная по цене $ 2-3 на AliExpress
- 1 х кнопка
- 1 х светодиод (опционально)
- 1 х 220 Ом резистор (опция)
- Макетные и соединительные провода
- Micro USB для программирования
- Компьютер с установленной Arduino IDE
Помимо NodeMCU, вы сможете найти большинство этих деталей в любом стартовом наборе Arduino.
, В этом руководстве предполагается, что вы используете дополнительный светодиод и резистор, но они не обязательны.
Шаг 1: Настройка схемы
Настройка оборудования очень проста для этого проекта. Настройте свою доску в соответствии с этой схемой.
Фиолетовый провод придает контакт D0 в одну сторону кнопки. Зеленый провод соединяет другую сторону кнопки с RST контактный. Синий провод бежит от контакт D1 к резистору и светодиоду. Отрицательная нога светодиода прикрепляется к Контакт GND NodeMCU.
Когда макет настроен, он должен выглядеть примерно так:
Если вам интересно, как мой светодиод подключается к заземляющему контакту, используя только эти крошечные кусочки кабеля, наш краткий курс по ускоренному тестированию
должно помочь прояснить это! Проверьте настройки и подключите NodeMCU к компьютеру через USB.
Шаг 2: Настройка IDE
Прежде чем приступить к кодированию, вам нужно сделать некоторые приготовления. Если вы этого еще не сделали, установите Arduino IDE для распознавания вашей платы NodeMCU. Вы можете добавить его в свой список досок через Файл> Настройки.
Вы можете найти более подробное объяснение этого шага в нашей вводной статье NodeMCU.
Для этого проекта требуются две библиотеки. Перейдите к Эскиз> Включить библиотеку> Управление библиотеками. Ищи ESP8266WIFI от Ивана Грохоткова и установите его. Эта библиотека написана для создания соединений Wi-Fi с платой NodeMCU.
Следующий поиск IFTTTWebhook Джон Ромки и установите последнюю версию. Эта библиотека предназначена для упрощения процесса отправки веб-хуков в IFTTT.
Это все, что нам нужно, давайте код!
Как будет работать код
Мы будем использовать ESP8266WIFI библиотека для установления соединения Wi-Fi. IFTTTWebhooks библиотека отправляет запрос в IFTTT — в данном случае, для публикации в Twitter. Затем дайте указание плате NodeMCU перевести компьютер в спящий режим, когда он не используется, для экономии энергии.
Когда кнопка нажата, она свяжет Д0 а также RST штырьки. Это сбрасывает плату, и процесс повторяется снова.
Большая часть кода в этом уроке достаточно проста для начинающих. Тем не менее, если вы только начинаете, вам будет намного легче понять, следуя нашему руководству для начинающих Arduino.
Этот учебник проходит через код в кусках, чтобы помочь с пониманием. Если вы хотите перейти прямо к делу, вы можете найти полный код на Pastebin. Обратите внимание, что вам все равно нужно будет указать свои учетные данные Wi-Fi и IFTTT в этом коде, чтобы он функционировал!
Шаг 3: Тестирование глубокого сна
Для начала, мы создадим простой тест, чтобы показать, как работает глубокий сон. Откройте новый эскиз в IDE Arduino. Введите следующие два фрагмента кода.
#include
#include
#define ledPin 5
#define wakePin 16
#define ssid "YOUR_WIFI_SSID"
#define password "YOUR_WIFI_PASSWORD"
#define IFTTT_API_KEY "IFTTT_KEY_GOES_HERE"
#define IFTTT_EVENT_NAME "IFTTT_EVENT_NAME_HERE"
Здесь мы включаем наши библиотеки вместе с определением нескольких переменных, которые нам понадобятся в нашем наброске. Вы заметите, что ledPin и wakePin здесь нумеруются по-разному по сравнению с диаграммой Fritzing выше. NodeMCU имеет другую схему расположения плат Arduino. Это не проблема, хотя, из-за этой удобной диаграммы:
Теперь создайте функцию настройки:
void setup() {
Serial.begin(115200);
while(!Serial) {
}
Serial.println(" ");// print an empty line before and after Button Press
Serial.println("Button Pressed");
Serial.println(" ");// print an empty line
ESP.deepSleep(wakePin);
}
Здесь мы настраиваем наш последовательный порт и используем цикл while, чтобы дождаться его начала. Поскольку этот код будет срабатывать после нажатия кнопки сброса, мы печатаем «Кнопка нажата» к последовательному монитору. Затем мы говорим NodeMCU погрузиться в глубокий сон, пока кнопка, соединяющая wakePin к RST штифт нажат.
Наконец, для тестирования добавьте это в свой петля () метод:
void loop(){
//if deep sleep is working, this code will never run.
Serial.println("This shouldn't get printed");
}
Обычно эскизы Arduino запускают функцию цикла непрерывно после установки. Поскольку мы отправляем плату в спящий режим до окончания установки, цикл никогда не запускается.
Сохраните свой эскиз и загрузите его на доску. Откройте последовательный монитор, и вы должны увидеть «Кнопка нажата». Каждый раз, когда кнопка срабатывает, доска сбрасывается и сообщение печатается снова. Оно работает!
Примечание о последовательном мониторе
Возможно, вы заметили некоторые бессмысленные символы в последовательном мониторе во время некоторых из ваших проектов. Обычно это происходит из-за того, что последовательный монитор не настроен на ту же скорость передачи данных, что и Serial.begin (ХХХХ) темп.
Многие руководства предлагают начать последовательное соединение со скоростью 115200 бод для такого проекта. Я перепробовал много комбинаций, и все они имели разную степень тарабарщины до и после последовательных сообщений. Согласно различным сообщениям на форуме, это может быть связано с неисправной платой или проблемой совместимости программного обеспечения. Поскольку это не сильно влияет на проект, я предпочитаю делать вид, что этого не происходит.
Если у вас возникли проблемы с последовательным монитором, попробуйте использовать другую скорость передачи данных и посмотрите, какая из них лучше для вас.
Шаг 4: Подключение к Wi-Fi
Теперь создайте функцию для подключения к вашей сети Wi-Fi.
void connectToWifi() {
Serial.print("Connecting to: SSID NAME"); //uncomment next line to show SSID name
//Serial.print(ssid);
WiFi.begin(ssid, password);
Serial.println(" ");// print an empty line
Serial.print("Attempting to connect: ");
//try to connect for 10 seconds
int i = 10;
while(WiFi.status() != WL_CONNECTED && i >=0) {
delay(1000);
Serial.print(i);
Serial.print(", ");
i--;
}
Serial.println(" ");// print an empty line
//print connection result
if(WiFi.status() == WL_CONNECTED){
Serial.print("Connected.");
Serial.println(" ");// print an empty line
Serial.print("NodeMCU ip address: ");
Serial.println(WiFi.localIP());
}
else {
Serial.println("Connection failed - check your credentials or connection");
}
}
Этот метод пытается подключиться к вашей сети десять раз с секундой между ними. Успешное или неудачное соединение печатает с последовательным монитором.
Шаг 5: вызов метода подключения
Прямо сейчас connectToWifi () никогда не называется. Добавьте вызов к вашей функции настройки между сообщением «Нажатие кнопки» и отправкой доски в спящий режим.
connectToWifi();
Если вам интересно, где это подходит, это должно выглядеть так:
В верхней части эскиза замените SSID а также пароль переменные с вашими учетными данными Wi-Fi. Сохраните свой эскиз и загрузите на доску.
Теперь при загрузке платы она попытается подключиться к вашей сети Wi-Fi, прежде чем вернуться к функции настройки. Теперь давайте настроим интеграцию IFTTT.
Шаг 6: Настройка интеграции IFTTT
IFTTT позволяет интеграцию с огромным количеством веб-сервисов. Мы использовали его в нашем учебном курсе по Wi-Fi PC Tower, чтобы отправлять оповещения при получении нового электронного письма. Сегодня мы будем использовать его для отправки твита одним нажатием кнопки.
Перейдите к Мои апплеты странице и выберите Новый апплет
Нажмите на +этот и подключиться к Webhooks. Выбрать «Получить веб-запрос» и назовите ваше событие. Будь проще! Запишите имя события, вам нужно будет добавить его в код NodeMCU позже. Нажмите «Создать триггер».
Теперь выберите +тот. Поиск для щебет и подключиться к нему — вам нужно будет авторизовать его для публикации в вашей учетной записи Twitter. Выбрать «Опубликовать твит» и выберите ваше сообщение.
На следующем экране вас попросят просмотреть апплет. Нажмите Готово. Это оно!
Шаг 7: Добавление учетных данных IFTTT в код
Вернувшись в интегрированную среду разработки Arduino, вам нужно будет добавить свой ключ API IFTTT и имя события в определенные переменные. Чтобы найти ключ API, перейдите к Мои апплеты и выберите Webhooks под Сервисы Вкладка. Выбрать Документация чтобы получить доступ к вашему ключу.
Скопируйте ключ и имя события в свой код, заменив временные имена, установленные для них.
#define IFTTT_API_KEY "IFTTT_KEY_GOES_HERE"
#define IFTTT_EVENT_NAME "IFTTT_EVENT_NAME_HERE"
Обратите внимание, кавычки должны остаться, только заменить текст.
Между вызовом connectToWifi () и отправив доску в спящий режим, создайте экземпляр объекта библиотеки IFTTTWebhook. Светодиод сигнализирует о завершении задачи до того, как снова начнется глубокий сон.
//just connected to Wi-Fi
IFTTTWebhook hook(IFTTT_API_KEY, IFTTT_EVENT_NAME);
hook.trigger();
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
//now sending board to sleep
Вызов триггера на крюк Объект запускается из апплета IFTTT и должен публиковать сообщения в вашей учетной записи Twitter. Сохраните свой эскиз и загрузите его. Теперь у вас должна быть полнофункциональная кнопка твита.
Если он не работает, внимательно проверьте код и учетные данные на наличие ошибок. Если вы действительно застряли, получите полный код сверху и сравните его с вашим собственным.
Готово! Как вы могли бы улучшить его дальше?
Это базовая версия кнопки Wi-Fi, но есть много способов ее улучшить. Для простоты здесь используется USB-соединение для питания. Аккумулятор сделает его полностью мобильным, а футляр с цепью станет идеальным проектом для начинающих 3D-печати.
Несмотря на использование глубокого сна, вы можете обнаружить, что батарея быстро разряжается. Есть много советов по энергосбережению Arduino, которые помогают в подобных проектах. Хотя это и сложнее, чем этот учебник, если вы сделали свой собственный Arduino с нуля, кнопка Wi-Fi с питанием от батареи может работать несколько месяцев!
Этот проект идеально подойдет для удаленного приложения для умного дома. Уже есть значительное количество апплетов домашней автоматизации
доступно на IFTTT. Как только вы освоите основы, вы можете использовать практически любой датчик или переключатель для запуска практически любой услуги, которую вы можете себе представить.
Кредит изображения: Vadmary / Depositphotos