Satura rādītājs:

Tālvadības taimeris ar NodeMCU: 14 soļi
Tālvadības taimeris ar NodeMCU: 14 soļi

Video: Tālvadības taimeris ar NodeMCU: 14 soļi

Video: Tālvadības taimeris ar NodeMCU: 14 soļi
Video: EUROLED.LV / Krāsu mūzikas lampa - projektors ar tālvadības pulti / disko bumba / 3W / ⌀ 8 cm / RGB 2024, Jūlijs
Anonim
Tālvadības taimeris ar NodeMCU
Tālvadības taimeris ar NodeMCU

Šeit mēs izveidosim taimeri, izmantojot NodeMCU un Adafruit. Mēs parādīsim savu taimeri ar LED sloksni, un mēs varēsim to kontrolēt, izmantojot tālruni vai datoru!

Mūsu mērķis:

Izmantojot LED sloksni, izveidojiet taimeri, ko mēs varam: sākt, apturēt un atiestatīt, izmantojot tālruni vai datoru.

Piegādes

Aparatūra:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel LED sloksne

Bibliotēkas:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Cits:

Pienācīgs WiFi savienojums

1. darbība: izveidosim plūsmu Adafruit

Izveidosim plūsmu Adafruit!
Izveidosim plūsmu Adafruit!

Tagad, kad esam ieguvuši visu nepieciešamo, esam gatavi sākt būvniecību! Pirmkārt, mums ir jāizveido barība Adafruit. Adafruit ir pakalpojums, kas mums patiešām atvieglo Arduino savienošanu ar internetu un noderīgas tālvadības funkcijas. Ja vēl neesat to izdarījis, reģistrējieties Adafruit.

Tagad izveidosim jaunu plūsmu

Mēs varam nosaukt savu plūsmu par visu, ko vēlamies, es to saucu par “taimeri”.

Plūsma ieraksta visu, ko mēs darām, savā informācijas panelī (ko mēs izveidosim tikai minūtes laikā) un nosūta šos datus mūsu padomei, bet tas ir kaut kas, ko mēs izskatīsim, tiklīdz mums būs jānosūta dati.

2. darbība. Tagad izveidosim informācijas paneli

Tagad izveidosim informācijas paneli
Tagad izveidosim informācijas paneli
Tagad izveidosim informācijas paneli
Tagad izveidosim informācijas paneli
Tagad izveidosim informācijas paneli
Tagad izveidosim informācijas paneli

Tagad, tāpat kā mēs izveidojām plūsmu, mēs izveidosim jaunu informācijas paneli. Es saukšu savu informācijas paneli par “taimera saskarni”, jo tas būtībā būs mūsu informācijas panelis: saskarne ar pogām, lai kontrolētu mūsu taimeri.

3. darbība: iegūstiet mūsu atslēgu

Iegūstiet mūsu atslēgu
Iegūstiet mūsu atslēgu

Ja mēs vēlamies savienot savu Arduino ar mūsu plūsmu, mums ir jāiegūst mūsu Adafruit atslēga, tā ir jūsu slepenā parole, kas nodrošinās, ka tikai jūs varat izveidot savienojumu ar savām plūsmām.

Jūs varat saņemt savu atslēgu, noklikšķinot uz dzeltenās pogas AIO Key ekrāna augšējā labajā stūrī Adafruit.

Saglabājiet šo atslēgu kaut kur, mums to vajadzēs vēlāk.

Nedalieties ar savu atslēgu! Pretējā gadījumā cilvēki ar sliktiem nodomiem varētu izveidot savienojumu ar jūsu plūsmām un ierīcēm.

4. darbība. Atveriet plūsmas lasīšanas piemēru

Atveriet plūsmas lasīšanas piemēru
Atveriet plūsmas lasīšanas piemēru

Tagad atvērsim savu Arduino IDE un sāksim kodēšanas procesu. Pirmkārt, mums ir jāinstalē Adafruit IO Arduino bibliotēka.

Vai nezināt, kā instalēt bibliotēkas? šis ir lielisks Adafruit ceļvedis: Arduino bibliotēkas

Adafruit piedāvā daudz iepriekš sagatavotu piemēru, kurus mēs varam izmantot un no kuriem mācīties. Viens no šiem piemēriem ir: adafruitio_21_feed_read. Šo piemēru varat atrast šeit: Fails - Piemēri Adafruit IO Arduino adafruitio_21_feed_read

(atvainojiet manu holandiešu saskarni attēlā)

5. darbība: izveidosim savienojumu

Ja esat veiksmīgi atvēris skici adafruitio_21_feed_read, jūsu skicē vajadzētu redzēt 2 cilnes: adafruitio_21_feed_read un config.h. Šī skice tika izveidota, lai mēs varētu izveidot savienojumu ar plūsmu, ko izveidojām 1. darbībā.

Lai izveidotu savienojumu ar šo plūsmu, mums jāaizpilda daži dati par mūsu WiFi un Adafruit kontu,

Dosimies uz config.h, šeit mēs aizpildīsim šādu informāciju:

Jūsu Adafruit lietotājvārds:

#define IO_USERNAME "joopert"

Jūsu Adafruit atslēga:

#define IO_KEY "1234567890abcdefghijklmnop"

Jūsu WiFi nosaukums:

#define WIFI_SSID "MyWifi"

Un jūsu WiFi parole:

#define WIFI_PASS "aVerySecretPassword"

Tagad atgriezīsimies cilnē adafruitio_21_feed_read un aizpildiet:

Jūsu Adafruit lietotājvārds… vēlreiz:

#define FEED_OWNER "joopert"

Visbeidzot, jūsu plūsmas nosaukums (no plūsmas, ko izveidojām 1. darbībā):

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

6. darbība. Pārbaudiet savienojumu ar Adafruit IO

Pārbaudiet savienojumu ar Adafruit IO
Pārbaudiet savienojumu ar Adafruit IO

Lai pārbaudītu, vai iepriekš veiktās darbības ir izpildītas pareizi, mēs augšupielādēsim savu skici NodeMCU. Ja atverat seriālo monitoru, tam vajadzētu izskatīties līdzīgi kā attēlā iepriekš. Vispirms sērijas monitors parāda, ka tas mēģina izveidot savienojumu ar jūsu WiFi un Adafruit. ja tas ir pabeigts, vajadzētu teikt:

Pievienots Adafruit IO

Šī ir lieliska ziņa! Tagad mēs varam sākt pievienot funkcionalitāti savam taimerim …

7. solis: ļauj LED

Ļauj LED
Ļauj LED
Ļauj LED
Ļauj LED

Tagad ir pienācis laiks ieslēgt mūsu LED sloksni!

Pievienojiet savu LED sloksni D5 PIN (ja nevarat atrast D5, pievienojiet to citam PIN un nomainiet kodā esošo LED_PIN).

Definējiet LED sloksni

Šis kods pievienos NeoPixel bibliotēku (uzziniet vairāk par šo bibliotēku šeit: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) un pārliecinieties, vai mūsu Arduino zina, kur atrodas mūsu LED sloksne un cik tam ir gaismas. Ja jūsu LED sloksnei ir atšķirīgas specifikācijas, nomainiet to kodā.

Virs tukšuma iestatīšanas () pievienojiet šādu kodu:

// iestatīt NeoPixel savienojumu #include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Kur ir savienota LED sloksne?

#define LED_COUNT 30 // Cik pikseļu tam ir?

#define BRIGHTNESS 50 // NeoPixel spilgtums, 0 (min) līdz 255 (maks.)

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

Palaidiet LED sloksni

Tagad mēs sāksim savu LED sloksni un iestatīsim spilgtumu (spilgtums mainās no 0 min līdz 255 maks., Bet es iesaku 50… 255 ir PATIESI gaišs).

Pievienojiet šādu kodu tukšajā iestatījumā ():

strip.begin (); // UZSĀKT NeoPixel sloksnes objektu (OBLIGĀTS) strip.show (); // Izslēgt visus pikseļus ASAP strip.setBrightness (50); // Iestatiet BRIGHTNESS uz aptuveni 1/5 (maks. = 255)

ledsOn (); // Aicina funkciju ieslēgt katru LED pa vienam

Ieslēdziet gaismas

Varbūt jūs jau esat pamanījuši, ka mēs izsaucam funkciju, kas vēl neeksistē, tā būs mūsu nākamā kodēšanas daļa. Ja mēs vēlamies ieslēgt gaismas, mums ir jāizveido cilpa, kas ieslēdz katru LED atsevišķi (nezināt, kas ir cilpa? Pārbaudiet to šeit: www.arduino.cc/reference/ lv/valoda/struktūra/kontroles struktūra/par/).

Tagad mēs izveidosim funkciju: ledsOn ();

Zemāk pievienojiet šādu kodu void handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Katram joslas pikselim… strip.setPixelColor (i, 0, 0, 255); // Iestatiet pikseļa krāsu uz zilu sloksni.show (); // Atjaunināt joslu atbilstoši}}

Augšupielādēt

Tagad ir jautrā daļa, augšupielādēsim savu kodu NodeMCU … Ja viss darbojas pareizi, jūsu LED sloksnei tagad vajadzētu kļūt pilnīgi zilai!

Vai neparādās pikseļi ?: vai esat pievienojis sloksni pareizajam PIN? Vai arī jūsu interneta savienojums ir zaudēts.

Vai tikai daži pikseļi netiek rādīti ?: pārbaudiet, vai esat iestatījis pareizo pikseļu daudzumu!

8. solis: pievienojiet taimerim laiku

Tagad mēs pārliecināsimies, ka mūsu taimeris patiesībā … nu … reizes, kaut kas.

Ir dažādi veidi, kā noteikt laiku ar Arduino, viens ir kavēšanās (), tas pārtrauc mūsu dēļa apstrādi uz noteiktu laiku. Mēs to neizmantosim, jo kavēšanās laikā mūsu Arduino pamatā sasalst, un mēs vēlamies, lai mūsu dēlis tiktu regulāri atjaunināts. Tātad mēs izmantosim Millis (), tas ir elegantāks laika noteikšanas veids Arduino, ar Millis () mēs joprojām varam palaist kodu starp intervāliem.

Ja jūs interesē, kā tas darbojas, varat apskatīt šo rakstu:

Pievienosim Millis kodu ():

Ievietojiet šo kodu virs spēkā neesošās iestatīšanas ()

neparakstīts ilgi iepriekšMillis = 0; // saglabās pēdējo reizi, kad LED sloksne tika atjaunināta intervālā = 1000; // mūsu taimera intervāls (milisekundes)

Un ievietosim šo kodu tukšajā cilpā ():

neparakstīta garā strāvaMillis = millis ();// start TIMER RYTHM ******************************************** ********* if (currentMillis - previousMillis> = intervāls) {previousMillis = currentMillis;

// beigas TIMER RYTHM ******************************************** ***********

Mēs tikko izveidojām ritmu mūsu LED sloksnei, lai izslēgtu gaismas diodes, nākamajā solī mēs pievienosim kodu, lai to izdarītu.

9. solis: atpakaļskaitīšana

Šajā solī: mēs izveidosim funkciju, kas nodrošinās, ka katru sekundi (vai jebkuru iestatīto intervālu) mēs izslēdzam VIENU gaismas diodi sloksnes beigās, līdz visas mūsu gaismas diodes ir izslēgtas.

Augšpusē izveidosim “int” ar nosaukumu “LED”. Tas vēlāk mūsu taimerim pateiks, cik gaismas diodes tam vēl ir jāizslēdz.

Virs tukšuma iestatīšanas () pievienojiet šādu kodu:

int LED = LED_COUNT-1; // norāda, cik pikseļu vajadzētu apgaismot

Tagad pievienosim funkciju 'taimeris ();', tas izslēgs gaismu katru sekundi

Pievienojiet šādu kodu zem tukšajām gaismas diodēm ():

void timer () {strip.setPixelColor (gaismas diodes, 0, 0, 0);

ja (gaismas diodes> -1) {leds--; } cits {blinkie (); }}

Mēs vēlamies lietotājam sniegt dažas atsauksmes, ka taimeris tiek darīts pēc visu gaismas izdegšanas. Ar 'blinkie ();' pēc taimera pabeigšanas gaismas diodes mirgos sarkanā krāsā!

Virs tukšuma iestatīšanas () pievienojiet šādu kodu:

int blinkStatus = 1; // stāsta blinkie (); lai gaisma būtu ieslēgta vai izslēgta

Zem tukšuma taimera () pievienojiet šādu kodu:

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

blinkStatus = 0; sloksne.skaidrs (); } cits {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Katram joslas pikselim… strip.setPixelColor (i, 255, 0, 0); // Iestatiet pikseļu krāsu (RAM) joslu.show (); // Atjaunināt joslu, lai atbilstu}}}}

Visbeidzot, mums ir jāizsauc funkcija mūsu tukšajā ciklā ();, Vai atceraties taimeri, kas tika pievienots 8. darbībā? Šajā if paziņojumā mēs izsauksim funkciju taimeris ();.

TIMER RYTHM tagad vajadzētu izskatīties šādi:

// start TIMER RYTHM ******************************************** *********

if (currentMillis - previousMillis> = intervāls) {previousMillis = currentMillis; taimeris (); strip.show ();} // beigas TIMER RYTHM ************************************* ******************

Tagad augšupielādējiet šo kodu!

Pašlaik jūsu LED sloksnei vajadzētu izslēgt 1 LED katru sekundi un mirgot sarkanā krāsā, kad tā ir pabeigta …

Tagad padarīsim šo mātes mīļāko ar tālvadības pulti!

10. darbība. Padariet to tālvadības pulti: I daļa

Padariet to tālvadības pulti: I daļa
Padariet to tālvadības pulti: I daļa
Padariet to tālvadības pulti: I daļa
Padariet to tālvadības pulti: I daļa

Mums ir savs taimeris, tas viss ir kārtībā un smieklīgi, bet es jums apsolīju, ka jūs varēsit to kontrolēt ar savu tālruni? Sāksim mūsu projekta beigu posmu: padarīt taimeri tālvadāmu.

Vai joprojām atvērta cilne Adafruit? Dodamies atpakaļ uz io.adafruit.com un dodamies uz mūsu taimera saskarnes informācijas paneli un izveidojam jaunu bloku: TOGGLE

  1. Pievienojiet slēdzi TIMER padevei
  2. Iestatiet ON vērtību: 1
  3. Iestatiet OFF vērtību uz: 0

Iemesls tam ir tas, ka Adafruit nesūta teksta datus uz mūsu NodeMCU, bet tikai numurus.

Ja vēlaties, varat arī piešķirt Toggle nosaukumu, piemēram: “Ieslēgšanas/izslēgšanas slēdzis”

Tagad atgriezīsimies Arduino IDE

Lai pārliecinātos, ka mūsu kods ir atjaunināts, vēlreiz augšupielādēsim savu kodu.

ATVĒRT SERIĀLO MONITORU, kad tas ir augšupielādēts, un dažas reizes Nospiediet PĀRSLĒGU mūsu Adafruit informācijas panelī. Tagad mūsu sērijas monitorā vajadzētu redzēt kaut ko līdzīgu:

saņemts <- 0 saņemts <- 1 saņemts <- 0 saņemts <- 1 saņemts <- 0

Tas nozīmē, ka mēs faktiski varam nosūtīt vadīklas uz mūsu NodeMCU!

Ja nesaņemat šos ziņojumus, pārbaudiet, vai jūsu konfigurācijas h dati joprojām ir pareizi.

11. darbība. Padariet to tālvadības pulti: II daļa

Tagad atliek tikai kaut ko darīt ar mūsu saņemtajām vadības ierīcēm.

Lai to izdarītu, mums ir jāmaina mūsu TIMER RYTHM if paziņojums tukšuma cilpā (); nedaudz.

Mēs paziņosim savam NodeMCU, ka tai vajadzētu iedarbināt taimeri tikai tad, kad esam saņēmuši “1” (tas nozīmē: IESLĒGTS) no Adafruit.

Vispirms apkoposim datus, ko mums sūta Adafruit

Virs tukšuma iestatīšanas () pievienojiet šādu kodu:

int adaData; // apkopo datus, ko AdaFruit mums nosūta

Tagad faktiski apkoposim šos datus

Pievienojiet šādu kodu INSIDE void handleMessage ():

adaData = dati-> toInt ();

Mainīsim savu tukšuma cilpu ();

TIMER RYTHM tagad vajadzētu izskatīties šādi:

// start TIMER RYTHM ******************************************** ********* if (currentMillis - previousMillis> = intervāls) {previousMillis = currentMillis; ja (adaData == 0) {Serial.println ("im nedarbojas"); } cits if (adaData == 1) {timer (); } strip.show (); } // beigas TIMER RYTHM ******************************************* ************

Augšupielādēt savu kodu…

Tagad jums vajadzētu būt iespējai ieslēgt un izslēgt taimeri, izmantojot Adafruit slēdzi!

12. solis: spēlējiet apkārt! Mēs esam pabeiguši … vai esam?

Šobrīd jums vajadzētu būt pilnībā funkcionējošam tālvadības taimerim! Ja tas jums ir piemērots, tad paldies, ka piedalāties šajā projektā!

Ja vēlaties turpināt mazliet ilgāk, nākamajos soļos mēs savam taimerim pievienosim pogu RESET!

13. darbība: PAPILDUS: Izveidojiet īslaicīgu pogu

PAPILDUS: Izveidojiet īslaicīgu pogu
PAPILDUS: Izveidojiet īslaicīgu pogu

Atgriezīsimies pie mūsu informācijas paneļa. Tagad mēs vēlamies vēlreiz izveidot jaunu bloku.

  1. Izveidojiet īslaicīgu pogu
  2. Pievienojiet to “taimera” plūsmai
  3. Iestatiet preses vērtību uz: 2
  4. NOŅEMT atbrīvošanas vērtību
  5. Piešķir tai jauku krāsu!

Ērti mirkļa pogu jau sauc par 'Atiestatīt'!

Kad esat izveidojis šo bloku, pārbaudiet to, poga darbojas, ja saņemat:

saņēma <- 2

Sērijas monitorā.

Ja neredzat šo ziņojumu, mēģiniet atkārtoti augšupielādēt skici

14. darbība: PAPILDUS: pievienojiet atiestatīšanas funkciju

Lai atiestatīšanas poga darītu visu, mums jāpievieno funkcija, kas atgriež visas gaismas diodes sākotnējā stāvoklī.

Zem void blinkie () pievienojiet šādu kodu:

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

Tagad atliek tikai izsaukt mūsu funkciju, tāpēc mums pēdējo reizi ir jāmaina TIMER RYTHM

TIMER RYTHM tagad vajadzētu izskatīties šādi:

// start TIMER RYTHM ******************************************** ********* if (currentMillis - previousMillis> = intervāls) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("im not running"); } cits if (adaData == 1) {timer (); } cits if (adaData == 2) {atkārtots (); } strip.show (); } // beigas TIMER RYTHM ******************************************* ************

Augšupielādēt savu kodu…

Tagad arī jums vajadzētu būt iespējai atiestatīt taimeri, nospiežot pogu!

Ieteicams: