Diy

Как сделать собственную кнопку подключения к Wi-Fi с ESP8266

Как сделать собственную кнопку подключения к Wi-Fi с ESP8266

Интернет вещей имеет огромный потенциал для самостоятельной работы. Обладая достаточным ноу-хау и несколькими дешевыми компонентами, вы можете построить сложную систему подключенных устройств.

Иногда, однако, вы хотите что-то простое. Никаких наворотов, просто кнопка, которая выполняет одну задачу. Возможно, вы уже знакомы с чем-то подобным, если когда-либо использовали кнопку Amazon Dash для изменения порядка предметов домашнего обихода.

Сегодня мы сделаем кнопку с поддержкой Wi-Fi, используя NodeMCU, и запрограммируем ее, чтобы она использовала IFTTT для выполнения… ну, чего угодно! Письменные инструкции после видео, если вы предпочитаете.

Что вам нужно

Необходимые части кнопки Wi-Fi

Тебе понадобится:

  • 1 плата NodeMCU (ESP8266), доступная по цене $ 2-3 на AliExpress
  • 1 х кнопка
  • 1 х светодиод (опционально)
  • 1 х 220 Ом резистор (опция)
  • Макетные и соединительные провода
  • Micro USB для программирования
  • Компьютер с установленной Arduino IDE

Помимо NodeMCU, вы сможете найти большинство этих деталей в любом стартовом наборе Arduino стартовых набора стартовых набора . В этом руководстве предполагается, что вы используете дополнительный светодиод и резистор, но они не обязательны.

Шаг 1: Настройка схемы

Настройка оборудования очень проста для этого проекта. Настройте свою доску в соответствии с этой схемой.

NodeMCU Кнопка Wi-Fi Fritzing диаграмма

Фиолетовый провод прикрепляет контакт D0 к одной стороне кнопки. Зеленый провод соединяет другую сторону кнопки с контактом RST . Синий провод идет от контакта D1 к резистору и светодиоду. Отрицательный вывод светодиода подключается к выводу GND NodeMCU.

Когда макет настроен, он должен выглядеть примерно так:

Настройка схемы кнопки Wi-Fi NodeMCU

Если вам интересно, как мой светодиод подключается к заземляющему выводу, используя только эти крошечные кусочки кабеля, наш краткий курс по быстрому макетированию должно помочь прояснить это! Проверьте настройки и подключите NodeMCU к компьютеру через USB.

Шаг 2: Настройка IDE

Прежде чем приступить к кодированию, вам нужно сделать некоторые приготовления. Если вы еще этого не сделали, настройте Arduino IDE для распознавания вашей платы NodeMCU. Вы можете добавить его в список ваших досок через Файл> Настройки .

Arduino Board Manager URLS

Вы можете найти более подробное объяснение этого шага в нашей вводной статье NodeMCU .

Для этого проекта требуются две библиотеки. Перейдите к Sketch> Включить библиотеку> Управление библиотеками . Найдите ESP8266WIFI от Ивана Грохоткова и установите его. Эта библиотека написана для создания соединений Wi-Fi с платой NodeMCU.

Arduino IDE Библиотека Менеджер
Затем найдите IFTTTWebhook от John Romkey и установите последнюю версию. Эта библиотека предназначена для упрощения процесса отправки веб-хуков в IFTTT.

Это все, что нам нужно, давайте код!

Как будет работать код

Мы будем использовать библиотеку ESP8266WIFI для установления соединения Wi-Fi. Библиотека IFTTTWebhooks отправляет запрос в IFTTT, в данном случае, на публикацию в Twitter. Затем дайте указание плате NodeMCU, когда она не используется, для экономии энергии.

Когда кнопка нажата, она свяжет выводы D0 и RST . Это сбрасывает плату, и процесс повторяется снова.

Большая часть кода в этом руководстве достаточно проста для начинающих. Тем не менее, если вы только начинаете, вам будет намного легче понять, следуя нашему руководству для начинающих Arduino .

Этот учебник проходит через код в кусках, чтобы помочь с пониманием. Если вы хотите перейти прямо к делу, вы можете найти полный код на Pastebin . Обратите внимание, что вам все равно нужно будет указать свои учетные данные Wi-Fi и IFTTT в этом коде, чтобы он функционировал!

Шаг 3: Тестирование глубокого сна

Для начала мы создадим простой тест, чтобы показать, как работает глубокий сон. Откройте новый эскиз в Arduino IDE. Введите следующие два фрагмента кода.

#include <IFTTTWebhook.h> #include <ESP8266WiFi.h> #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. Это не проблема, хотя, из-за этой удобной диаграммы:

NodeMCU__v1.0_pinout

Теперь создайте функцию настройки:

 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, чтобы дождаться его начала. Поскольку этот код срабатывает после нажатия кнопки сброса, мы печатаем «Button Pressed» на последовательном мониторе. Затем мы просим NodeMCU перейти в глубокий сон, пока не будет нажата кнопка, соединяющая wakePin с выводом RST .

Наконец, для тестирования добавьте это в ваш метод loop () :

 void loop(){ //if deep sleep is working, this code will never run. Serial.println("This shouldn't get printed"); } 

Обычно эскизы Arduino запускают функцию цикла непрерывно после установки. Поскольку мы отправляем плату в спящий режим до окончания установки, цикл никогда не запускается.

Сохраните свой эскиз и загрузите его на доску. Откройте последовательный монитор, и вы должны увидеть «Нажатие кнопки». Каждый раз, когда кнопка срабатывает, плата сбрасывается, и сообщение печатается снова. Оно работает!

Проверка серийного монитора нажатием кнопки

Примечание о последовательном мониторе

Возможно, вы заметили некоторые бессмысленные символы в последовательном мониторе во время некоторых из ваших проектов. Обычно это происходит из-за того, что для последовательного монитора не установлена ​​та же скорость передачи, что и для скорости Serial.begin (XXXX) .

Многие руководства предлагают начать последовательное соединение со скоростью 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"); } } . 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(); 

Если вам интересно, где это подходит, это должно выглядеть так:

Где ConnectToWifi () подходит
В верхней части эскиза замените переменные ssid и password вашими учетными данными Wi-Fi. Сохраните свой эскиз и загрузите на доску.

Теперь при загрузке платы она попытается подключиться к вашей сети Wi-Fi, прежде чем вернуться к функции настройки. Теперь давайте настроим интеграцию IFTTT.

Шаг 6: Настройка интеграции IFTTT

IFTTT позволяет интеграцию с огромным количеством веб-сервисов. Мы использовали его в нашем учебном курсе по Wi-Fi PC Tower, чтобы отправлять оповещения при получении нового письма. Сегодня мы будем использовать его для отправки твита одним нажатием кнопки.

Перейдите на страницу « Мои апплеты» и выберите « Новый апплет».

Нажмите + this и подключитесь к Webhooks . Выберите «Получить веб-запрос» и назовите ваше событие. Сохраняйте это простым ! Запишите имя события, вам нужно будет добавить его в код NodeMCU позже. Нажмите «Создать триггер» .

Веб-запрос с IFTTT Webhooks
Теперь выберите + это . Найдите службу Twitter и подключитесь к ней — вам потребуется авторизовать ее для публикации в своей учетной записи Twitter. Выберите «Опубликовать твит» и выберите ваше сообщение.

IFTTT - Отправить твит
На следующем экране вас попросят просмотреть апплет. Нажмите готово. Это оно!

Шаг 7: Добавление учетных данных IFTTT в код

Вернувшись в интегрированную среду разработки Arduino, вам нужно будет добавить свой ключ API IFTTT и имя события в определенные переменные. Чтобы найти ключ API, перейдите в раздел « Мои апплеты» и выберите « Веб-хук» на вкладке « Службы ». Выберите Документация для доступа к вашему ключу.

Скопируйте ключ и имя события в свой код, заменив временные имена, установленные для них.

 #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 Gif

Если это не работает, внимательно проверьте код и учетные данные на наличие ошибок. Если вы действительно застряли, получите полный код сверху и сравните его с вашим собственным.

Выполнено! Как вы могли бы улучшить его дальше?

Это базовая версия кнопки Wi-Fi, но есть много способов ее улучшить. Для простоты здесь используется USB-соединение. Аккумулятор сделает его полностью мобильным, а футляр с цепью станет идеальным проектом для начинающих 3D-печати .

Несмотря на использование глубокого сна, вы можете обнаружить, что батарея разряжается довольно быстро. Есть много советов по энергосбережению Arduino, которые помогают в подобных проектах. Хотя это и сложнее, чем этот учебник, если вы создали собственный Arduino с энергосберегающими возможностями, кнопка Wi-Fi с питанием от батареи может работать несколько месяцев!

Этот проект идеально подойдет для удаленного приложения для умного дома. Уже существует значительное количество апплетов домашней автоматизации доступны на IFTTT. Когда вы освоите основы, вы можете использовать практически любой датчик или переключатель для запуска практически любой услуги, которую вы можете себе представить.

Кредит изображения: Vadmary / Depositphotos

Похожие посты
Diy

Вещи, которые вы должны иметь в виду, прежде чем брать ноутбук или смартфон в службу технической поддержки

Diy

Как использовать Arduino для съемки красивой скоростной фотографии

DiyLinux

Пять великолепных расширений Raspberry Pi, которые делают его еще более полезным

Diy

Первые шаги с Arduino: пристальный взгляд на печатную плату и структуру программы