Turinys:

Nuotoliniu būdu valdomas laikmatis su „NodeMCU“: 14 žingsnių
Nuotoliniu būdu valdomas laikmatis su „NodeMCU“: 14 žingsnių

Video: Nuotoliniu būdu valdomas laikmatis su „NodeMCU“: 14 žingsnių

Video: Nuotoliniu būdu valdomas laikmatis su „NodeMCU“: 14 žingsnių
Video: Geležinio Vilko pratybose – NATO pajėgumų išbandymas ir estų nuotoliniu būdu valdoma karinė technika 2024, Liepa
Anonim
Nuotoliniu būdu valdomas laikmatis su „NodeMCU“
Nuotoliniu būdu valdomas laikmatis su „NodeMCU“

Čia mes sukursime laikmatį naudodami „NodeMCU“ir „Adafruit“. Mes rodysime savo laikmatį su LED juostele ir galėsime jį valdyti naudodami telefoną ar kompiuterį!

Mūsų tikslas:

Sukurkite laikmatį naudodami LED juostą, kurią galime: paleisti, pristabdyti ir iš naujo nustatyti naudodami telefoną ar kompiuterį.

Prekės

Techninė įranga:

  • „NodeMCU ESP 8266“
  • „Adafruit NeoPixel“LED juostelė

Bibliotekos:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Kiti:

Tinkamas „WiFi“ryšys

1 žingsnis: sukurkime kanalą „Adafruit“

Sukurkime kanalą „Adafruit“!
Sukurkime kanalą „Adafruit“!

Dabar, kai turime viską, ko reikia, esame pasiruošę pradėti kurti! Pirmiausia turime sukurti kanalą „Adafruit“. „Adafruit“yra paslauga, leidžianti tikrai lengvai prijungti „Arduino“prie interneto ir sukurti naudingų nuotolinio valdymo funkcijų. Jei to dar nepadarėte, užsiregistruokite „Adafruit“.

Dabar sukurkime naują kanalą

Savo kanalą galime pavadinti bet kuo, ką aš noriu, aš jį vadinu „laikmačiu“.

Sklaidos kanalas užfiksuoja viską, ką darome, savo prietaisų skydelyje (kurį sukursime vos per minutę) ir siunčia tuos duomenis į mūsų lentą, bet mes tai išnagrinėsime iškart, kai turėsime siųsti duomenis.

2 žingsnis: Dabar sukurkime prietaisų skydelį

Dabar padarykime prietaisų skydelį
Dabar padarykime prietaisų skydelį
Dabar padarykime prietaisų skydelį
Dabar padarykime prietaisų skydelį
Dabar padarykime prietaisų skydelį
Dabar padarykime prietaisų skydelį

Dabar, kaip ir sklaidos kanalo, mes sukursime naują informacijos suvestinę. Savo prietaisų skydelį vadinsiu „laikmačio sąsaja“, nes iš esmės tai bus mūsų prietaisų skydelis: sąsaja su laikmačio valdymo mygtukais.

3 žingsnis: Gaukite mūsų raktą

Gaukite mūsų raktą
Gaukite mūsų raktą

Jei norime prijungti „Arduino“prie mūsų pašaro, turime gauti „Adafruit“raktą, tai yra jūsų slaptas slaptažodis, kuris užtikrins, kad tik jūs galėtumėte prisijungti prie savo kanalų.

Raktą galite gauti spustelėję geltoną „AIO Key“mygtuką, esantį „Adafruit“ekrano viršuje, dešinėje.

Išsaugokite šį raktą kažkur, mums jo prireiks vėliau.

Nesidalinkite savo raktu! Priešingu atveju žmonės, turintys blogų ketinimų, galėtų prisijungti prie jūsų kanalų ir įrenginių.

4 veiksmas: atidarykite informacijos santraukos skaitymo pavyzdį

Atidarykite sklaidos kanalo skaitymo pavyzdį
Atidarykite sklaidos kanalo skaitymo pavyzdį

Dabar atidarykime „Arduino IDE“ir pradėkime kodavimo procesą. Pirmiausia turime įdiegti „Adafruit IO Arduino“biblioteką.

Nežinote, kaip įdiegti bibliotekas? tai puikus „Adafruit“vadovas: „Arduino Libraries“

„Adafruit“siūlo daug iš anksto paruoštų pavyzdžių, kuriais galime naudotis ir iš kurių mokytis. Vienas iš šių pavyzdžių yra: adafruitio_21_feed_read. Šį pavyzdį rasite čia: Failas - Pavyzdžiai Adafruit IO Arduino adafruitio_21_feed_read

(atleiskite mano olandų sąsają paveikslėlyje)

5 veiksmas: nustatykime ryšį

Jei sėkmingai atidarėte eskizą „adafruitio_21_feed_read“, eskize turėtumėte matyti 2 skirtukus: adafruitio_21_feed_read ir config.h. Šis eskizas buvo sukurtas tam, kad galėtume prisijungti prie kanalo, kurį padarėme atlikdami 1 veiksmą.

Norėdami prisijungti prie šio kanalo, turime užpildyti keletą informacijos apie „WiFi“ir „Adafruit“paskyrą,

Keliaukime į config.h, čia užpildysime šią informaciją:

Jūsų „Adafruit“naudotojo vardas:

#define IO_USERNAME "joopert"

Jūsų „Adafruit“raktas:

#define IO_KEY "1234567890abcdefghijklmnop"

Jūsų „WiFi“pavadinimas:

#define WIFI_SSID „MyWifi“

Ir jūsų „WiFi“slaptažodis:

#define WIFI_PASS "aVerySecretPassword"

Dabar grįžkime į skirtuką adafruitio_21_feed_read ir užpildykime:

Jūsų „Adafruit“naudotojo vardas… dar kartą:

#define FEED_OWNER "joopert"

Ir galiausiai jūsų sklaidos kanalo pavadinimas (iš sklaidos kanalo, kurį sukūrėme atlikdami 1 veiksmą):

AdafruitIO_Feed *sharedFeed = io.feed ("laikmatis", FEED_OWNER);

6 veiksmas: patikrinkite ryšį su „Adafruit IO“

Patikrinkite ryšį su „Adafruit IO“
Patikrinkite ryšį su „Adafruit IO“

Norėdami patikrinti, ar anksčiau atlikti veiksmai buvo atlikti teisingai, įkeliame eskizą į „NodeMCU“. Jei atidarysite nuoseklųjį monitorių, jis turėtų atrodyti panašiai kaip paveikslėlyje aukščiau. Pirmiausia serijinis monitorius rodo, kad bando prisijungti prie jūsų „WiFi“ir „Adafruit“. jei viskas baigta, turėtų būti parašyta:

„Adafruit IO“prijungtas

Tai puiki naujiena! Dabar galime pradėti pridėti funkcionalumą prie laikmačio …

7 žingsnis: Leiskite LED

Leidžia LED
Leidžia LED
Leidžia LED
Leidžia LED

Dabar atėjo laikas įjungti mūsų LED juostelę!

Prijunkite savo LED juostelę prie D5 PIN kodo (jei nerandate D5, prijunkite jį prie kito PIN kodo ir pakeiskite LED_PIN kodu).

Apibrėžkite LED juostelę

Šis kodas pridės „NeoPixel“biblioteką (daugiau apie šią biblioteką rasite čia: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) ir įsitikinkite, kad mūsų „Arduino“žino, kur yra mūsų LED juostelė ir kiek lempučių turi. Jei jūsų LED juostelės specifikacijos skiriasi, pakeiskite ją kodu.

VIRŠ tuštumos sąrankos () pridėkite šį kodą:

// nustatyti „NeoPixel“ryšį #include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Kur prijungta LED juostelė?

#define LED_COUNT 30 // Kiek pikselių jis turi?

#define BRIGHTNESS 50 // „NeoPixel“ryškumas, nuo 0 (min) iki 255 (maks.)

„Adafruit_NeoPixel“juostelė (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Paleiskite LED juostą

Dabar paleisime savo LED juostelę ir nustatysime ryškumą (ryškumas svyruoja nuo 0 iki 255 maks., Bet aš rekomenduoju 50… 255 yra TIKRAI ryškus).

Į tuščią sąranką () pridėkite šį kodą:

strip.begin (); // INICIALIZUOTI „NeoPixel“juostos objektą (REIKALINGA) strip.show (); // ASAP išjungti visus pikselius ASAP strip.setBrightness (50); // Nustatykite BRIGHTNESS į maždaug 1/5 (maks. = 255)

ledsOn (); // Kviečia funkciją įjungti kiekvieną šviesos diodą po vieną

Įjunkite šviesas

Galbūt jau pastebėjote, kad mes vadiname dar neegzistuojančią funkciją, tai bus kita mūsų kodavimo dalis. Jei norime įjungti šviesas, turime sukurti „for loop“, kuris įjungia kiekvieną atskirą šviesos diodą po vieną (nežinote, kas yra kilpa? Patikrinkite čia: www.arduino.cc/reference/ lt/language/structure/control-structure/for/).

Dabar mes sukursime funkciją: ledsOn ();

Įtraukite šį kodą žemiau void handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Kiekvienam juostelės pikseliui… strip.setPixelColor (i, 0, 0, 255); // Nustatykite pikselio spalvą į mėlyną juostelę.show (); // Atnaujinti juostelę, kad atitiktų}}

Įkelti

Dabar yra linksma dalis, įkelkime savo kodą į „NodeMCU“… Jei viskas veikia tinkamai, jūsų LED juostelė dabar turėtų tapti visiškai mėlyna!

Ar nerodomi pikseliai ?: ar prijungėte juostą prie tinkamo PIN kodo? O gal jūsų interneto ryšys prarastas.

Ar nerodomi tik kai kurie pikseliai ?: patikrinkite, ar nustatėte tinkamą pikselių kiekį!

8 veiksmas: pridėkite laiką prie laikmačio

Dabar mes įsitikinsime, kad mūsų laikmatis iš tikrųjų … na … kartus, kažkas.

Yra įvairių būdų, kaip nustatyti laiką naudojant „Arduino“, vienas yra uždelsimas (), tai sustabdo mūsų lentos apdorojimą tam tikrą laiką. Mes to nenaudosime, nes mūsų „Arduino“iš esmės užšąla vėlavimo metu ir norime, kad mūsų lenta būtų reguliariai atnaujinama. Taigi mes naudosime „Millis“(), tai yra elegantiškesnis būdas nustatyti laiką „Arduino“, o „Millis“() vis tiek galime paleisti kodą tarp intervalų.

Jei jus domina, kaip tai veikia, galite perskaityti šį straipsnį:

Pridėkime Millis () kodą:

Įdėkite šį kodą virš anuliavimo sąrankos ()

unsigned long previousMillis = 0; // bus saugomas paskutinį kartą, kai LED juostelė buvo atnaujintais intervalais = 1000; // mūsų laikmačio intervalas (milisekundės)

Įdėkime šį kodą į tuštumos ciklą ():

nepasirašyta ilga srovėMillis = milis ();// paleisti TIMER RYTHM ******************************************** ********* if (currentMillis - previousMillis> = intervalas) {previousMillis = currentMillis;

// pabaiga TIMER RYTHM ******************************************** ***********

Ką tik padarėme, sukūrėme ritmą, kad mūsų LED juostelė išjungtų šviesos diodus, kitame žingsnyje pridėsime kodą, kad tai padarytume.

9 žingsnis: atgalinis skaičiavimas

Šiame žingsnyje: mes sukursime funkciją, kuri užtikrins, kad kiekvieną sekundę (ar bet kokį jūsų nustatytą intervalą) mes išjungsime VIENĄ šviesos diodą juostos pabaigoje, kol visi mūsų šviesos diodai užges.

Viršuje sukursime „int“, vadinamą „LED“. Tai vėliau parodys mūsų laikmačiui, kiek šviesos diodų jis dar turi išjungti.

Virš anuliavimo sąrankos pridėkite šį kodą ():

int LED = LED_COUNT-1; // nurodo, kiek pikselių turėtų būti apšviesta

Dabar pridėkime funkciją „timer ();“, tai kiekvieną sekundę išjungs šviesą

Toliau pridėkite šį kodą po negaliojančiomis lemputėmis ():

void timer () {strip.setPixelColor (šviesos diodai, 0, 0, 0);

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

Norime suteikti vartotojui tam tikrą atsiliepimą, kad laikmatis padarytas po to, kai visos lemputės sudegė. Su „blinkie ();“pasibaigus laikmačiui šviesos diodai mirksės raudonai!

VIRŠ tuštumos sąrankos () pridėkite šį kodą:

int blinkStatus = 1; // pasako blinkie (); veikti, kai šviesa turi būti įjungta arba išjungta

Toliau pridėkite šį kodą, esantį po negaliojimo laikmačiu ():

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

blinkStatus = 0; strip.clear (); } else {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Kiekvienam juostelės pikseliui… strip.setPixelColor (i, 255, 0, 0); // Nustatykite pikselio spalvos (RAM) juostelę.show (); // Atnaujinti juostelę, kad atitiktų}}}}

Galiausiai turime iškviesti funkciją mūsų tuštumos cikle ();, Prisiminkite LAIKMATINĮ RITMĄ, kurį pridėjome atlikdami 8 veiksmą? Šiame if sakinyje mes iškviesime funkciją timer ();.

„TIMER RYTHM“dabar turėtų atrodyti taip:

// paleisti TIMER RYTHM ******************************************** *********

if (currentMillis - previousMillis> = intervalas) {previousMillis = currentMillis; laikmatis (); strip.show ();} // pabaiga TIMER RYTHM ************************************* ******************

Dabar įkelkite šį kodą!

Šiuo metu jūsų LED juostelė turėtų išjungti 1 LED kiekvieną sekundę ir mirksėti raudonai, kai tai bus padaryta …

Dabar padarykime šį mylimąjį nuotoliniu būdu valdomą!

10 veiksmas: valdykite nuotoliniu būdu: I dalis

Padarykite jį nuotoliniu būdu valdomą: I dalis
Padarykite jį nuotoliniu būdu valdomą: I dalis
Padarykite jį nuotoliniu būdu valdomą: I dalis
Padarykite jį nuotoliniu būdu valdomą: I dalis

Mes turime laikmatį, viskas gerai ir dandy, bet aš pažadėjau jums, kad galėsite valdyti jį savo telefonu? Pradėkime paskutinį savo projekto etapą: nuotoliniu būdu valdysime laikmatį.

Ar vis dar atidarytas „Adafruit“skirtukas? Keliaukime atgal į io.adafruit.com ir eikime į laikmačio sąsajos prietaisų skydelį ir sukurkime naują bloką: TOGGLE

  1. Prijunkite jungiklį prie laikmačio tiekimo
  2. Įjungimo vertę nustatykite į: 1
  3. Nustatykite OFF reikšmę: 0

Taip yra todėl, kad „Adafruit“nesiunčia teksto duomenų į mūsų „NodeMCU“, o tik numerius.

Jei norite, „Toggle“taip pat galite suteikti pavadinimą, galbūt: „Įjungimo/išjungimo jungiklis“

Dabar grįžkime prie „Arduino IDE“

Tiesiog norėdami įsitikinti, kad mūsų kodas yra atnaujintas, dar kartą ĮKELTI mūsų kodą.

Atidarykite SERIALINĮ MONITORĮ, kai tik jis bus įkeltas, ir kelis kartus paspauskite jungiklį mūsų „Adafruit“prietaisų skydelyje. Dabar mūsų serijiniame monitoriuje turėtų pasirodyti kažkas panašaus:

gauta <- 0 gauta <- 1 gauta <- 0 gauta <- 1 gauta <- 0

Tai reiškia, kad iš tikrųjų galime siųsti valdiklius į savo „NodeMCU“!

Jei negaunate šių pranešimų, patikrinkite, ar jūsų konfigūracijoje „Adafruit“duomenys vis dar teisingi.

11 veiksmas: valdykite nuotoliniu būdu: II dalis

Dabar belieka ką nors daryti su gautais valdikliais.

Norėdami tai padaryti, mes turime pakeisti savo TIMER RYTHM if pareiškimą į void loop (); truputi.

Mes pasakysime savo „NodeMCU“, kad jis turėtų paleisti laikmatį tik tada, kai gavome „1“(tai reiškia: ĮJUNGTA) iš „Adafruit“.

Pirmiausia surinksime duomenis, kuriuos mums siunčia „Adafruit“

Virš anuliavimo sąrankos pridėkite šį kodą ():

int adaData; // renka duomenis, kuriuos mums siunčia „AdaFruit“

Dabar iš tikrųjų surinksime tuos duomenis

Įtraukite šį kodą INSIDE the void handleMessage ():

adaData = duomenys-> toInt ();

Pakeiskime savo tuštumos kilpą ();

„TIMER RYTHM“dabar turėtų atrodyti taip:

// paleisti TIMER RYTHM ******************************************** ********* if (currentMillis - previousMillis> = intervalas) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("im neveikia"); } else if (adaData == 1) {timer (); } strip.show (); } // pabaiga TIMER RYTHM ******************************************* ************

ĮKELTI savo kodą…

Dabar turėtumėte įjungti ir išjungti laikmatį naudodami jungiklį „Adafruit“!

12 žingsnis: žaiskite! Mes baigėme … ar darome?

Šiuo metu turėtumėte turėti visiškai veikiantį nuotolinį laikmatį! Jei tai jums, tada ačiū, kad dalyvavote kartu su šiuo projektu!

Jei norite tęsti šiek tiek ilgiau, atlikdami kelis veiksmus pridėsime laikmačio RESET mygtuką!

13 veiksmas: PAPILDOMAS: sukurkite momentinį mygtuką

PAPILDOMAS: Sukurkite momentinį mygtuką
PAPILDOMAS: Sukurkite momentinį mygtuką

Grįžkime prie savo prietaisų skydelio. Dabar mes vėl norime sukurti naują bloką.

  1. Sukurkite momentinį mygtuką
  2. Prijunkite jį prie laikmačio kanalo
  3. Nustatykite spaudos vertę į: 2
  4. PAŠALINK išleidimo vertę
  5. Suteikite jam gražią spalvą!

Patogiai momentinis mygtukas jau vadinamas „Reset“!

Sukūrę šį bloką, išbandykite, mygtukas veikia, jei gaunate:

gavo <- 2

Savo serijiniame monitoriuje.

Jei nematote šio pranešimo, pabandykite iš naujo įkelti eskizą

14 žingsnis: PAPILDOMAS: pridėkite atstatymo funkciją

Norėdami, kad atstatymo mygtukas padarytų viską, turime pridėti funkciją, kuri grąžina visus šviesos diodus į pradinę būseną.

Toliau pridėkite šį kodą po „void blinkie“():

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

Dabar belieka paskambinti mūsų funkcijai, todėl paskutinį kartą turime pakeisti laikmačio ritmą

„TIMER RYTHM“dabar turėtų atrodyti taip:

// paleisti TIMER RYTHM ******************************************** ********* if (currentMillis - previousMillis> = intervalas) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("im not running"); } else if (adaData == 1) {timer (); } else if (adaData == 2) {rerun (); } strip.show (); } // pabaiga TIMER RYTHM ******************************************* ************

ĮKELTI savo kodą…

Dabar jūs taip pat turėtumėte sugebėti iš naujo nustatyti laikmatį paspausdami mygtuką!

Rekomenduojamas: