Բովանդակություն:

Հեռակառավարվող ժամաչափ NodeMCU- ով ՝ 14 քայլ
Հեռակառավարվող ժամաչափ NodeMCU- ով ՝ 14 քայլ

Video: Հեռակառավարվող ժամաչափ NodeMCU- ով ՝ 14 քայլ

Video: Հեռակառավարվող ժամաչափ NodeMCU- ով ՝ 14 քայլ
Video: Ռոբոտ-կոկորդիլոս, հեռակառավարվող 2024, Հուլիսի
Anonim
Հեռակառավարվող ժամաչափ NodeMCU- ով
Հեռակառավարվող ժամաչափ NodeMCU- ով

Այստեղ մենք կստեղծենք ժամանակաչափ ՝ օգտագործելով NodeMCU և Adafruit: Մենք ցուցադրելու ենք մեր ժմչփը LED շերտով և կարող ենք այն կառավարել ՝ օգտագործելով մեր հեռախոսը կամ համակարգիչը:

Մեր նպատակը

Ստեղծեք ժամաչափ ՝ օգտագործելով LED ժապավեն, որը մենք կարող ենք ՝ գործարկել, դադարեցնել և վերակայել ՝ օգտագործելով մեր հեռախոսը կամ համակարգիչը:

Պարագաներ

Սարքավորումներ:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel LED ժապավեն

Գրադարաններ:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Այլ:

Արժանապատիվ WiFi կապ

Քայլ 1: Եկեք կեր ստեղծենք Adafruit- ում:

Եկեք կեր ստեղծենք Ադաֆրուտում
Եկեք կեր ստեղծենք Ադաֆրուտում

Այժմ, երբ մենք ստացել ենք այն ամենը, ինչ մեզ անհրաժեշտ է, պատրաստ ենք սկսել շինարարությունը: Առաջին հերթին մենք պետք է կեր ստեղծենք Adafruit- ում: Adafruit- ը ծառայություն է, որը մեզ համար իսկապես դյուրին է դարձնում մեր Arduino- ն ինտերնետին միացնելը և հեռակառավարվող օգտակար գործառույթների ստեղծումը: Եթե դեռ չեք հասցրել գրանցվել, գրանցվեք Adafruit- ում:

Հիմա եկեք ստեղծենք նոր հոսք:

Մենք կարող ենք մեր ֆիդային անվանել այն, ինչ ցանկանում ենք, ես այն անվանում եմ «ժամանակաչափ»:

Այն, ինչ անում է լրահոսը, գրանցում է այն ամենը, ինչ մենք անում ենք մեր վահանակում (որը մենք կստեղծենք ընդամենը մեկ րոպեի ընթացքում) և այդ տվյալները ուղարկում է մեր տախտակին, բայց դա այն է, ինչ մենք կանդրադառնանք, երբ մենք ունենք տվյալներ ուղարկելու համար:

Քայլ 2: Հիմա եկեք ստեղծենք վահանակ

Հիմա եկեք ստեղծենք վահանակ
Հիմա եկեք ստեղծենք վահանակ
Հիմա եկեք ստեղծենք վահանակ
Հիմա եկեք ստեղծենք վահանակ
Հիմա եկեք ստեղծենք վահանակ
Հիմա եկեք ստեղծենք վահանակ

Այժմ, նույն կերպ, ինչ մենք պատրաստել ենք հոսք, մենք կստեղծենք նոր կառավարման վահանակ: Ես կանվանեմ իմ վահանակը ՝ «ժամաչափի ինտերֆեյս», որովհետև հիմնականում դա կլինի մեր վահանակը ՝ ինտերֆեյս կոճակներով ՝ մեր ժամաչափը կառավարելու համար:

Քայլ 3: Ստացեք մեր բանալին

Ստացեք մեր բանալին
Ստացեք մեր բանալին

Եթե մենք ցանկանում ենք միացնել մեր Arduino- ն մեր թարմացվող բովանդակությանը, մենք պետք է ստանանք մեր Adafruit բանալին, սա ձեր գաղտնի գաղտնաբառն է, որը համոզված կլինի, որ միայն դուք կարող եք միանալ ձեր հոսքերին:

Դուք կարող եք ստանալ ձեր բանալին ՝ կտտացնելով Adafruit- ի ձեր էկրանի վերևի աջ մասում գտնվող դեղին AIO ստեղնին:

Պահեք այս բանալին ինչ -որ տեղ, այն մեզ ավելի ուշ պետք կգա:

Մի՛ կիսեք ձեր բանալին: Հակառակ դեպքում վատ մտադրություններ ունեցող մարդիկ կարող են միանալ ձեր հոսքերին և սարքերին:

Քայլ 4. Բացեք Feed Read- ի օրինակը

Բացեք հոսքի ընթերցման օրինակը
Բացեք հոսքի ընթերցման օրինակը

Այժմ եկեք բացենք մեր 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: Թույլ տվեք 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 շերտն ունի տարբեր բնութագրեր, փոխեք այն ծածկագրում:

Ավելացրեք հետևյալ ծածկագիրը ՎԵՐ set դատարկ կարգավորումից ().

// կարգավորել NeoPixel կապը #ներառել #ifdef _AVR_ #ներառել #endif

#սահմանել LED_PIN D5 // Որտե՞ղ է միացված LED ժապավենը:

#սահմանել LED_COUNT 30 // Քանի՞ պիքսել ունի:

#սահմանել ՊԱՀՊԱՆՈ 50ԹՅՈ 50ՆԸ 50 // NeoPixel պայծառություն, 0 (րոպե) մինչև 255 (առավելագույնը)

Adafruit_NeoPixel շերտ (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Գործարկեք LED ժապավենը

Այժմ մենք կսկսենք մեր LED ժապավենը և կդարձնենք պայծառությունը (պայծառությունը 0 րոպեից անցնում է առավելագույնը 255 -ի, բայց ես խորհուրդ եմ տալիս 50… 255 -ը ԻՐԱԿԱՆ պայծառ է):

Ավելացրեք հետևյալ կոդը IN void setup () - ում.

strip.begin (); // ՍՆԱՆԵԼ NeoPixel շերտի օբյեկտ (ՊԱՐՏԱԴԻՐ) strip.show (); // Անջատեք բոլոր պիքսելները ASAP strip.setBrightness (50); // BRIGHTNESS- ը սահմանել մոտ 1/5 (առավելագույնը = 255)

ledsOn (); // Callանգահարում է գործառույթին `յուրաքանչյուր LED- ը մեկ առ մեկ միացնելու համար

Միացրեք լույսերը

Գուցե դուք արդեն նկատել եք, որ մենք կանչում ենք դեռ գոյություն չունեցող գործառույթ, որը կլինի կոդավորման մեր հաջորդ մասը: Եթե մենք ցանկանում ենք միացնել մեր լույսերը, մենք պետք է ստեղծենք «օղակի համար», որը միացնում է յուրաքանչյուր առանձին LED- ը մեկ առ մեկ (չգիտեմ, թե ինչ է loop հանգույցը: Ստուգեք այստեղ ՝ www.arduino.cc/reference/ en/լեզու/կառուցվածք/վերահսկիչ-կառուցվածք/for/):

Այժմ մենք ստեղծելու ենք գործառույթը ՝ ledsOn ();

Ավելացնել հետևյալ ծածկագիրը BOWOW void handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// շերտի յուրաքանչյուր պիքսելի համար… strip.setPixelColor (i, 0, 0, 255); // Պիքսելների գույնը սահմանել կապույտ strip.show (); // Թարմացնել շերտագիծը համապատասխանեցնելու համար}}

Վերբեռնել

Այժմ զվարճալի մասն է, եկեք մեր կոդը վերբեռնենք NodeMCU- ում … Եթե ամեն ինչ ճիշտ է աշխատում, ձեր LED շերտը այժմ պետք է ամբողջովին կապույտ դառնա:

Արդյո՞ք պիքսելներ չեն հայտնվում: Կամ գուցե ձեր ինտերնետային կապը կորել է:

Արդյո՞ք միայն որոշ պիքսելներ չեն երևում: ստուգեք ՝ արդյոք պիքսելների ճիշտ քանակը սահմանե՞լ եք:

Քայլ 8: Addամաչափին ավելացրեք ժամանակաչափ

Այժմ մենք համոզվելու ենք, որ մեր ժամաչափը իրականում… լավ… անգամ, ինչ -որ բան:

Կան տարբեր եղանակներ Arduino- ի հետ ժամանակացույց անելու համար, մեկը ուշացումն է (), սա դադարեցնում է մեր տախտակի մշակումը որոշակի ժամանակահատվածում: Մենք չենք օգտագործելու սա, քանի որ մեր Arduino- ն հիմնականում սառչում է ուշացման ընթացքում, և մենք ցանկանում ենք, որ մեր խորհուրդը պարբերաբար թարմացվի: Այսպիսով, մենք կօգտագործենք Millis () - ը, սա Arduino- ում ժամանակի կատարման ավելի էլեգանտ միջոց է, իսկ Millis () - ի հետ մենք դեռ կարող ենք կոդ գործարկել միջակայքերի միջև:

Եթե ձեզ հետաքրքրում է, թե ինչպես է դա աշխատում, կարող եք ծանոթանալ այս հոդվածին ՝

Եկեք ավելացնենք Millis- ի ծածկագիրը ():

Տեղադրեք այս կոդը վերը նշված դատարկ կարգավորումից ()

անստորագիր երկար նախորդ Միլիս = 0; // կպահի վերջին անգամ, երբ LED շերտը թարմացվել է միջակայք = 1000; // մեր ժամաչափի ընդմիջում (միլիվայրկյաններ)

Եվ եկեք այս կոդը դնենք դատարկ օղակում ():

անստորագիր երկար հոսանք Millis = millis ();// սկսել TIMER RYTHM ****************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// վերջ TIMER RYTHM ****************************************** ***********

Այն, ինչ մենք պարզապես արեցինք, մեր LED շերտի համար LED- ների անջատման համար ռիթմ ստեղծեց, հաջորդ քայլում մենք կավելացնենք հենց դա անելու կոդը:

Քայլ 9: Հետհաշվարկ:

Այս քայլում. Մենք կկատարենք մի գործառույթ, որը համոզված կլինի, որ յուրաքանչյուր վայրկյան (կամ որևէ ընդմիջում եք սահմանել) մենք անջատում ենք մեկ LED շերտի վերջում, մինչև մեր բոլոր LED- ները անջատված լինեն:

Վերևում մենք կստեղծենք «int», որը կոչվում է «leds»: Սա հետագայում կասի մեր ժմչփին, թե քանի led պետք է դեռ անջատվի:

Ավելացրեք հետևյալ ծածկագիրը ՎԵՐ set դատարկ կարգավորումից ().

int leds = LED_COUNT-1; // հեռացնում է, թե քանի պիքսել պետք է լուսավորված լինի

Հիմա եկեք ավելացնենք 'ժմչփ ();' գործառույթը, սա ամեն վայրկյան լույս է անջատում

Ստորև բերեք դատարկ ledsOn () - ի հետևյալ ծածկագիրը.

void timer () {strip.setPixelColor (leds, 0, 0, 0);

if (leds> -1) {leds--; } else {blinkie (); }}

Մենք ցանկանում ենք որոշակի արձագանք տալ օգտագործողին, որ ժամաչափը կատարվում է բոլոր լույսերի այրվելուց հետո: 'Blinkie ();' LED- ները կթարթեն կարմիրը ժամաչափի ավարտից հետո:

Ավելացրեք հետևյալ ծածկագիրը ՎԵՐ set դատարկ կարգավորումից ().

int blinkStatus = 1; // պատմում է blinkie (); ավելի լավ, եթե լույսը պետք է միացված կամ անջատված լինի

Ավելացրեք հետևյալ ծածկագիրը Ստորև դատարկ ժամանակաչափ ().

անվավեր 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 () գործառույթը:

Հիշում եք TIMER RYTHM- ը, որը մենք ավելացրել ենք 8 -րդ քայլում: Այս if հայտարարության մեջ մենք կանչելու ենք գործառույթի ժամանակաչափ ();.

TIMER RYTHM- ն այժմ պետք է ունենա այս տեսքը.

// սկսել TIMER RYTHM ****************************************** *********

if (currentMillis - previousMillis> = ընդմիջում) {previousMillis = currentMillis; ժամանակաչափ (); strip.show ();} // վերջ TIMER RYTHM ************************************ ******************

Հիմա վերբեռնեք այս կոդը:

Հենց հիմա ձեր LED շերտը պետք է անջատի 1 LED յուրաքանչյուր վայրկյան և կարմիր թարթել, երբ այն ավարտվի…

Հիմա եկեք այս մայրասերը դարձնենք հեռակառավարվող:

Քայլ 10. Դարձրեք այն հեռակառավարվող. Մաս I

Դարձրեք այն հեռակառավարվող ՝ մաս I
Դարձրեք այն հեռակառավարվող ՝ մաս I
Դարձրեք այն հեռակառավարվող ՝ մաս I
Դարձրեք այն հեռակառավարվող ՝ մաս I

Մենք ունենք մեր ժամաչափը, ամեն ինչ կարգին է, բայց ես ձեզ խոստացա, որ կկարողանաք կառավարել այն ձեր հեռախոսով: Եկեք մտնենք մեր նախագծի վերջին փուլը `ժամաչափը հեռակառավարմամբ սարքելը:

Դեռ բացե՞լ եք ձեր Adafruit ներդիրը: Եկեք վերադառնանք io.adafruit.com և գնանք մեր ժամաչափի ինտերֆեյսի վահանակ և ստեղծենք նոր բլոկ ՝ TOGGLE

  1. Միացրեք անջատիչը TIMER հոսքին
  2. Սահմանեք ON արժեքը ՝ 1
  3. Անջատված արժեքը սահմանեք ՝ 0

Դրա պատճառն այն է, որ Adafruit- ը տեքստային տվյալներ չի ուղարկում մեր NodeMCU- ին, այլ միայն թվեր:

Եթե ցանկանում եք, կարող եք նաև անջատիչ անուն տալ, գուցե ՝ «Միացնել/անջատել անջատիչ»

Այժմ վերադառնանք Arduino IDE- ին

Պարզապես համոզվելու համար, որ մեր ծածկագիրը արդիական է, եկեք ևս մեկ անգամ ԲԵՌՆԵՆՔ մեր ծածկագիրը:

ԲԱ SԵՔ ՍԵՐԻԱԼ ՄՈՆԻՏՈՐԸ, երբ ավարտվի վերբեռնումը և մի քանի անգամ սեղմեք GՈGՅԼԸ մեր Adafruit- ի վահանակի վրա: Այժմ մենք պետք է տեսնենք, որ այսպիսի մի բան հայտնվում է մեր սերիական մոնիտորում.

ստացել է <- 0 ստացվել է <- 1 ստացել է <- 0 ստացել է <- 1 ստացել է <- 0

Սա նշանակում է, որ մենք իրականում կարող ենք վերահսկողություն ուղարկել մեր NodeMCU- ին:

Եթե դուք չեք ստանում այս հաղորդագրությունները, ստուգեք ՝ արդյոք ձեր config.h- ի Adafruit- ի տվյալները դեռ ճի՞շտ են:

Քայլ 11. Դարձրեք այն հեռակառավարվող. Մաս II

Այժմ մեզ մնում է ինչ -որ բան անել մեր ստացած վերահսկիչներով:

Դա անելու համար մենք պետք է փոխենք մեր TIMER RYTHM- ի հայտարարությունը void loop- ում (); մի քիչ.

Մենք մեր NodeMCU- ին կասենք, որ այն պետք է գործի ժամաչափը միայն այն ժամանակ, երբ Adafruit- ից ստանանք «1» -ը (ինչը նշանակում է ՝ ON):

Նախ եկեք հավաքենք այն տվյալները, որոնք մեզ ուղարկում է Adafruit- ը

Ավելացրեք հետևյալ ծածկագիրը ՎԵՐ set դատարկ կարգավորումից ().

int adaData; // հավաքում է այն տվյալները, որոնք մեզ ուղարկում է AdaFruit- ը

Հիմա եկեք իրականում հավաքենք այդ տվյալները

Ավելացրեք հետևյալ ծածկագիրը INSIDE the void handleMessage () հասցեում:

adaData = data-> toInt ();

Եկեք փոխենք մեր դատարկ օղակը ();

TIMER RYTHM- ն այժմ պետք է ունենա այս տեսքը.

// սկսել TIMER RYTHM ****************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("ես չեմ աշխատում"); } else if (adaData == 1) {ժամանակաչափ (); } strip.show (); } // վերջ TIMER RYTHM ***************************************** ************

Բեռնեք ձեր ծածկագիրը…

Այժմ դուք պետք է կարողանաք միացնել և անջատել ժամաչափը ՝ օգտագործելով անջատիչը Adafruit- ում:

Քայլ 12: Խաղացեք շուրջը: Մենք ավարտված ենք…

Հենց հիմա դուք պետք է ունենաք լիովին գործող հեռաչափաչափ: Եթե դա ձեզ համար է, ապա շնորհակալություն այս նախագծին միանալու համար:

Եթե ցանկանում եք մի փոքր ավելի երկար շարունակել, հաջորդ մի քանի քայլերում մենք կավելացնենք RESET կոճակը մեր ժամաչափի համար:

Քայլ 13. ԼՐԱ. Ստեղծեք պահի կոճակ

ԼՐԱՈ Create. Ստեղծեք պահի կոճակ
ԼՐԱՈ Create. Ստեղծեք պահի կոճակ

Եկեք վերադառնանք մեր վահանակին: Այժմ մենք ցանկանում ենք կրկին ՍՏԵԵԼ ՆՈՐ ԲԼՈԿ:

  1. Ստեղծեք պահի կոճակ
  2. Միացրեք այն «ժմչփ» հոսքին
  3. Մամուլի արժեքը սահմանեք ՝ 2
  4. Հեռացնել թողարկման արժեքը
  5. Տվեք նրան գեղեցիկ գույն:

Հարմարավետությամբ ակնթարթային կոճակն արդեն կոչվում է «Վերագործարկեք»:

Այս բլոկը ստեղծելուց հետո փորձարկեք այն, կոճակը գործում է, եթե ստանում եք.

ստացել է <- 2

Ձեր սերիական մոնիտորի վրա:

Եթե չեք տեսնում այս հաղորդագրությունը, փորձեք նորից վերբեռնել էսքիզը

Քայլ 14. ԼՐԱՈ AddԻՉ. Ավելացնել զրոյական գործառույթ

Վերականգնման կոճակը որևէ բան անելու համար մենք պետք է ավելացնենք մի գործառույթ, որը բոլոր LED- ները կվերականգնի սկզբնական վիճակին:

Ավելացրեք հետևյալ ծածկագիրը Ստորև ՝ void blinkie () - ով:

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

Այժմ մնում է միայն կանչել մեր գործառույթը, դրա համար մենք պետք է վերջին անգամ փոխենք TIMER RYTHM- ը

TIMER RYTHM- ն այժմ պետք է ունենա այս տեսքը.

// սկսել TIMER RYTHM ****************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("ես չեմ աշխատում"); } else if (adaData == 1) {ժամանակաչափ (); } else if (adaData == 2) {կրկնել (); } strip.show (); } // վերջ TIMER RYTHM ***************************************** ************

Բեռնեք ձեր ծածկագիրը…

Այժմ դուք նույնպես պետք է կարողանաք վերականգնել ժամաչափը `սեղմելով կոճակը:

Խորհուրդ ենք տալիս: