Съдържание:
- Консумативи
- Стъпка 1: Нека създадем емисия в Adafruit
- Стъпка 2: Сега нека направим табло за управление
- Стъпка 3: Вземете нашия ключ
- Стъпка 4: Отворете Примера за четене на емисия
- Стъпка 5: Нека установим нашата връзка
- Стъпка 6: Проверете връзката към Adafruit IO
- Стъпка 7: Оставя LED
- Стъпка 8: Добавете време към таймера
- Стъпка 9: Обратно броене
- Стъпка 10: Направете го дистанционно контролиран: Част I
- Стъпка 11: Направете го дистанционно контролиран: Част II
- Стъпка 12: Играйте наоколо! Готови сме … или сме?
- Стъпка 13: ДОПЪЛНИТЕЛНО: Създайте моментален бутон
- Стъпка 14: ДОПЪЛНИТЕЛНО: Добавете функцията за нулиране
Видео: Таймер с дистанционно управление с NodeMCU: 14 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
Тук ще създадем таймер, използвайки NodeMCU и Adafruit. Ще показваме таймера си с LED лента и ще можем да го контролираме с помощта на телефона или компютъра си!
Нашата цел:
Създайте таймер с помощта на LED лента, която можем: да стартираме, поставяме на пауза и нулираме с помощта на телефона или компютъра си.
Консумативи
Хардуер:
- NodeMCU ESP 8266
- LED лента Adafruit NeoPixel
Библиотеки:
- Adafruit_NeoPixel.h
- AdafruitIO_WiFi.h
Други:
Прилична WiFi връзка
Стъпка 1: Нека създадем емисия в Adafruit
Сега, когато имаме всичко необходимо, сме готови да започнем да строим! На първо място трябва да създадем емисия в Adafruit. Adafruit е услуга, която ни улеснява наистина да свържем нашия Arduino с интернет и да направим полезни функции за дистанционно управление. Ако все още не сте, регистрирайте се за Adafruit.
Сега нека създадем нова емисия
Можем да кръстим фуража си каквото си поискаме, аз го наричам „таймер“.
Това, което прави емисията, е да записва всичко, което правим в таблото си за управление (което ще създадем само след минута) и да изпраща тези данни на борда ни, но това е нещо, което ще разгледаме веднага след като имаме данни за изпращане.
Стъпка 2: Сега нека направим табло за управление
Сега по същия начин, по който направихме емисия, ще създадем ново табло за управление. Ще извикам таблото си за управление: „timer interface“, защото това е основното, което ще бъде нашето табло за управление: интерфейс с бутоните за управление на нашия таймер.
Стъпка 3: Вземете нашия ключ
Ако искаме да свържем нашия Arduino към нашия канал, трябва да получим нашия ключ Adafruit, това е вашата тайна парола, която ще гарантира, че само вие можете да се свържете с вашите емисии.
Можете да получите ключа си, като щракнете върху жълтия бутон AIO Key в горния десен ъгъл на екрана в Adafruit.
Запазете този ключ някъде, ще ни трябва по -късно.
Не споделяйте ключа си! В противен случай хората с лоши намерения биха могли да се свържат с вашите емисии и устройства.
Стъпка 4: Отворете Примера за четене на емисия
Сега нека отворим нашата Arduino IDE и да започнем процеса на кодиране. На първо място трябва да имаме инсталирана библиотеката Adafruit IO Arduino.
Не знаете как да инсталирате библиотеки? това е страхотно ръководство на Adafruit: Arduino Libraries
Adafruit предлага много готови примери, които да използваме и да се учим от тях. Един от тези примери е: adafruitio_21_feed_read. Можете да намерите този пример тук: Файл - Примери Adafruit IO Arduino adafruitio_21_feed_read
(извинете моя холандски интерфейс в изображението)
Стъпка 5: Нека установим нашата връзка
Ако успешно сте отворили скицата adafruitio_21_feed_read, трябва да видите 2 раздела в скицата си: adafruitio_21_feed_read и config.h. Тази скица е направена, за да можем да се свържем с емисията, която направихме в стъпка 1.
За да се свържем с тази емисия, трябва да попълним няколко подробности за нашия WiFi и нашия акаунт в Adafruit,
Нека да пътуваме до config.h, тук ще попълним следните подробности:
Вашето потребителско име Adafruit:
#define IO_USERNAME "joopert"
Вашият ключ от Adafruit:
#define IO_KEY "1234567890abcdefghijklmnop"
Името на вашия WiFi:
#define WIFI_SSID "MyWifi"
И вашата парола за WiFi:
#define WIFI_PASS "aVerySecretPassword"
Сега да се върнем към раздела adafruitio_21_feed_read и да попълним:
Вашето потребителско име Adafruit … отново:
#define FEED_OWNER "joopert"
И накрая вашето име на емисия (от емисията, която направихме в стъпка 1):
AdafruitIO_Feed *sharedFeed = io.feed ("таймер", FEED_OWNER);
Стъпка 6: Проверете връзката към Adafruit IO
За да проверим дали стъпките, които сме предприели преди, са били изпълнени правилно, ще качим нашата скица в NodeMCU. Ако отворите серийния си монитор, той трябва да изглежда нещо като снимката по -горе. Първо серийният монитор ви показва, че се опитва да се свърже с вашия WiFi и с Adafruit. ако това е пълно, трябва да се каже:
Adafruit IO свързан
Това е страхотна новина! Сега можем да започнем да добавяме функционалност към нашия таймер …
Стъпка 7: Оставя LED
Сега е време да включим нашата LED лента!
Свържете вашата LED лента с D5 PIN (ако не можете да намерите D5, свържете я с друг PIN и променете LED_PIN в кода).
Определете LED лента
Следният код ще добави библиотеката NeoPixel (научете повече за тази библиотека тук: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) и се уверете, че нашият Arduino знае къде е нашата LED лента и колко светлини има. Ако вашата LED лента има различни спецификации, променете я в кода.
Добавете следния код НАД void setup ():
// настройте NeoPixel връзка #include #ifdef _AVR_ #include #endif
#define LED_PIN D5 // Къде е свързана LED лентата?
#define LED_COUNT 30 // Колко пиксела има?
#define BRIGHTNESS 50 // Яркост на NeoPixel, 0 (мин) до 255 (макс)
Adafruit_NeoPixel strip (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
Стартирайте LED лента
Сега ще стартираме нашата LED лента и ще настроим яркостта (яркостта е от 0 мин. До 255 макс., Но аз препоръчвам 50… 255 е НАИСТИНА ярка).
Добавете следния код в void setup ():
strip.begin (); // ИНИЦИАЛИЗИРАЙ обект на лента NeoPixel (ЗАДЪЛЖИТЕЛНО) strip.show (); // Изключете всички пиксели ASAP strip.setBrightness (50); // Задайте BRIGHTNESS на около 1/5 (макс = 255)
ledsOn (); // Извиква функцията за включване на всеки светодиод един по един
Включете светлините
Може би вече сте забелязали, че извикваме функция, която все още не съществува, това ще бъде следващата ни част от кодирането. Ако искаме да включим светлините си, трябва да създадем „for loop“, който да включва всеки отделен светодиод един по един (не знаете какво е for цикъл? Проверете тук: www.arduino.cc/reference/ bg/език/структура/структура за управление/за/).
Сега ще създаваме функцията: ledsOn ();
Добавете следния код НАДО void handleMessage ():
void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// За всеки пиксел в лентата… strip.setPixelColor (i, 0, 0, 255); // Задайте цвета на пиксела на синя лента.show (); // Актуализиране на лентата, за да съответства}}
Качете
Сега е забавната част, нека качим нашия код в NodeMCU … Ако всичко работи правилно, вашата LED лента сега трябва да стане напълно синя!
Не се показват пиксели?: Свързали ли сте лентата с правилния ПИН? Или може би вашата интернет връзка е загубена.
Само някои пиксели не се показват ?: проверете дали сте задали правилното количество пиксели!
Стъпка 8: Добавете време към таймера
Сега ще се уверим, че нашият таймер всъщност … ами … пъти, нещо.
Има различни начини за определяне на времето с Arduino, един е delay (), това спира обработката на нашата дъска за определен период от време. Няма да използваме това, тъй като нашият Arduino по същество замръзва по време на закъснението и искаме нашата платка да се актуализира редовно. Така че ще използваме Millis (), това е по -елегантен начин за измерване на времето в Arduino, с Millis () все още можем да изпълняваме код между интервалите.
Ако се интересувате как работи това, можете да разгледате тази статия:
Нека добавим кода за Millis ():
Поставете този код над настройката на void ()
без подпис дълъг предишенMillis = 0; // ще съхранява последния път, когато LED лентата е актуализиранаint интервал = 1000; // интервал на нашия таймер (милисекунди)
И нека поставим този код в цикъла void ():
без знак дълъг токMillis = millis ();// стартирайте TIMER RYTHM ******************************************* ********* if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis;
// край на ТАЙМЕР РИТМ ******************************************* ***********
Това, което току -що направихме, беше да създадем ритъм за нашата LED лента, за да изключи светодиодите, в следващата стъпка ще добавим кода, за да направим точно това.
Стъпка 9: Обратно броене
В тази стъпка: ще направим функция, която ще се увери, че всяка секунда (или какъвто и да е интервал, който сте задали) изключваме ЕДИН светодиод в края на лентата, докато всички наши светодиоди изгаснат.
Ще създадем „int“в горната част, наречено „LED“. Това по -късно ще каже на нашия таймер колко светодиода все още трябва да изключи.
Добавете следния код НАД void setup ():
int светодиоди = LED_COUNT-1; // показва колко пиксела трябва да бъдат осветени
Сега нека добавим функцията 'timer ();', това ще изключва светлината всяка секунда
Добавете следния код НАДО void ledsOn ():
void timer () {strip.setPixelColor (светодиоди, 0, 0, 0);
ако (светодиоди> -1) {светодиоди--; } else {blinkie (); }}
Искаме да дадем обратна връзка на потребителя, че таймерът е свършен, след като всички лампи са изгорели. С 'blinkie ();' светодиодите ще мигат червено, след като таймерът свърши!
Добавете следния код НАД void setup ():
int blinkStatus = 1; // казва на blinkie (); функция, независимо дали светлината трябва да е включена или изключена
Добавете следния код НАДО на таймера за празнота ():
void blinkie () {if (blinkStatus == 1) {
blinkStatus = 0; strip.clear (); } else {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// За всеки пиксел в лентата… strip.setPixelColor (i, 255, 0, 0); // Задаване на цвят на пиксела (в RAM) strip.show (); // Актуализиране на лентата, за да съответства}}}}
Накрая трябва да извикаме функцията в нашия void loop ();, Спомняте ли си ТАЙМЕРНИЯ РИТМ, който добавихме в стъпка 8? В този оператор if ще извикаме функцията timer ();.
TIMER RYTHM сега трябва да изглежда така:
// стартирайте TIMER RYTHM ******************************************* *********
if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis; таймер (); strip.show ();} // край на ТАЙМЕРНИЯ РИТМ ************************************** ******************
Сега качете този код!
В момента вашата LED лента трябва да изключва 1 светодиод всяка секунда и да мига червено, когато приключи …
Сега нека направим тази майка любов дистанционно!
Стъпка 10: Направете го дистанционно контролиран: Част I
Имаме си таймер, всичко е наред и елегантно, но аз ви обещах, че ще можете да го контролирате с телефона си, нали? Нека да влезем в последния етап на нашия проект: да направим нашия таймер дистанционно.
Все още ли сте отворили раздела си Adafruit? Нека да се върнем към io.adafruit.com и да отидем на таблото за управление на таймера и да създадем нов блок: TOGGLE
- Свържете превключвателя към емисията TIMER
- Задайте стойността на ON на: 1
- Задайте стойността на OFF на: 0
Причината за това е, че Adafruit не изпраща текстови данни към нашия NodeMCU, а само числа.
Можете също така да дадете име на Toggle, ако желаете, може би: „Включване/изключване“
Сега да се върнем към Arduino IDE
Само за да сме сигурни, че кодът ни е актуален, нека качим кода си отново.
ОТВОРЕТЕ СЕРИЙНИЯ МОНИТОР, след като приключите с качването, и НАТИСНЕТЕ ЗАГЛЕДА на нашето табло за управление Adafruit няколко пъти. Сега би трябвало да видим нещо подобно в нашия сериен монитор:
получено <- 0получено <- 1 получено <- 0 получено <- 1 получено <- 0
Това означава, че всъщност можем да изпращаме контроли до нашия NodeMCU!
Ако не получавате тези съобщения, проверете дали данните ви от Adafruit във вашия config.h все още са правилни.
Стъпка 11: Направете го дистанционно контролиран: Част II
Сега остава само да направите нещо с нашите получени контроли.
За да направим това, трябва да променим нашия TIMER RYTHM if израз в void loop (); малко.
Ще кажем на нашия NodeMCU, че трябва да стартира таймера само след като получим „1“(което означава: ON) от Adafruit.
Първо нека съберем данните, които Adafruit ни изпраща
Добавете следния код НАД void setup ():
int adaData; // събира данните, които AdaFruit ни изпраща
Сега нека всъщност съберем тези данни
Добавете следния код ВЪВ ВРЪЗКАТА на voidMessage ():
adaData = данни-> toInt ();
Нека променим нашия void loop ();
TIMER RYTHM сега трябва да изглежда така:
// стартирайте TIMER RYTHM ******************************************* ********* if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("не работя"); } else if (adaData == 1) {timer (); } strip.show (); } // край на ТАЙМЕР РИТМ ****************************************** ************
КАЧЕТЕ кода си …
Сега трябва да можете да включвате и изключвате таймера, като използвате превключвателя в Adafruit!
Стъпка 12: Играйте наоколо! Готови сме … или сме?
Точно сега трябва да имате напълно функциониращ дистанционен таймер! Ако това е за вас, благодаря ви, че дойдохте заедно с този проект!
Ако искате да продължите още малко, в следващите няколко стъпки ще добавим бутон RESET за нашия таймер!
Стъпка 13: ДОПЪЛНИТЕЛНО: Създайте моментален бутон
Нека се върнем към нашето табло за управление. Сега искаме отново да СЪЗДАМЕ НОВ БЛОК.
- Създайте бутон Моментален
- Свържете го към емисията „таймер“
- Задайте стойността на натискане на: 2
- ПРЕМАХНЕТЕ стойността на освобождаване
- Придайте му хубав цвят!
Удобно моментният бутон вече се нарича „Нулиране“!
След като създадете този блок, тествайте го, бутонът работи, ако получите:
получи <- 2
Във вашия сериен монитор.
Ако не виждате това съобщение, опитайте да качите отново скицата
Стъпка 14: ДОПЪЛНИТЕЛНО: Добавете функцията за нулиране
За да накараме бутона за нулиране да направи нещо, трябва да добавим функция, която връща всички светодиоди обратно в първоначалното състояние.
Добавете следния код НАДО void blinkie ():
невалидно повторение () {leds = LED_COUNT; ledsOn (); }
Сега остава само да извикаме нашата функция, за това трябва да променим TIMER RYTHM за последен път
TIMER RYTHM сега трябва да изглежда така:
// стартирайте TIMER RYTHM ******************************************* ********* if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("не работи"); } else if (adaData == 1) {timer (); } else if (adaData == 2) {rerun (); } strip.show (); } // край на ТАЙМЕР РИТМ ****************************************** ************
КАЧЕТЕ кода си …
Сега също трябва да можете да нулирате таймера, като натиснете бутона!
Препоръчано:
IRduino: Дистанционно управление Arduino - имитирайте изгубено дистанционно: 6 стъпки
IRduino: Дистанционно управление Arduino - имитирайте изгубено дистанционно: Ако някога сте загубили дистанционното управление за вашия телевизор или DVD плейър, знаете колко е разочароващо да се налага да ходите, да намирате и използвате бутоните на самото устройство. Понякога тези бутони дори не предлагат същата функционалност като дистанционното. Получаване
8 Релейно управление с NodeMCU и IR приемник, използващ WiFi и IR дистанционно управление и приложение за Android: 5 стъпки (със снимки)
8 Релейно управление с NodeMCU и IR приемник, използващ WiFi и IR дистанционно и приложение за Android: Управление на 8 релейни превключвателя с помощта на nodemcu и IR приемник през wifi и дистанционно и приложение за android. Дистанционното работи независимо от wifi връзката. ТУК
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC играчка: 4 стъпки
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC Toy: 如何 将 通用 遥控 套件 转换 为 玩具 中 使用 的 四 遥控 器。 遥控 套件 非常 便宜。 采用 62 62 2262 和 2272 芯片 433 模块 构建。方法 非常 简单。 只需 一些 瓦楞纸 板 , 然后 按照 视频 教程 这个 电子 项目 并 为 服务。 玩具 车船 提供 远程 无线 控制
Уеб дистанционно дистанционно управление с Esp8266 (NodeMCU): 4 стъпки
Уеб дистанционно дистанционно управление с Esp8266 (NodeMCU): Проблем На масата в хола има три дистанционни управления. За да гледате любимото си предаване, трябва точно да следвате специална последователност от натискания на бутони върху поне две от тях. И твоята съквартирантка, майка, приятелка никога не си спомня за това … Решение Купуваш
Робот с дистанционно управление с помощта на Arduino и T.V. Дистанционно: 11 стъпки
Робот с дистанционно управление с помощта на Arduino и телевизионно дистанционно: Тази кола с дистанционно управление може да се движи, използвайки практически всякакъв вид дистанционно управление, като телевизор, променлив ток и др. Той използва факта, че дистанционното излъчва IR (инфрачервено). Това свойство се използва чрез използване на IR приемник, който е много евтин сензор