Мазмұны:

NodeMCU көмегімен қашықтан басқарылатын таймер: 14 қадам
NodeMCU көмегімен қашықтан басқарылатын таймер: 14 қадам

Бейне: NodeMCU көмегімен қашықтан басқарылатын таймер: 14 қадам

Бейне: NodeMCU көмегімен қашықтан басқарылатын таймер: 14 қадам
Бейне: ESP8266 Project: How to control 2 AC bulb or load using 2 Relay with NodeMCU and D1 Mini over WiFi 2024, Шілде
Anonim
NodeMCU көмегімен қашықтан басқарылатын таймер
NodeMCU көмегімен қашықтан басқарылатын таймер

Мұнда біз NodeMCU мен Adafruit көмегімен таймер жасаймыз. Біз таймерді жарық диодты жолақпен көрсететін боламыз, біз оны телефонмен немесе компьютермен басқара аламыз!

Біздің мақсат:

Жарық диодты жолақтың көмегімен таймер жасаңыз, біз оны жасай аламыз: телефонды немесе компьютерді пайдаланып іске қосуға, кідіртуге және қалпына келтіруге.

Жабдықтар

Жабдық:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel жарық диодты жолағы

Кітапханалар:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Басқа:

Жақсы WiFi қосылымы

1 -қадам: Adafruit -те арна құрайық

Adafruit -те арна құрайық!
Adafruit -те арна құрайық!

Енді бізде қажеттінің бәрі бар, біз құрылысты бастауға дайынбыз! Ең алдымен, біз Адафрутта жем жасауымыз керек. Adafruit - бұл біздің Arduino -ны интернетке қосуды және қашықтан басқарудың пайдалы мүмкіндіктерін жасауды жеңілдететін қызмет. Егер сіз әлі жоқ болсаңыз, Adafruit -ке тіркеліңіз.

Енді жаңа арна құрайық

Біз арнамызға кез келген нәрсені атай аламыз, мен оны «таймер» деп атаймын.

Фид дегеніміз - біздің бақылау тақтасында не істеп жатқанымызды (біз оны бір минут ішінде жасаймыз) жазамыз және бұл мәліметтерді біздің тақтаға жібереміз, бірақ біз жіберілетін деректер болғаннан кейін оны қарастырамыз.

2 -қадам: Енді бақылау тақтасын жасайық

Енді бақылау тақтасын жасайық
Енді бақылау тақтасын жасайық
Енді бақылау тақтасын жасайық
Енді бақылау тақтасын жасайық
Енді бақылау тақтасын жасайық
Енді бақылау тақтасын жасайық

Енді біз арна құрғандай, біз жаңа бақылау тақтасын жасаймыз. Мен бақылау тақтасын: «таймер интерфейсі» деп атаймын, себебі бұл біздің бақылау тақтасы болады: біздің таймерді басқаратын түймелері бар интерфейс.

3 -қадам: біздің кілтті алыңыз

Біздің кілтті алыңыз
Біздің кілтті алыңыз

Егер біз Arduino -ны өз арнамызға қосқымыз келсе, онда біз Adafruit кілтін алуымыз керек, бұл сіздің құпия пароліңіз, ол сіздің арналарыңызға қосыла алатындығына көз жеткізеді.

Сіз кілтті Adafruit экранының жоғарғы оң жағындағы сары AIO кілті түймесін басу арқылы ала аласыз.

Бұл кілтті бір жерге сақтаңыз, ол бізге кейінірек қажет болады.

Кілтті бөліспеңіз! Әйтпесе, ниеті нашар адамдар сіздің арналарыңыз бен құрылғыларыңызға қосыла алады.

4 -қадам: Feed оқу мысалын ашыңыз

Арнаны оқу мысалын ашыңыз
Арнаны оқу мысалын ашыңыз

Енді Arduino IDE -ді ашып, кодтау процесін бастайық. Ең алдымен, Adafruit IO Arduino кітапханасын орнату керек.

Кітапханаларды қалай орнатуды білмейсіз бе? бұл Adafruit: Arduino кітапханаларының тамаша нұсқаулығы

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 пайдаланушы аты:

#анықтау IO_USERNAME «joopert»

Сіздің Adafruit кілтіңіз:

#анықтаңыз IO_KEY «1234567890abcdefghijklmnop»

Сіздің WiFi атыңыз:

#WIFI_SSID «MyWifi» анықтаңыз

Сіздің WiFi құпия сөзіңіз:

WIFI_PASS «aVerySecretPassword» анықтаңыз

Енді adafruitio_21_feed_read қойындысына оралып, оны толтырамыз:

Сіздің Adafruit пайдаланушы аты … тағы:

#FEED_OWNER «joopert» анықтаңыз

Ақырында сіздің атыңыз (біз 1 -қадамда жасаған фидтен):

AdafruitIO_Feed *sharedFeed = io.feed («таймер», FEED_OWNER);

6 -қадам: Adafruit IO қосылымын тексеріңіз

Adafruit IO -ға қосылуды тексеріңіз
Adafruit IO -ға қосылуды тексеріңіз

Біз жасаған қадамдардың дұрыс орындалғанын тексеру үшін біз эскизімізді NodeMCU -ге жүктейміз. Егер сіз сериялық мониторды ашсаңыз, ол жоғарыдағы суретке ұқсас болуы керек. Алдымен сериялық монитор сіздің WiFi мен Adafruit -ке қосылуға тырысатынын көрсетеді. егер бұл толық болса, ол мынаны айту керек:

Adafruit IO қосылған

Бұл керемет жаңалық! Енді біз таймерге функционалдылықты қосуды бастай аламыз …

7 -қадам: Жарық диодты жарықтандыруға рұқсат етіңіз

Жарықдиодты жарықтандыруға рұқсат етіңіз
Жарықдиодты жарықтандыруға рұқсат етіңіз
Жарықдиодты жарықтандыруға рұқсат етіңіз
Жарықдиодты жарықтандыруға рұқсат етіңіз

Енді біздің жарықдиодты жолақты қосатын кез келді!

Жарық диодты жолақты D5 PIN -ге қосыңыз (егер D5 таба алмасаңыз, оны басқа PIN -кодқа жалғап, кодтағы LED_PIN кодын өзгертіңіз).

Жарық диодты жолақты анықтаңыз

Келесі код NeoPixel кітапханасын қосады (осы кітапхана туралы толығырақ мына жерден білуге болады: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) және біздің Arduino біздің жарықдиодты жолағымыздың қайда екенін білетініне көз жеткізіңіз. оның неше шамы бар. Егер сіздің жарық диодты жолағыңызда әртүрлі сипаттамалар болса, оны кодта өзгертіңіз.

Void setup () үстіндегі келесі кодты қосыңыз:

// NeoPixel қосылымын орнатыңыз #include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Жарық диодты жолағы қай жерге қосылған?

#define LED_COUNT 30 // Оның неше пикселі бар?

#BRIGHTNESS 50 анықтаңыз // NeoPixel жарықтығы, 0 (мин) - 255 (максимум)

Adafruit_NeoPixel жолағы (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Жарықдиодты жолақты іске қосыңыз

Енді біз жарықдиодты жолақты іске қосамыз және жарықтылықты орнатамыз (жарықтылық 0 минуттан 255 -ке дейін, бірақ мен 50… 255 шынымен жарқын деп кеңес беремін).

Void setup () ішіне келесі кодты қосыңыз:

strip.begin (); // INITIALIZE NeoPixel жолақ объектісі (REQUIRED) strip.show (); // ASAP strip.setBrightness (50) барлық пиксельдерді ӨШІРУ; // BRIGHTNESS параметрін 1/5 шамасына орнатыңыз (max = 255)

ledsOn (); // Әрбір жарықдиодты бір -бірлеп қосу функциясын шақырады

Шамдарды қосыңыз

Мүмкін сіз әлі жоқ функцияны шақыратынымызды байқаған шығарсыз, бұл біздің кодтаудың келесі бөлігі болады. Егер біз өз шамдарымызды қосқымыз келсе, біз әрбір жеке жарықдиодты бір -бірлеп қосатын 'for loop' құруға тиіспіз (for циклінің не екенін білмеймін бе? Оны мына жерден қараңыз: www.arduino.cc/reference/) kk/тіл/құрылым/бақылау-құрылым/үшін/).

Енді біз функцияны жасаймыз: ledsOn ();

Келесі кодты BELOW void handleMessage () қосыңыз:

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Жолақтағы әр пиксель үшін… strip.setPixelColor (i, 0, 0, 255); // пиксель түсін көк жолаққа орнатыңыз.show (); // Жолақты сәйкестендіру үшін жаңарту}}

Жүктеу

Енді қызықты бөлігі, кодты NodeMCU -ге жүктейік … Егер бәрі дұрыс жұмыс істесе, сіздің жарық диодты жолағыңыз енді толық көк түске айналуы керек!

Пикселдер көрсетілмей ме?: Сіз жолақты дұрыс PIN кодына қостыңыз ба? Немесе Интернет байланысы үзілген шығар.

Тек кейбір пиксельдер көрсетілмей ме?: Пикселдердің дұрыс мөлшерін орнатқаныңызды тексеріңіз!

8 -қадам: Таймерге Уақытты қосу

Енді біз таймердің шынымен де … жақсы … бірдеңе екеніне көз жеткіземіз.

Arduino -мен уақытты есептеудің әртүрлі әдістері бар, олардың бірі кешіктіру (), бұл біздің тақтаны өңдеуді белгілі бір уақытқа тоқтатады. Біз мұны қолданбаймыз, өйткені біздің Arduino кешігу кезінде қатып қалады және біз тақтаның үнемі жаңартылып отырғанын қалаймыз. Біз Millis () қолданатын боламыз, бұл Arduino -да уақытты есептеудің талғампаз тәсілі, Millis () көмегімен біз интервал арасында кодты әлі де іске қоса аламыз.

Егер сіз бұл қалай жұмыс істейтініне қызығушылық танытсаңыз, мына мақаланы тексере аласыз:

Millis () кодын қосайық:

Бұл кодты void setup үстіне қойыңыз ()

белгісіз ұзақ алдыңғыMillis = 0; // жарықдиодты жолақ соңғы рет жаңартылған кезде сақталады интервал = 1000; // біздің таймердің интервалы (миллисекундтар)

Және бұл кодты void циклына енгізейік ():

белгісіз ұзақ токMillis = millis ();// таймер ритмін бастау ******************************************* ********* if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis;

// таймер ритмін аяқтау ******************************************* ***********

Біз тек жарық диодты жарықдиодты өшіру үшін ритм құрдық, келесі қадамда біз кодты қосамыз.

9 -қадам: Кері санақ

Бұл қадамда: біз әр секундта (немесе сіз орнатқан кез келген интервалда) жолақтың соңында БІР жарық диодты барлық светодиодтар сөнгенше өшіретіндігімізге сенімді болатын функция жасаймыз.

Біз жоғарғы жағында 'leds' деп аталатын 'int' жасаймыз. Бұл кейінірек таймерге қанша жарықдиодты өшіру керектігін айтады.

Void setup () үстіндегі келесі кодты қосыңыз:

int leds = LED_COUNT-1; // қанша пиксельді жағу керектігін көрсетеді

Енді 'timer ();' функциясын қосайық, бұл әр секунд сайын шамды өшіреді

Veds ledsOn () астына келесі кодты қосыңыз:

жарамсыз таймер () {strip.setPixelColor (leds, 0, 0, 0);

if (leds> -1) {leds--; } басқа {blinkie (); }}

Біз пайдаланушыға таймер барлық шамдар жанып болғаннан кейін орындалады деген пікір білдіргіміз келеді. 'Blinkie ();' көмегімен таймер аяқталғаннан кейін светодиодтар қызыл түспен жыпылықтайды!

Void setup () үстіндегі келесі кодты қосыңыз:

int blinkStatus = 1; // blinkie -ге айтады (); шамды қосу немесе өшіру керек

Бос уақыт таймерінің астына келесі кодты қосыңыз ():

void blinkie () {if (blinkStatus == 1) {

blinkStatus = 0; strip.clear (); } басқа {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Жолақтағы әрбір пиксель үшін… strip.setPixelColor (i, 255, 0, 0); // пиксельдің түсін орнатыңыз (жедел жадыда) strip.show (); // Жолақты сәйкестендіру үшін жаңарту}}}}

Ақырында, біз void цикліндегі функцияны шақыруымыз керек ();, Біз 8 -қадамда қосқан ТАЙМЕР РИТМІ есіңізде ме? Бұл if операторында біз timer () функциясын шақырамыз.

TIMER RYTHM енді келесідей болуы керек:

// таймер ритмін бастау ***************************************** *********

if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis; таймер (); strip.show ();} // TIMER RYTHM аяқтау ************************************ ******************

Енді осы кодты жүктеңіз!

Дәл қазір сіздің жарық диодты жолағыңыз секундына 1 жарықдиодты өшіріп, аяқталған кезде қызыл түспен жыпылықтап тұруы керек …

Енді осы аналық сүйікті пультпен басқарайық!

10 -қадам: Қашықтан басқарылатын етіп жасаңыз: І бөлім

Оны қашықтан басқарылатын етіп жасаңыз: І бөлім
Оны қашықтан басқарылатын етіп жасаңыз: І бөлім
Оны қашықтан басқарылатын етіп жасаңыз: І бөлім
Оны қашықтан басқарылатын етіп жасаңыз: І бөлім

Бізде таймер бар, бәрі жақсы, бірақ мен сізге телефонмен басқаруға болатынына уәде бердім? Жобамыздың соңғы кезеңіне өтейік: таймерді қашықтан басқару.

Сіздің Adafruit қойындыңыз әлі де ашық па? Io.adafruit.com сайтына оралайық және таймер интерфейсінің бақылау тақтасына өтіп, жаңа блок құрайық: TOGGLE

  1. Қосқышты TIMER арнасына қосыңыз
  2. ON мәнін келесіге орнатыңыз: 1
  3. ӨШІРУ мәнін орнатыңыз: 0

Мұның себебі, Adafruit мәтіндік деректерді біздің NodeMCU -ге жібермейді, тек сандар.

Қаласаңыз, Toggle атауын беруге болады, мүмкін: 'Қосу/Өшіру қосқышы'

Енді Arduino IDE -ге оралайық

Біздің код жаңартылғанына көз жеткізу үшін кодты тағы бір рет ЖҮКТЕУ.

Жүктеу аяқталғаннан кейін сериялық бақылаушыны ашыңыз және біздің Adafruit бақылау тақтасында бірнеше рет басыңыз. Біз қазір сериялық мониторда осындай нәрсені көруге тиіспіз:

алынды <- 0 алды <- 1 алды <- 0 алды <- 1 алды <- 0

Бұл дегеніміз, біз бақылауды NodeMCU -ге жібере аламыз!

Егер сіз бұл хабарларды алмасаңыз, config.h ішіндегі Adafruit деректері әлі де дұрыс екенін тексеріңіз.

11 -қадам: Қашықтан басқарылатын етіп жасаңыз: II бөлім

Енді біздің алған басқару элементтерімен бірдеңе істеу қалды.

Ол үшін біз void цикліндегі if () таймерінің рифмін өзгертуіміз керек; азғана.

Біз NodeMCU -ге таймерді Adafruit -тен '1' (яғни қосулы) алғаннан кейін ғана іске қосуы керек екенін айтамыз.

Алдымен Adafruit бізге жіберетін деректерді жинайық

Void setup () үстіндегі келесі кодты қосыңыз:

int adaData; // AdaFruit бізге жіберетін деректерді жинайды

Енді сол деректерді жинайық

Void handleMessage () ішіне келесі кодты қосыңыз:

adaData = data-> toInt ();

Void циклін өзгертейік ();

TIMER RYTHM енді келесідей болуы керек:

// таймер ритмін бастау ******************************************* ********* if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis; if (adaData == 0) {Serial.println («мен жұмыс істемеймін»); } if if (adaData == 1) {таймер (); } strip.show (); } // таймер ритмін аяқтау ****************************************** ************

Кодыңызды ЖҮКТЕҢІЗ …

Енді сіз таймерді Adafruit коммутаторын пайдаланып қосу және өшіру мүмкіндігіне ие болуыңыз керек!

12 -қадам: Айналада ойнаңыз! Біз аяқтадық… немесе біз бе?

Дәл қазір сізде толықтай жұмыс істейтін қашықтан таймер болуы керек! Егер бұл сіз үшін болса, онда бұл жобамен бірге келгеніңізге рахмет!

Егер сіз ұзақ уақытқа жалғастырғыңыз келсе, келесі қадамдарда біз таймерге RESET батырмасын қосамыз!

13 -қадам: ҚОСЫМША: Лездік батырманы жасаңыз

ҚОСЫМША: Лездік батырманы жасаңыз
ҚОСЫМША: Лездік батырманы жасаңыз

Бақылау тақтасына оралайық. Енді біз қайтадан жаңа блок құрғымыз келеді.

  1. Уақытша батырмасын жасаңыз
  2. Оны «таймер» арнасына қосыңыз
  3. Басу мәнін келесіге орнатыңыз: 2
  4. Шығару мәнін алып тастаңыз
  5. Керемет түс беріңіз!

Ыңғайлы сәттік түйме қазірдің өзінде «Қалпына келтіру» деп аталады!

Сіз бұл блокты жасағаннан кейін оны тексеріңіз, егер сіз мынаны алсаңыз, түйме жұмыс істейді:

алды <- 2

Сіздің сериялық мониторыңызда.

Егер сіз бұл хабарды көрмесеңіз, эскизді қайта жүктеп көріңіз

14 -қадам: ҚОСЫМША: Қалпына келтіру функциясын қосыңыз

Қалпына келтіру түймесін жасау үшін бізге барлық светодиодтарды бастапқы күйіне қайтаратын функцияны қосу қажет.

Void blinkie () астына келесі кодты қосыңыз:

void rerun () {leds = LED_COUNT; ledsOn (); }

Енді біздің функцияны шақыру ғана қалды, ол үшін біз TIMER RYTHM -ді соңғы рет өзгертуіміз керек

TIMER RYTHM енді келесідей болуы керек:

// таймер ритмін бастау ******************************************* ********* if (currentMillis - previousMillis> = интервал) {алдыңғыMillis = currentMillis if (adaData == 0) {Serial.println («мен жұмыс істемеймін»); } if if (adaData == 1) {таймер (); } if if (adaData == 2) {rerun (); } strip.show (); } // таймер ритмін аяқтау ****************************************** ************

Кодыңызды ЖҮКТЕҢІЗ …

Енді сіз түймешікті басу арқылы таймерді қалпына келтіре аласыз!

Ұсынылған: