Turinys:
- Prekės
- 1 žingsnis: sukurkime kanalą „Adafruit“
- 2 žingsnis: Dabar sukurkime prietaisų skydelį
- 3 žingsnis: Gaukite mūsų raktą
- 4 veiksmas: atidarykite informacijos santraukos skaitymo pavyzdį
- 5 veiksmas: nustatykime ryšį
- 6 veiksmas: patikrinkite ryšį su „Adafruit IO“
- 7 žingsnis: Leiskite LED
- 8 veiksmas: pridėkite laiką prie laikmačio
- 9 žingsnis: atgalinis skaičiavimas
- 10 veiksmas: valdykite nuotoliniu būdu: I dalis
- 11 veiksmas: valdykite nuotoliniu būdu: II dalis
- 12 žingsnis: žaiskite! Mes baigėme … ar darome?
- 13 veiksmas: PAPILDOMAS: sukurkite momentinį mygtuką
- 14 žingsnis: PAPILDOMAS: pridėkite atstatymo funkciją
Video: Nuotoliniu būdu valdomas laikmatis su „NodeMCU“: 14 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
Č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“
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, 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ą
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į
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“
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
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
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
- Prijunkite jungiklį prie laikmačio tiekimo
- Įjungimo vertę nustatykite į: 1
- 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ą
Grįžkime prie savo prietaisų skydelio. Dabar mes vėl norime sukurti naują bloką.
- Sukurkite momentinį mygtuką
- Prijunkite jį prie laikmačio kanalo
- Nustatykite spaudos vertę į: 2
- PAŠALINK išleidimo vertę
- 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:
Nuotoliniu būdu valdomas automobilis - valdomas naudojant belaidį „Xbox 360“valdiklį: 5 žingsniai
Nuotoliniu būdu valdomas automobilis - valdomas naudojant belaidį „Xbox 360“valdiklį: tai instrukcijos, skirtos sukurti savo nuotoliniu būdu valdomą automobilį, valdomą naudojant belaidį „Xbox 360“valdiklį
Nuotoliniu būdu valdomas 6WD visureigis robotas: 10 žingsnių (su nuotraukomis)
Nuotoliniu būdu valdomas 6WD visureigis robotas: Dauguma iki šiol sukurtų robotų buvo keturių ratų robotai, kurių keliamoji galia siekė kelis kilogramus. Šį kartą nusprendžiau sukurti didesnį robotą, kuris lengvai įveiks įvairias kliūtis savo kelyje ir galės judėti ne mažesne kaip
„Maverick“- nuotoliniu būdu valdomas dvikryptis ryšių automobilis: 17 žingsnių (su nuotraukomis)
„Maverick“- nuotoliniu būdu valdomas dvikryptis ryšių automobilis: Sveiki visi, aš Razvanas ir sveiki atvykę į mano „Maverick““ projektas. Man visada patiko nuotoliniu būdu valdomi dalykai, bet aš niekada neturėjau RC automobilio. Taigi nusprendžiau sukurti tokį, kuris gali padaryti daugiau nei tik judėti. Šiam projektui mes
Nuotoliniu būdu valdomas robotas naudojant „Arduino“ir „T.V. Remote“: 11 žingsnių
Nuotoliniu būdu valdomas robotas naudojant „Arduino“ir televizoriaus nuotolinio valdymo pultą: Šis nuotoliniu būdu valdomas automobilis gali būti perkeltas naudojant praktiškai bet kokį nuotolinio valdymo pultą, pvz., Televizorių, kintamosios srovės ir pan. Naudojant tai, kad nuotolinio valdymo pultas skleidžia IR (infraraudonųjų spindulių) spindulius. Ši savybė naudojama naudojant IR imtuvą, kuris yra labai pigus jutiklis
Nuotoliniu būdu valdomas robotas: 11 žingsnių (su nuotraukomis)
Nuotoliniu būdu valdomas robotas: šis nurodymas buvo sukurtas vykdant Pietų Floridos universiteto „Makecourse“projekto reikalavimą (www.makecourse.com). Šioje pamokoje aš jums parodysiu, kaip sukurti robotą, kurį galima valdyti bet kokiu infraraudonųjų spindulių