Съдържание:

Таймер с дистанционно управление с NodeMCU: 14 стъпки
Таймер с дистанционно управление с NodeMCU: 14 стъпки

Видео: Таймер с дистанционно управление с NodeMCU: 14 стъпки

Видео: Таймер с дистанционно управление с NodeMCU: 14 стъпки
Видео: Механический таймер как ним пользоваться 2024, Ноември
Anonim
Таймер с дистанционно управление с NodeMCU
Таймер с дистанционно управление с NodeMCU

Тук ще създадем таймер, използвайки NodeMCU и Adafruit. Ще показваме таймера си с LED лента и ще можем да го контролираме с помощта на телефона или компютъра си!

Нашата цел:

Създайте таймер с помощта на LED лента, която можем: да стартираме, поставяме на пауза и нулираме с помощта на телефона или компютъра си.

Консумативи

Хардуер:

  • NodeMCU ESP 8266
  • LED лента Adafruit NeoPixel

Библиотеки:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Други:

Прилична WiFi връзка

Стъпка 1: Нека създадем емисия в Adafruit

Нека създадем емисия в Adafruit!
Нека създадем емисия в 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

Проверете връзката към Adafruit IO
Проверете връзката към Adafruit IO

За да проверим дали стъпките, които сме предприели преди, са били изпълнени правилно, ще качим нашата скица в NodeMCU. Ако отворите серийния си монитор, той трябва да изглежда нещо като снимката по -горе. Първо серийният монитор ви показва, че се опитва да се свърже с вашия WiFi и с Adafruit. ако това е пълно, трябва да се каже:

Adafruit IO свързан

Това е страхотна новина! Сега можем да започнем да добавяме функционалност към нашия таймер …

Стъпка 7: Оставя LED

Позволява LED
Позволява LED
Позволява LED
Позволява 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

Направете го дистанционно контролиран: Част I
Направете го дистанционно контролиран: Част I
Направете го дистанционно контролиран: Част I
Направете го дистанционно контролиран: Част I

Имаме си таймер, всичко е наред и елегантно, но аз ви обещах, че ще можете да го контролирате с телефона си, нали? Нека да влезем в последния етап на нашия проект: да направим нашия таймер дистанционно.

Все още ли сте отворили раздела си Adafruit? Нека да се върнем към io.adafruit.com и да отидем на таблото за управление на таймера и да създадем нов блок: TOGGLE

  1. Свържете превключвателя към емисията TIMER
  2. Задайте стойността на ON на: 1
  3. Задайте стойността на 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: ДОПЪЛНИТЕЛНО: Създайте моментален бутон

ДОПЪЛНИТЕЛНО: Бутон за създаване на момент
ДОПЪЛНИТЕЛНО: Бутон за създаване на момент

Нека се върнем към нашето табло за управление. Сега искаме отново да СЪЗДАМЕ НОВ БЛОК.

  1. Създайте бутон Моментален
  2. Свържете го към емисията „таймер“
  3. Задайте стойността на натискане на: 2
  4. ПРЕМАХНЕТЕ стойността на освобождаване
  5. Придайте му хубав цвят!

Удобно моментният бутон вече се нарича „Нулиране“!

След като създадете този блок, тествайте го, бутонът работи, ако получите:

получи <- 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 (); } // край на ТАЙМЕР РИТМ ****************************************** ************

КАЧЕТЕ кода си …

Сега също трябва да можете да нулирате таймера, като натиснете бутона!

Препоръчано: