Kazalo:

Daljinsko vodeni časovnik z NodeMCU: 14 korakov
Daljinsko vodeni časovnik z NodeMCU: 14 korakov

Video: Daljinsko vodeni časovnik z NodeMCU: 14 korakov

Video: Daljinsko vodeni časovnik z NodeMCU: 14 korakov
Video: ENDER 3 PRO'YU CEP TELEFONU İLE UZAKTAN KONTROL ETMEK|SHELLY 1 WIFI RELAY SWITCH 2024, November
Anonim
Časovnik na daljavo z NodeMCU
Časovnik na daljavo z NodeMCU

Tukaj bomo ustvarili časovnik z uporabo NodeMCU in Adafruit. Časovnik bomo prikazali z LED trakom in ga bomo lahko upravljali s telefonom ali računalnikom!

Naš cilj:

Ustvarite časovnik z LED trakom, ki ga lahko: zaženemo, ustavimo in ponastavimo s telefonom ali računalnikom.

Zaloge

Strojna oprema:

  • NodeMCU ESP 8266
  • Adapruit NeoPixel LED trak

Knjižnice:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Drugo:

Dostojna povezava WiFi

1. korak: Ustvarimo vir v Adafruit

Ustvarimo vir v Adafruit!
Ustvarimo vir v Adafruit!

Zdaj, ko imamo vse, kar potrebujemo, smo pripravljeni na gradnjo! Najprej moramo ustvariti vir v Adafruit -u. Adafruit je storitev, ki nam zelo olajša povezavo našega Arduina z internetom in izdelavo uporabnih funkcij za daljinsko upravljanje. Če še niste, se prijavite za Adafruit.

Zdaj pa ustvarimo nov vir

Naš vir lahko imenujemo kar hočemo, temu pravim "timer".

Vir naredi tako, da vse, kar počnemo, zapišemo na nadzorno ploščo (ki jo bomo ustvarili v samo minuti) in te podatke pošlje na našo tablo, vendar bomo to takoj pogledali, ko bomo poslali podatke.

2. korak: Zdaj naredimo nadzorno ploščo.

Zdaj pa naredimo nadzorno ploščo.
Zdaj pa naredimo nadzorno ploščo.
Zdaj pa naredimo nadzorno ploščo.
Zdaj pa naredimo nadzorno ploščo.
Zdaj pa naredimo nadzorno ploščo.
Zdaj pa naredimo nadzorno ploščo.

Zdaj bomo na enak način, kot smo naredili vir, ustvarili novo nadzorno ploščo. Svojo nadzorno ploščo bom poklical: 'timer interface', ker bo to v bistvu naša armaturna plošča: vmesnik z gumbi za nadzor časovnika.

3. korak: Pridobite naš ključ

Pridobite naš ključ
Pridobite naš ključ

Če želimo svoj Arduino povezati z našim virom, moramo dobiti ključ Adafruit, to je vaše skrivno geslo, ki bo zagotovilo, da se lahko samo vi povežete s svojimi viri.

Ključ lahko dobite s klikom na rumeni gumb AIO Key v zgornjem desnem kotu zaslona v Adafruit.

Shranite ta ključ nekje, potrebovali ga bomo kasneje.

Ne delite svojega ključa! V nasprotnem primeru bi se lahko ljudje z slabimi nameni povezali z vašimi viri in napravami.

4. korak: Odprite primer branja vira

Odprite Primer branja vira
Odprite Primer branja vira

Zdaj pa odprimo naš Arduino IDE in začnimo postopek kodiranja. Najprej moramo imeti nameščeno knjižnico Adafruit IO Arduino.

Ne veste, kako namestiti knjižnice? to je odličen vodič Adafruit: Arduino Libraries

Adafruit ponuja veliko vnaprej izdelanih primerov, ki jih lahko uporabimo in se iz njih učimo. Eden od teh primerov je: adafruitio_21_feed_read. Ta primer najdete tukaj: Datoteka - Primeri Adafruit IO Arduino adafruitio_21_feed_read

(oprostite moj nizozemski vmesnik na sliki)

5. korak: Vzpostavimo svojo povezavo

Če ste uspešno odprli skico adafruitio_21_feed_read, bi morali na skici videti 2 zavihka: adafruitio_21_feed_read in config.h. Ta skica je bila narejena tako, da se lahko povežemo z virom, ki smo ga naredili v prvem koraku.

Če se želimo povezati s tem virom, moramo vnesti nekaj podrobnosti o naši WiFi in našem računu Adafruit,

Pojdimo na config.h, tukaj bomo izpolnili naslednje podatke:

Vaše uporabniško ime Adafruit:

#define IO_USERNAME "joopert"

Vaš ključ Adafruit:

#define IO_KEY "1234567890abcdefghijklmnop"

Ime vašega WiFi -ja:

#define WIFI_SSID "MyWifi"

In vaše geslo za WiFi:

#define WIFI_PASS "aVerySecretPassword"

Zdaj pa se vrnimo na zavihek adafruitio_21_feed_read in izpolnimo:

Vaše uporabniško ime Adafruit… spet:

#define FEED_OWNER "joopert"

In končno vaše ime vira (iz vira, ki smo ga naredili v 1. koraku):

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

6. korak: Preverite povezavo z Adafruit IO

Preverite povezavo z Adafruit IO
Preverite povezavo z Adafruit IO

Če želimo preveriti, ali so bili koraki, ki smo jih naredili prej, pravilno izvedeni, bomo svojo skico naložili v NodeMCU. Če odprete serijski monitor, bi moral biti videti kot zgornja slika. Najprej vam serijski monitor pokaže, da se poskuša povezati z vašo WiFi in Adafruit. če je to popolno, naj pove:

Adafruit IO povezan

To je odlična novica! Zdaj lahko začnemo dodajati funkcionalnost našemu časovniku …

7. korak: pusti LED

Omogoča LED
Omogoča LED
Omogoča LED
Omogoča LED

Zdaj je čas, da vklopite naš LED trak!

Priključite svoj LED trak na PIN D5 (če ne najdete D5, ga povežite z drugo PIN in spremenite LED_PIN v kodi).

Določite LED trak

Naslednja koda bo dodala knjižnico NeoPixel (več o tej knjižnici preberite tukaj: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) in se prepričajte, da naš Arduino ve, kje je naš LED trak in koliko luči ima. Če ima vaš LED trak drugačne specifikacije, ga spremenite v kodi.

Dodajte naslednjo kodo NAD nastavitvijo void ():

// nastavite povezavo NeoPixel #include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Kam je priključen LED trak?

#define LED_COUNT 30 // Koliko slikovnih pik ima?

#define BRIGHTNESS 50 // Svetlost NeoPixel, 0 (min) do 255 (max)

Trak Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Zaženite LED trak

Zdaj bomo zagnali LED trak in nastavili svetlost (svetlost se giblje od 0 min do 255 max, vendar priporočam, da je 50… 255 res svetlo).

V nastavitev void () dodajte naslednjo kodo:

strip.begin (); // INICIALIZE NeoPixel strip object (REQUIRED) strip.show (); // IZKLOPI vse slikovne pike ASAP strip.setBrightness (50); // BRIGHTNESS nastavite na približno 1/5 (max = 255)

ledsOn (); // Pokliče funkcijo, da vklopi vsako LED eno za drugo

Prižgite luči

Morda ste že opazili, da kličemo funkcijo, ki še ne obstaja, to bo naš naslednji del kodiranja. Če želimo prižgati luči, moramo ustvariti zanko „for“, ki vklopi vsako posamezno LED eno za drugo (ne veste, kaj je zanka for? Preverite tukaj: www.arduino.cc/reference/ sl/jezik/struktura/nadzorna struktura/za/).

Zdaj bomo ustvarili funkcijo: ledsOn ();

Dodajte naslednjo kodo spodaj void handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Za vsako slikovno piko v traku… strip.setPixelColor (i, 0, 0, 255); // Barvo slikovne pike nastavimo na modri strip.show (); // Posodobi trak tako, da se ujema}}

Naloži

Zdaj je zabaven del, naložimo našo kodo v NodeMCU … Če vse deluje pravilno, bi moral biti vaš LED trak popolnoma modr!

Ali se ne prikažejo piksli?: Ste trak povezali s pravo kodo PIN? Ali pa je morda prekinjena internetna povezava.

Ali se le nekatere slikovne pike ne prikažejo ?: preverite, ali ste nastavili pravo količino slikovnih pik!

8. korak: Časovniku dodajte časovnik

Zdaj se bomo prepričali, da je naš timer dejansko … no … krat, nekaj.

Časovni razpored z Arduinom je na različne načine, eden je delay (), to ustavi obdelavo naše plošče za določeno časovno obdobje. Tega ne bomo uporabljali, saj naš Arduino v bistvu zamrzne med zamudo in želimo, da se naša plošča redno posodablja. Zato bomo uporabljali Millis (), to je bolj eleganten način merjenja časa v Arduinu, z Millis () pa lahko še vedno izvajamo kodo med intervali.

Če vas zanima, kako to deluje, si oglejte ta članek:

Dodajmo kodo za Millis ():

To kodo postavite nad nastavitev void ()

brez podpisa dolga previousMillis = 0; // shrani zadnjič, ko je bil LED trak posodobljenint interval = 1000; // interval našega časovnika (milisekunde)

In postavimo to kodo v void loop ():

nepodpisani dolgi tokMillis = millis ();// zaženite TIMER RYTHM ******************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// konec TIMER RITME ******************************************* ***********

Pravkar smo ustvarili ritem za naš LED trak za izklop LED, v naslednjem koraku bomo dodali kodo za to.

9. korak: Odštevanje

V tem koraku: naredili bomo funkcijo, ki bo zagotovila, da vsako sekundo (ali kateri koli interval, ki ste ga nastavili) izklopite ENO LED na koncu traku, dokler ne ugasnejo vse naše LED.

Na vrhu bomo ustvarili 'int', imenovano 'LED'. To bo kasneje našemu časovniku povedalo, koliko LED diod mora še izklopiti.

Dodajte naslednjo kodo NAD nastavitvijo void ():

int LED = LED_COUNT-1; // pove, koliko pik naj bo osvetljeno

Zdaj dodajmo funkcijo 'timer ();', ki bo vsako sekundo ugasnila luč

Spodaj dodajte naslednjo kodo void ledsOn ():

void timer () {strip.setPixelColor (svetleče diode, 0, 0, 0);

če (LED> -1) {LED-; } else {blinkie (); }}

Uporabniku želimo dati nekaj povratnih informacij, da je merilnik časa opravljen, potem ko so izgorele vse luči. Z 'blinkie ();' LED diode bodo po opravljenem merilniku časa utripale rdeče!

Dodajte naslednjo kodo NAD nastavitvijo void ():

int blinkStatus = 1; // pove blinkie (); funkcijo, ne glede na to, ali naj lučka sveti ali ugasne

Spodaj dodajte naslednjo kodo void timer ():

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

blinkStatus = 0; strip.clear (); } else {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Za vsako slikovno piko v traku… strip.setPixelColor (i, 255, 0, 0); // Nastavimo barvno slikovno piko (v RAM -u) strip.show (); // Posodobi trak tako, da se ujema}}}}

Končno moramo poklicati funkcijo v naši void loop ();, Se spomnite TIMER RITME, ki smo jo dodali v 8. koraku? V tem stavku if bomo poklicali funkcijo timer ();.

TIMER RYTHM bi moral izgledati tako:

// zaženite TIMER RYTHM ******************************************* *********

if (currentMillis - previousMillis> = interval) {previousMillis = trenutniMillis; časovnik (); strip.show ();} // konec TIMER RITME ************************************** ******************

Zdaj naložite to kodo!

Trenutno bi moral vaš LED trak vsako sekundo izklopiti 1 LED in utripati rdeče, ko končate …

Zdaj pa naredimo to materino ljubezen na daljinsko upravljanje!

10. korak: Naredite ga na daljavo: I. del

Naj bo daljinsko vodeno: I. del
Naj bo daljinsko vodeno: I. del
Naj bo daljinsko vodeno: I. del
Naj bo daljinsko vodeno: I. del

Imamo časovnik, vse je v redu in lepo, vendar sem vam obljubil, da ga boste lahko upravljali s telefonom, kajne? Vstopimo v zadnjo fazo našega projekta: nastavitev časovnika na daljinsko upravljanje.

Ali imate še vedno odprt zavihek Adafruit? Pojdimo nazaj na io.adafruit.com in pojdimo na nadzorno ploščo vmesnika časovnika in ustvarimo nov blok: TOGGLE

  1. Preklopni gumb priključite na vir TIMER
  2. Vrednost VKLOP nastavite na: 1
  3. Vrednost OFF nastavite na: 0

Razlog za to je, da Adafruit ne pošilja besedilnih podatkov v naš NodeMCU, ampak samo številke.

Če želite, lahko preklopniku daste tudi ime: "Vklop/izklop stikalo"

Zdaj pa se vrnimo k Arduino IDE

Samo zato, da se prepričamo, da je naša koda posodobljena, še enkrat naložimo našo kodo.

ODPRITE SERIJSKI MONITOR, ko nalaganje končate, in nekajkrat pritisnite TOGGLE na naši nadzorni plošči Adafruit. Na našem serijskem monitorju bi morali videti nekaj takega:

prejeto <- 0prejeto <- 1 prejeto <- 0 prejeto <- 1 prejeto <- 0

To pomeni, da lahko dejansko pošljemo kontrole v naš NodeMCU!

Če teh sporočil ne prejemate, preverite, ali so vaši podatki Adafruit v nastavitvah config.h še vedno pravilni.

Korak 11: Naredite ga daljinsko vodenega: Drugi del

Zdaj nam preostane le še nekaj narediti s prejetimi kontrolami.

Če želite to narediti, moramo spremeniti naš TIMER RYTHM if stavek v void loop (); malo.

Našemu NodeMCU -ju bomo povedali, da se mora časovnik zagnati šele, ko od Adafruit -a prejmemo "1" (kar pomeni: ON).

Najprej zberemo podatke, ki nam jih pošlje Adafruit

Dodajte naslednjo kodo NAD nastavitvijo void ():

int adaData; // zbira podatke, ki nam jih pošlje AdaFruit

Zdaj pa dejansko zberemo te podatke

Dodajte naslednjo kodo V ZNANJE void handleMessage ():

adaData = podatki-> toInt ();

Zamenjajmo našo void zanko ();

TIMER RYTHM bi moral izgledati tako:

// zaženi TIMER RYTHM ******************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("ne tečem"); } else if (adaData == 1) {timer (); } strip.show (); } // konec TIMER RITME ****************************************** ************

NALOŽI svojo kodo …

Zdaj bi morali vklopiti in izklopiti časovnik s stikalom v Adafruit!

12. korak: Igrajte se! Končali smo … ali smo?

Zdaj bi morali imeti popolnoma delujoč daljinski časovnik! Če je to za vas, se vam zahvaljujemo, da ste sodelovali pri tem projektu!

Če želite nadaljevati dlje, bomo v naslednjih nekaj korakih dodali gumb RESET za naš časomer!

13. korak: DODATNO: Ustvari trenutni gumb

EXTRA: Ustvari trenutni gumb
EXTRA: Ustvari trenutni gumb

Vrnimo se na našo nadzorno ploščo. Zdaj želimo ponovno ustvariti nov blok.

  1. Ustvari gumb za trenutek
  2. Povežite ga z virom 'timer'
  3. Vrednost stiskalnice nastavite na: 2
  4. ODSTRANITE vrednost sprostitve
  5. Daj lepo barvo!

Priročno se trenutni gumb že imenuje 'Ponastavi'!

Ko ustvarite ta blok, ga preizkusite, gumb deluje, če prejmete:

prejeto <- 2

Na vašem serijskem monitorju.

Če tega sporočila ne vidite, poskusite znova naložiti skico

14. korak: DODATNO: Dodajte funkcijo ponastavitve

Če želite, da gumb za ponastavitev naredi karkoli, moramo dodati funkcijo, ki ponastavi vse LED diode nazaj v prvotno stanje.

Spodaj dodajte naslednjo kodo void blinkie ():

prazno ponavljanje () {leds = LED_COUNT; ledsOn (); }

Zdaj ostane le še klicanje naše funkcije, zato moramo še zadnjič spremeniti TIMER RITM

TIMER RYTHM bi moral izgledati tako:

// zaženite TIMER RYTHM ******************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("ne teče"); } else if (adaData == 1) {timer (); } else if (adaData == 2) {rerun (); } strip.show (); } // konec TIMER RITME ****************************************** ************

NALOŽI svojo kodo …

Zdaj bi morali časovnik ponastaviti tudi s pritiskom na gumb!

Priporočena: