Sadržaj:

Tajmer na daljinsko upravljanje sa NodeMCU: 14 koraka
Tajmer na daljinsko upravljanje sa NodeMCU: 14 koraka

Video: Tajmer na daljinsko upravljanje sa NodeMCU: 14 koraka

Video: Tajmer na daljinsko upravljanje sa NodeMCU: 14 koraka
Video: How to make a 8 Channel Transmitter | 8 Channel Simple RF Remote Control For RC | Part 01 #jlcpcb 2024, Juli
Anonim
Tajmer na daljinsko upravljanje sa NodeMCU
Tajmer na daljinsko upravljanje sa NodeMCU

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

Naš cilj:

Napravite tajmer pomoću LED trake koji možemo: pokrenuti, pauzirati i resetirati pomoću telefona ili računara.

Supplies

Hardver:

  • NodeMCU ESP 8266
  • Adapruit NeoPixel LED traka

Biblioteke:

  • 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 daljinski upravljanih funkcija. Ako već niste, prijavite se za Adafruit.

Sada kreirajmo novi feed

Našoj hrani možemo dati ime kako 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 kontrolnu ploču
Sada napravimo kontrolnu ploču
Sada napravimo kontrolnu ploču
Sada napravimo kontrolnu ploču
Sada napravimo kontrolnu ploču
Sada napravimo kontrolnu 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 osnovi i biti naša nadzorna ploča: sučelje s gumbima za kontrolu našeg tajmera.

Korak 3: Uzmite naš ključ

Nabavite naš ključ
Nabavite naš ključ

Ako želimo povezati naš Arduino s našim feedom, moramo nabaviti naš Adafruit ključ, 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 žuto dugme AIO ključ u gornjem desnom uglu ekrana u Adafruit -u.

Sačuvajte ovaj ključ negdje, trebat će nam kasnije.

Ne dijelite svoj ključ! U suprotnom bi se ljudi sa lošim namjerama mogli povezati s vašim sažecima sadržaja i uređajima.

Korak 4: Otvorite primjer čitanja izvora

Otvorite primjer čitanja izvora
Otvorite primjer čitanja izvora

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

Ne znate kako instalirati biblioteke? ovo je sjajan Adafruit vodič: Arduino biblioteke

Adafruit nudi mnogo unaprijed izrađenih primjera za upotrebu 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 interfejsu na slici)

Korak 5: Postavimo našu 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 skica je napravljena tako da se možemo povezati s feedom koji smo napravili u koraku 1.

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

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

Vaše korisničko ime Adafruit:

#define IO_USERNAME "joopert"

Vaš Adafruit ključ:

#define IO_KEY "1234567890abcdefghijklmnop"

Ime 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 popunimo:

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

Da bismo provjerili jesu li koraci koje smo prethodno poduzeli ispravno izvedeni, učitat ćemo našu skicu u NodeMCU. Ako otvorite serijski monitor, trebao bi izgledati poput gornje slike. Prvo vam serijski monitor pokazuje da se pokušava povezati na vašu WiFi mrežu i Adafruit. ako je to kompletno, trebalo bi reći:

Adafruit IO povezan

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

Korak 7: Omogućava LED

Omogućava LED
Omogućava LED
Omogućava LED
Omogućava LED

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

Povežite 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).

Definišite LED traku

Sljedeći kôd će dodati NeoPixel biblioteku (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 svetla 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 // NeoPixel svjetlina, 0 (min) do 255 (max)

Adafruit_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).

Dodajte sljedeći kod u void setup ():

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 pozivamo 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 šta je for petlja? Provjerite ovdje: www.arduino.cc/reference/ en/jezik/struktura/kontrolna-struktura/za/).

Sada ćemo kreirati 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 strip.show (); // Ažuriraj traku da odgovara}}

Upload

Sada je zabavni dio, prenesite naš kod na NodeMCU … Ako sve radi ispravno, vaša LED traka bi sada trebala postati potpuno plava!

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

Zar se samo neki pikseli ne prikazuju?: Provjerite jeste li postavili pravu količinu piksela!

Korak 8: Dodajte mjerenje vremena tajmeru

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

Postoje različiti načini mjerenja vremena s Arduinom, jedan je delay (), ovo zaustavlja obradu naše ploče na određeni vremenski period. Ovo nećemo koristiti jer se naš Arduino u osnovi zamrzava tijekom kašnjenja i želimo da se naša ploča redovno 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 kod 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 tajmera (milisekunde)

I stavimo ovaj kod u void loop ():

bez potpisa 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 kako bi isključili LED diode, 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'. Ovo ć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 kod Ispod void ledsOn ():

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

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

Želimo dati povratnu informaciju korisniku da je mjerač vremena urađen nakon što su sva svjetla izgorjela. Sa 'blinkie ();' LED diode će treperiti crveno nakon isteka mjerača vremena!

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 boje piksela (u RAM -u) strip.show (); // Ažuriraj traku 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; timer (); 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 …

Sada učinimo ovo majkoljublje daljinskim upravljanjem!

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 tajmera na daljinsko upravljanje.

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

  1. Spojite prekidač na TIMER izvod
  2. Vrijednost ON uključite na: 1
  3. Vrijednost OFF postavite na: 0

Razlog za to 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 da bismo bili sigurni da je naš kôd ažuran, hajde da UPLOADIMO naš kôd još jednom.

OTVORITE SERIJSKI MONITOR nakon što završite s učitavanjem i nekoliko puta PRITISNITE ZADATAK na našoj Adafruit nadzornoj ploči. Sada bismo trebali vidjeti ovako nešto kako se pojavljuje 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 Adafruit podaci 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 samo 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

A 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 ("ne radim"); } 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: Kreirajte trenutno dugme

EXTRA: Kreirajte trenutno dugme
EXTRA: Kreirajte trenutno dugme

Vratimo se našoj kontrolnoj tabli. Sada želimo ponovo stvoriti novi blok.

  1. Kreirajte dugme Momentary
  2. Spojite ga na 'timer' feed
  3. Postavite vrijednost štampe na: 2
  4. UKLONITE vrijednost otpuštanja
  5. Dajte mu lijepu boju!

Prikladno je da se trenutno dugme već naziva 'Reset'!

Nakon što kreirate ovaj blok, isprobajte ga, dugme funkcionira ako primite:

primljeno <- 2

U vašem serijskom monitoru.

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

Korak 14: DODATNO: Dodajte funkciju poništavanja

Da bismo učinili da gumb za resetiranje učini bilo što, moramo dodati funkciju koja vraća sve LED diode u prvobitno stanje.

Dodajte sljedeći kod 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 ("ne radim"); } 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 tajmer pritiskom na gumb!

Preporučuje se: