Як зробити власну кнопку з'єднання з Wi-Fi з ESP8266
Інтернет речей має величезний потенціал для самостійної роботи. Володіючи достатнім ноу-хау і кількома дешевими компонентами, ви можете побудувати складну систему підключених пристроїв.
Іноді, однак, ви хочете щось просте. Ніяких наворотів, просто кнопка, яка виконує одне завдання. Можливо, ви вже знайомі з чимось подібним, якщо коли-небудь використовували кнопку 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.
Для цього проекту потрібні дві бібліотеки. Перейдіть до Sketch > Увімкнути бібліотеку > Керування бібліотеками. Знайдіть ESP8266WIFI від Івана Грохоткова і встановіть його. Ця бібліотека написана для створення з'єднань Wi-Fi з платою NodeMCU.
Це все, що нам потрібно, давайте код!
Як працюватиме код
Ми будемо використовувати бібліотеку 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. Це не проблема, хоча, через цю зручну діаграму:
Тепер створіть функцію налаштування:
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();
Якщо вам цікаво, де це підходить, це повинно виглядати так:
Тепер при завантаженні плати вона спробує підключитися до вашої мережі Wi-Fi, перш ніж повернутися до функції налаштування. Тепер давайте налаштуємо інтеграцію IFTTT.
Крок 6: Налаштування інтеграції IFTTT
IFTTT дозволяє інтеграцію з величезною кількістю веб-сервісів. Ми використовували його в нашому навчальному курсі з Wi-Fi PC Tower, щоб відправляти оповіщення при отриманні нового листа. Сьогодні ми будемо використовувати його для відправки твіту одним натисканням кнопки.
Перейдіть на сторінку «Мої апплети» і виберіть «Створити апплет».
Натисніть + this і підключіться до Webhooks. Виберіть «Отримати веб-запит» і назвіть вашу подію. Зберігайте це простим! Запишіть назву події, вам потрібно буде додати її до коду NodeMCU пізніше. Натисніть кнопку «Створити тригер».
Крок 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, але є багато способів її покращити. Для простоти тут використовується USB-з'єднання. Акумулятор зробить його повністю мобільним, а футляр з ланцюгом стане ідеальним проектом для початківців 3D-друку.
Незважаючи на використання глибокого сну, ви можете виявити, що батарея розряджається досить швидко. Є багато порад з енергозбереження Arduino, які допомагають у подібних проектах. Хоча це і складніше, ніж цей підручник, якщо ви створили власний Arduino з енергозберігаючими можливостями, кнопка Wi-Fi з харчуванням від батареї може працювати кілька місяців!
Цей проект ідеально підійде для віддаленого додатку для розумного будинку. Вже існує значна кількість апплетів домашньої автоматизації доступні на IFTTT. Коли ви освоїте основи, ви можете використовувати практично будь-який датчик або перемикач для запуску практично будь-якої послуги, яку ви можете собі уявити.








