Sadržaj:

Odbrojavanje na daljinsko upravljanje s NodeMCU: 14 koraka
Odbrojavanje na daljinsko upravljanje s NodeMCU: 14 koraka

Video: Odbrojavanje na daljinsko upravljanje s NodeMCU: 14 koraka

Video: Odbrojavanje na daljinsko upravljanje s NodeMCU: 14 koraka
Video: Управление сервоприводом с помощью джойстика ардуино. 2024, Srpanj
Anonim
Odbrojavanje na daljinsko upravljanje s NodeMCU
Odbrojavanje na daljinsko upravljanje s NodeMCU

Ovdje ćemo stvarati mjerač vremena koristeći NodeMCU i Adafruit. Prikazat ćemo svoj mjerač vremena s LED trakom i moći ćemo ga kontrolirati pomoću telefona ili računala!

Naš cilj:

Izradite mjerač vremena pomoću LED trake koji možemo: pokrenuti, pauzirati i resetirati pomoću telefona ili računala.

Pribor

Hardver:

  • NodeMCU ESP 8266
  • Adapruit NeoPixel LED traka

Knjižnice:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Ostalo:

Pristojna WiFi veza

Korak 1: Kreirajmo feed u Adafruit -u

Kreirajmo feed u Adafruit -u!
Kreirajmo feed u Adafruit -u!

Sada kada imamo sve što nam je potrebno, spremni smo za početak gradnje! Prije svega moramo stvoriti feed u Adafruit -u. Adafruit je usluga koja nam jako olakšava povezivanje našeg Arduina s internetom i stvaranje korisnih značajki daljinskim upravljanjem. Ako već niste, prijavite se za Adafruit.

Sada stvorimo novi feed

Našoj hrani možemo dati ime što god želimo, ja to zovem 'timer'.

Ono što feed radi je bilježenje svega što radimo na našoj nadzornoj ploči (koju ćemo stvoriti za samo minutu) i slanje tih podataka na našu ploču, ali to ćemo pogledati nakon što imamo podatke za slanje.

Korak 2: Sada napravimo nadzornu ploču

Sada napravimo nadzornu ploču
Sada napravimo nadzornu ploču
Sada napravimo nadzornu ploču
Sada napravimo nadzornu ploču
Sada napravimo nadzornu ploču
Sada napravimo nadzornu ploču

Sada, na isti način na koji smo napravili feed, stvorit ćemo novu nadzornu ploču. Nazvat ću svoju nadzornu ploču: 'timer interface' jer će to u biti i biti naša nadzorna ploča: sučelje s gumbima za kontrolu našeg timera.

Korak 3: Uzmite naš ključ

Uzmite naš ključ
Uzmite naš ključ

Ako želimo povezati naš Arduino s našim feedom, moramo nabaviti ključ Adafruit, ovo je vaša tajna lozinka koja će osigurati da se samo vi možete povezati sa svojim izvorima.

Ključ možete dobiti klikom na žuti gumb AIO ključa u gornjem desnom kutu zaslona u Adafruit -u.

Spremite ovaj ključ negdje, trebat će nam kasnije.

Ne dijelite svoj ključ! Inače bi se ljudi s lošim namjerama mogli povezati s vašim feedovima i uređajima.

Korak 4: Otvorite primjer čitanja feeda

Otvorite Primjer čitanja izvora
Otvorite Primjer čitanja izvora

Sada otvorimo naš Arduino IDE i započnimo proces kodiranja. Prije svega moramo imati instaliranu biblioteku Adafruit IO Arduino.

Ne znate kako instalirati knjižnice? ovo je izvrstan Adafruit vodič: Arduino knjižnice

Adafruit nam nudi mnogo unaprijed izrađenih primjera za korištenje i učenje. Jedan od ovih primjera je: adafruitio_21_feed_read. Ovaj primjer možete pronaći ovdje: Datoteka - Primjeri Adafruit IO Arduino adafruitio_21_feed_read

(oprostite na holandskom sučelju na slici)

5. korak: Uspostavimo svoju vezu

Ako ste uspješno otvorili skicu adafruitio_21_feed_read, trebali biste vidjeti 2 kartice u skici: adafruitio_21_feed_read i config.h. Ova je skica napravljena tako da se možemo povezati s feedom koji smo napravili u koraku 1.

Za povezivanje s ovim feedom potrebno je ispuniti nekoliko pojedinosti o našoj WiFi mreži i našem računu Adafruit,

Putujmo na config.h, ovdje ćemo ispuniti sljedeće detalje:

Vaše korisničko ime Adafruit:

#define IO_USERNAME "joopert"

Vaš ključ Adafruit:

#define IO_KEY "1234567890abcdefghijklmnop"

Naziv vašeg WiFi -ja:

#define WIFI_SSID "MyWifi"

I vaša WiFi lozinka:

#define WIFI_PASS "aVerySecretPassword"

Vratimo se sada na karticu adafruitio_21_feed_read i ispunimo:

Vaše korisničko ime Adafruit … opet:

#define FEED_OWNER "joopert"

I na kraju vaše ime feeda (iz feeda koji smo napravili u koraku 1):

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

Korak 6: Provjerite vezu s Adafruit IO

Provjerite vezu s Adafruit IO
Provjerite vezu s Adafruit IO

Kako bismo provjerili jesu li koraci koje smo poduzeli prije ispravno izvedeni, prenijet ćemo svoju skicu u NodeMCU. Ako otvorite serijski monitor, trebao bi izgledati poput gornje slike. Prvo vam serijski monitor pokazuje da se pokušava spojiti na vaš WiFi i Adafruit. ako je to kompletno, trebalo bi reći:

Adafruit IO spojen

Ovo je sjajna vijest! Sada možemo početi dodavati funkcionalnost našem mjeraču vremena …

Korak 7: Omogućuje LED

Omogućuje LED
Omogućuje LED
Omogućuje LED
Omogućuje LED

Sada je vrijeme da uključite našu LED traku!

Spojite svoju LED traku s PIN -om D5 (ako ne možete pronaći D5, povežite ga s drugim PIN -om i promijenite LED_PIN u kodu).

Definirajte LED traku

Sljedeći će kôd dodati NeoPixel knjižnicu (saznajte više o ovoj biblioteci ovdje: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) i pobrinite se da naš Arduino zna gdje je naša LED traka i koliko svjetla ima. Ako vaša LED traka ima različite specifikacije, promijenite je u kodu.

Dodajte sljedeći kod IZNAD void setup ():

// postavljanje NeoPixel veze #include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Gdje je LED traka spojena?

#define LED_COUNT 30 // Koliko piksela ima?

#define BRIGHTNESS 50 // Svjetlina NeoPixela, 0 (min) do 255 (max)

Adapruit_NeoPixel traka (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Pokrenite LED traku

Sada ćemo pokrenuti LED traku i postaviti svjetlinu (svjetlina ide od 0 min do 255 max, ali preporučujem da je 50… 255 stvarno svijetlo).

U void setup () dodajte sljedeći kôd:

strip.begin (); // INICIALIZE NeoPixel strip objekt (OBAVEZNO) strip.show (); // ISKLJUČI sve piksele ASAP strip.setBrightness (50); // Postavite BRIGHTNESS na otprilike 1/5 (max = 255)

ledsOn (); // Poziva funkciju za uključivanje svake LED diode jednu po jednu

Upalite svjetla

Možda ste već primijetili da zovemo funkciju koja još ne postoji, to će biti naš sljedeći dio kodiranja. Ako želimo uključiti svjetla, moramo stvoriti "for loop" koji uključuje svaku pojedinačnu LED diodu jednu po jednu (ne znate što je for petlja? Provjerite ovdje: www.arduino.cc/reference/ hr/jezik/struktura/kontrolna-struktura/za/).

Sada ćemo stvarati funkciju: ledsOn ();

Dodajte sljedeći kod ispod void handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Za svaki piksel u traci … strip.setPixelColor (i, 0, 0, 255); // Postavi boju piksela na plavu traku.show (); // Ažuriraj traku tako da odgovara}}

Učitaj

Sada je zabavan dio, ajmo prenijeti naš kôd na NodeMCU … Ako sve radi ispravno, vaša LED traka bi sada trebala postati potpuno plava!

Ne prikazuju li se pikseli?: Jeste li traku spojili na pravi PIN? Ili je možda vaša internetska veza izgubljena.

Ne pojavljuju li se samo neki pikseli ?: provjerite jeste li postavili pravu količinu piksela!

Korak 8: Dodajte vrijeme u mjerač vremena

Sada ćemo se pobrinuti da naš mjerač vremena zapravo … pa … puta, nešto.

Postoje različiti načini mjerenja vremena s Arduinom, jedan je delay (), to zaustavlja obradu naše ploče na određeno vrijeme. Ovo nećemo koristiti jer se naš Arduino u osnovi zamrzava tijekom kašnjenja i želimo da se naša ploča redovito ažurira. Dakle, koristit ćemo Millis (), ovo je elegantniji način mjerenja vremena u Arduinu, s Millisom () još uvijek možemo pokrenuti kod između intervala.

Ako vas zanima kako ovo funkcionira, možete pogledati ovaj članak:

Dodajmo kôd za Millis ():

Stavite ovaj kod ISPRED postavki void ()

unsigned long previousMillis = 0; // pohranit će zadnji put ažuriranje LED trake u intervalima = 1000; // interval našeg mjerača vremena (milisekunde)

I stavimo ovaj kod u void loop ():

bezznačna duga strujaMillis = millis ();// pokretanje TIMER RITMA ******************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// kraj TIMER RITMA ******************************************* ***********

Ono što smo upravo učinili je stvorili ritam za našu LED traku za isključivanje LED dioda, u sljedećem koraku ćemo dodati kôd za to.

Korak 9: Odbrojavanje

U ovom koraku: napravit ćemo funkciju koja će se pobrinuti da svake sekunde (ili bilo koji interval koji ste postavili) isključujemo JEDNU LED na kraju trake dok se sve naše LED diode ne isključe.

Na vrhu ćemo stvoriti 'int' pod nazivom 'LED'. To će kasnije reći našem mjeraču vremena koliko LED dioda još mora isključiti.

Dodajte sljedeći kod IZNAD void setup ():

int LED = LED_COUNT-1; // govori koliko piksela treba biti osvijetljeno

Sada dodajmo funkciju 'timer ();', ovo će isključiti svjetlo svake sekunde

Dodajte sljedeći kôd ISPOD void ledsOn ():

void timer () {strip.setPixelColor (LED diode, 0, 0, 0);

if (LED diode> -1) {LED diode--; } else {blinkie (); }}

Želimo dati neke povratne informacije korisniku da je mjerač vremena učinjen nakon što su sva svjetla izgorjela. Sa 'blinkie ();' LED diode će treptati crveno nakon odbrojavanja!

Dodajte sljedeći kod IZNAD void setup ():

int blinkStatus = 1; // govori blinkie (); funkcija bilo da svjetlo treba biti uključeno ili isključeno

Dodajte sljedeći kôd Ispod void timera ():

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

blinkStatus = 0; strip.clear (); } else {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Za svaki piksel u traci … strip.setPixelColor (i, 255, 0, 0); // Postavljanje strip -boje u boji (u RAM -u) strip.show (); // Ažuriraj traku tako da odgovara}}}}

Na kraju moramo pozvati funkciju u našoj void loop ();, Sjećate li se TIMER RITMA koji smo dodali u koraku 8? U ovom if iskazu pozvat ćemo funkciju timer ();.

TIMER RYTHM bi sada trebao izgledati ovako:

// pokretanje TIMER RITMA ******************************************* *********

if (currentMillis - previousMillis> = interval) {previousMillis = trenutniMillis; mjerač vremena (); strip.show ();} // kraj TIMER RITMA ************************************** ******************

Sada učitajte ovaj kôd!

Trenutno bi vaša LED traka trebala gasiti 1 LED svake sekunde i treptati crveno kad to završi …

Učinimo sada ovo majčinstvo daljinskim upravljačem!

Korak 10: Omogućite daljinsko upravljanje: I. dio

Neka bude daljinski upravljano: I. dio
Neka bude daljinski upravljano: I. dio
Neka bude daljinski upravljano: I. dio
Neka bude daljinski upravljano: I. dio

Imamo tajmer, sve je u redu i uredno, ali obećao sam vam da ćete ga moći kontrolirati svojim telefonom, zar ne? Uđimo u završnu fazu našeg projekta: postavljanje našeg timera na daljinsko upravljanje.

Još uvijek imate otvorenu karticu Adafruit? Vratimo se nazad na io.adafruit.com i idemo na nadzornu ploču vremenskog sučelja i stvorimo novi blok: TOGGLE

  1. Spojite prekidač na TIMER izvod
  2. Vrijednost UKLJUČENJA postavite na: 1
  3. Vrijednost OFF postavite na: 0

Razlog tome je što Adafruit ne šalje tekstualne podatke u naš NodeMCU, već samo brojeve.

Toggle -u također možete dati ime ako želite, možda: 'Uključivanje/isključivanje prekidača'

Vratimo se sada na Arduino IDE

Samo kako bismo bili sigurni da je naš kôd ažuran, još jednom učitajmo naš kôd.

OTVORITE SERIJSKI MONITOR nakon što završite s učitavanjem i nekoliko puta PRITISNITE TOGGLE na našoj Adafruit nadzornoj ploči. Sada bismo trebali vidjeti ovako nešto na našem serijskom monitoru:

primljeno <- 0primljeno <- 1 primljeno <- 0 primljeno <- 1 primljeno <- 0

To znači da zapravo možemo poslati kontrole na naš NodeMCU!

Ako ne primate ove poruke, provjerite jesu li vaši podaci Adafruit u vašem config.h još uvijek točni.

Korak 11: Omogućite daljinsko upravljanje: Dio II

Sada ostaje samo učiniti nešto s našim primljenim kontrolama.

Da bismo to učinili, moramo promijeniti naš TIMER RYTHM if izraz u void loop (); malo.

Reći ćemo našem NodeMCU -u da bi trebao pokrenuti mjerač vremena tek kad primimo '1' (što znači: UKLJUČENO) od Adafruit -a.

Prvo prikupimo podatke koje nam Adafruit šalje

Dodajte sljedeći kod IZNAD void setup ():

int adaData; // prikuplja podatke koje nam AdaFruit šalje

Sada prikupimo te podatke

Dodajte sljedeći kod UNUTAR void handleMessage ():

adaData = podaci-> toInt ();

Promijenimo našu void petlju ();

TIMER RYTHM bi sada trebao izgledati ovako:

// pokretanje TIMER RITMA ******************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("im ne radi"); } else if (adaData == 1) {timer (); } strip.show (); } // kraj TIMER RITMA ****************************************** ************

UČITAJTE svoj kôd …

Sada biste trebali moći uključiti i isključiti mjerač vremena pomoću prekidača u Adafruit -u!

Korak 12: Igrajte se! Gotovi smo … ili Jesmo?

Trenutno biste trebali imati potpuno funkcionalan daljinski mjerač vremena! Ako je to za vas, hvala vam što ste došli s ovim projektom!

Ako želite nastaviti malo duže, u sljedećih nekoliko koraka dodat ćemo gumb RESET za naš mjerač vremena!

Korak 13: DODATNO: Izradite trenutni gumb

EXTRA: Izradite trenutni gumb
EXTRA: Izradite trenutni gumb

Vratimo se našoj nadzornoj ploči. Sada želimo ponovo stvoriti novi blok.

  1. Stvorite gumb Momentary
  2. Spojite ga na 'timer' feed
  3. Vrijednost tiskanja postavite na: 2
  4. UKLONITE vrijednost izdanja
  5. Dajte mu lijepu boju!

Prikladno je da se trenutni gumb već naziva 'Reset'!

Nakon što stvorite ovaj blok, isprobajte ga, gumb će raditi ako primite:

primljeno <- 2

Na vašem serijskom monitoru.

Ako ne vidite ovu poruku, pokušajte ponovo prenijeti skicu

Korak 14: DODATNO: Dodajte funkciju poništavanja

Kako bismo gumb za poništavanje učinili bilo što, moramo dodati funkciju koja vraća sve LED diode natrag u izvorno stanje.

Dodajte sljedeći kôd ISPOD void blinkie ():

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

Sada preostaje samo pozivanje naše funkcije, za to moramo zadnji put promijeniti TIMER RITM

TIMER RYTHM bi sada trebao izgledati ovako:

// pokretanje TIMER RITMA ******************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("im not running"); } else if (adaData == 1) {timer (); } else if (adaData == 2) {rerun (); } strip.show (); } // kraj TIMER RITMA ****************************************** ************

UČITAJTE svoj kôd …

Sada biste također trebali moći resetirati mjerač vremena pritiskom na gumb!

Preporučeni: