Përmbajtje:

Kohëmatësi me telekomandë me NodeMCU: 14 hapa
Kohëmatësi me telekomandë me NodeMCU: 14 hapa

Video: Kohëmatësi me telekomandë me NodeMCU: 14 hapa

Video: Kohëmatësi me telekomandë me NodeMCU: 14 hapa
Video: Как сделать 4-канальное реле Wi-Fi ESP8266 ESP01 | ESP01 Домашняя автоматизация | УдаленныйXY 2024, Nëntor
Anonim
Kohëmatësi me telekomandë me NodeMCU
Kohëmatësi me telekomandë me NodeMCU

Këtu do të krijojmë një kohëmatës duke përdorur një NodeMCU dhe Adafruit. Ne do të shfaqim kohëmatësin tonë me një shirit LED dhe do të jemi në gjendje ta kontrollojmë atë duke përdorur telefonin ose kompjuterin tonë!

Qellimi jone:

Krijoni një kohëmatës duke përdorur një shirit LED që ne mund të: fillojmë, ndalojmë dhe rivendosim duke përdorur telefonin ose kompjuterin tonë.

Furnizimet

Hardware:

  • NodeMCU ESP 8266
  • Rrip LED Adafruit NeoPixel

Bibliotekat:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Te tjera:

Një lidhje e mirë WiFi

Hapi 1: Le të krijojmë një burim në Adafruit

Le të krijojmë një burim në Adafruit!
Le të krijojmë një burim në Adafruit!

Tani që kemi gjithçka që na nevojitet, jemi gati të fillojmë ndërtimin! Para së gjithash ne duhet të krijojmë një ushqim në Adafruit. Adafruit është një shërbim që e bën shumë të lehtë për ne që të lidhim Arduino -n tonë me internetin dhe të bëjmë veçori të dobishme të telekomanduara. Nëse nuk e keni bërë ende, regjistrohuni në Adafruit.

Tani le të krijojmë një burim të ri

Ne mund ta quajmë ushqimin tonë çdo gjë që duam, unë po e quaj 'kohëmatës'.

Ajo që bën një prurje është të regjistrojë gjithçka që bëjmë në pultin tonë (të cilin do ta krijojmë në vetëm një minutë) dhe i dërgon ato të dhëna në tabelën tonë, por kjo është diçka që do ta shikojmë sapo të kemi të dhëna për t'u dërguar.

Hapi 2: Tani Le të bëjmë një pult.

Tani Le të bëjmë një pult.
Tani Le të bëjmë një pult.
Tani Le të bëjmë një pult.
Tani Le të bëjmë një pult.
Tani Le të bëjmë një pult.
Tani Le të bëjmë një pult.

Tani në të njëjtën mënyrë që kemi bërë një burim, ne do të krijojmë një Pult të ri. Unë do ta quaj pultin tim: 'ndërfaqja e kohëmatësit' sepse në thelb kjo do të jetë pulti ynë: një ndërfaqe me butona për të kontrolluar kohëmatësin tonë.

Hapi 3: Merrni çelësin tonë

Merr Çelësin Tonë
Merr Çelësin Tonë

Nëse duam të lidhim Arduino -n tonë me burimin tonë, duhet të marrim çelësin tonë Adafruit, ky është fjalëkalimi juaj sekret që do të sigurohet që vetëm ju mund të lidheni me burimet tuaja.

Ju mund ta merrni çelësin tuaj duke klikuar butonin e verdhë AIO Key në këndin e sipërm të djathtë të ekranit tuaj në Adafruit.

Ruajeni këtë çelës diku, do të na duhet më vonë.

Mos e ndani çelësin tuaj! Përndryshe njerëzit me qëllime të këqija mund të lidhen me burimet dhe pajisjet tuaja.

Hapi 4: Hapni Shembullin e leximit të burimeve

Hapni Shembullin e leximit të burimeve
Hapni Shembullin e leximit të burimeve

Tani le të hapim Arduino IDE tonë dhe të fillojmë procesin e kodimit. Para së gjithash duhet të kemi të instaluar bibliotekën Adafruit IO Arduino.

Nuk dini si të instaloni biblioteka? ky është një udhëzues i shkëlqyeshëm nga Adafruit: Bibliotekat Arduino

Adafruit ofron shumë shembuj të paracaktuar që ne të përdorim dhe të mësojmë prej tyre. Një nga këta shembuj është: adafruitio_21_feed_read. Këtë shembull mund ta gjeni këtu: Skedar - Shembuj Adafruit IO Arduino adafruitio_21_feed_read

(falni ndërfaqen time holandeze në imazh)

Hapi 5: Le të vendosim lidhjen tonë

Nëse e keni hapur me sukses skicën adafruitio_21_feed_read ju duhet të shihni 2 skeda në skicën tuaj: adafruitio_21_feed_read dhe config.h. Kjo skicë është bërë në mënyrë që të lidhemi me ushqimin që kemi bërë në hapin 1.

Për t'u lidhur me këtë burim, duhet të plotësojmë disa detaje në lidhje me WiFi -n tonë dhe llogarinë tonë Adafruit,

Le të udhëtojmë në config.h, këtu do të plotësojmë detajet e mëposhtme:

Emri juaj i përdoruesit Adafruit:

#përcakto IO_USERNAME "joopert"

Çelësi juaj Adafruit:

#përcakto IO_KEY -in "1234567890abcdefghijklmnop"

Emri i WiFi tuaj:

#përcakto WIFI_SSID "MyWifi"

Dhe fjalëkalimi juaj WiFi:

#përcakto WIFI_PASS "aVerySecretPassword"

Tani le të kthehemi në skedën adafruitio_21_feed_read dhe të plotësojmë:

Emri juaj i përdoruesit Adafruit … përsëri:

#define FEED_OWNER "joopert"

Dhe së fundi emri juaj i burimit (nga burimi që kemi bërë në hapin 1):

AdafruitIO_Feed *sharedFeed = io.feed ("kohëmatësi", FEED_OWNER);

Hapi 6: Kontrolloni lidhjen me Adafruit IO

Kontrolloni lidhjen me Adafruit IO
Kontrolloni lidhjen me Adafruit IO

Për të kontrolluar nëse hapat që kemi ndërmarrë më parë janë ekzekutuar saktë, ne do të ngarkojmë skicën tonë në NodeMCU. Nëse hapni monitorin tuaj serik, ai duhet të duket diçka si fotografia e mësipërme. Së pari monitori serik po ju tregon se po përpiqet të lidhet me WiFi tuaj dhe me Adafruit. nëse është e plotë duhet të thotë:

Adafruit IO i lidhur

Ky është një lajm i madh! Tani mund të fillojmë të shtojmë funksionalitet në kohëmatësin tonë …

Hapi 7: Lejoni LED

Lejon LED
Lejon LED
Lejon LED
Lejon LED

Tani është koha për të ndezur shiritin tonë LED!

Lidhni shiritin tuaj LED me kodin P5 D5 (nëse nuk mund ta gjeni D5 lidheni atë me një PIN tjetër dhe ndryshoni LED_PIN në kod).

Përcaktoni shiritin LED

Kodi i mëposhtëm do të shtojë bibliotekën NeoPixel (mësoni më shumë për këtë bibliotekë këtu: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) dhe sigurohuni që Arduino-ja jonë e di se ku është shiriti ynë LED dhe sa drita ka. Nëse shiriti juaj LED ka specifikime të ndryshme, ndryshojeni atë në kod.

Shtoni kodin e mëposhtëm POR setup void ():

// konfiguroni lidhjen NeoPixel #përfshini #ifdef _AVR_ #përfshi #endif

#përcakto LED_PIN D5 // Ku lidhet shiriti LED?

#përcakto LED_COUNT 30 // Sa piksele ka?

#përkufizoni shkëlqimin 50 // Ndriçimi NeoPixel, 0 (min) deri në 255 (maksimum)

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

Nisni shiritin LED

Tani ne do të fillojmë rripin tonë LED dhe do të vendosim shkëlqimin (shkëlqimi shkon nga 0 min në 255 max, por unë rekomandoj që 50… 255 është vërtet i ndritshëm).

Shtoni kodin e mëposhtëm IN void setup ():

strip.filloj (); // INITIALIZOJNi objektin e shiritit NeoPixel (KQRKOHET) shirit.shfaq (); // Çaktivizo të gjitha pikselat ASAP strip.setBrightness (50); // Vendosni BRIGHTNESS në rreth 1/5 (max = 255)

ledsOn (); // Thërret funksionin për të ndezur secilën LED një nga një

Ndizni dritat

Ndoshta ju keni vënë re tashmë se ne po thërrasim një funksion që nuk ekziston akoma, që do të jetë pjesa jonë e ardhshme e kodimit. Nëse duam të ndezim dritat tona, duhet të krijojmë një 'për lak' që ndez çdo LED individualisht një nga një (nuk e di se çfarë është një lak për? Shikoni këtu: www.arduino.cc/reference/ en/gjuha/struktura/struktura e kontrollit/për/).

Tani do të krijojmë funksionin: ledsOn ();

Shtoni kodin e mëposhtëm Poshtë void handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Për çdo piksel në shirit… strip.setPixelColor (i, 0, 0, 255); // Vendos ngjyrën e pikselit në blu strip.show (); // Përditëso shiritin që të përputhet}}

Ngarkoni

Tani është pjesa argëtuese, le të ngarkojmë kodin tonë në NodeMCU … Nëse gjithçka funksionon si duhet, shiriti juaj LED tani duhet të bëhet plotësisht blu!

A nuk shfaqen pikselë ?: e keni lidhur shiritin me PIN -in e duhur? Ose ndoshta lidhja juaj e internetit është e humbur.

A nuk shfaqen vetëm disa piksele ?: kontrolloni nëse keni vendosur sasinë e duhur të pikselëve!

Hapi 8: Shtoni kohën në kohëmatësin

Tani do të sigurohemi që kohëmatësi ynë në të vërtetë … mirë … herë, diçka.

Ka mënyra të ndryshme për të bërë kohën me Arduino, njëra është vonesa (), kjo ndalon përpunimin e bordit tonë për një periudhë të caktuar kohe. Ne nuk do ta përdorim këtë pasi që Arduino ynë në thelb ngrin gjatë vonesës dhe ne duam që bordi ynë të përditësohet rregullisht. Pra, ne do të përdorim Millis (), kjo është një mënyrë më elegante për të bërë kohën në Arduino, me Millis () ne ende mund të ekzekutojmë kodin midis intervaleve.

Nëse jeni të interesuar se si funksionon kjo, mund ta shikoni këtë artikull:

Le të shtojmë kodin për Millis ():

Vendoseni këtë kod POR konfigurimin e zbrazëtisë ()

pa shenjë e mëparshmeMillis = 0; // do të ruajë herën e fundit kur shiriti LED u përditësua në interval = 1000; // intervali i kohëmatësit tonë (milisekonda)

Dhe le ta vendosim këtë kod në lakin void ():

rrymë e gjatë e panënshkruarMillis = millis ();// fillo TIMER RYTHM ***************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// fund TIMER RYTHM ***************************************** ***********

Ajo që sapo bëmë ishte krijimi i një ritmi për shiritin tonë LED për të fikur LED -et, në hapin tjetër ne do të shtojmë kodin për të bërë pikërisht atë.

Hapi 9: Numërimi mbrapsht

Në këtë hap: ne do të bëjmë një funksion që do të sigurohet që çdo sekondë (ose çfarëdo intervali që keni vendosur) të fikim NJ ONE LED në fund të shiritit derisa të gjitha LED -et tona të jenë fikur.

Ne do të krijojmë një 'int' në krye të quajtur 'leds'. Kjo më vonë do t'i tregojë kohëmatësit tonë se sa led duhet të fiken.

Shtoni kodin e mëposhtëm POR setup void ():

int leds = LED_COUNT-1; // tregon sa piksele duhet të ndizen

Tani le të shtojmë funksionin 'timer ();', kjo do të fikë një dritë çdo sekondë

Shtoni kodin e mëposhtëm Poshtë ledsOn të zbrazët ():

void timer () {strip.setPixelColor (leds, 0, 0, 0);

if (leds> -1) {leds--; } else {blinkie (); }}

Ne duam t'i japim disa reagime përdoruesit se kohëmatësi është bërë pasi të gjitha dritat janë djegur. Me 'blinkie ();' dritat LED do të pulsojnë të kuqe pasi të ketë përfunduar kohëmatësi!

Shtoni kodin e mëposhtëm POR setup void ():

int blinkStatus = 1; // tregon blinkie (); funksionon në rast se drita duhet të jetë e ndezur ose e fikur

Shtoni kodin e mëposhtëm Poshtë kohëmatësit të pavlefshëm ():

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

blinkStatus = 0; shirit.i qartë (); } else {blinkStatus = 1; për (int i = 0; i <strip.numPixels (); i ++) {// Për çdo piksel në shirit… strip.setPixelColor (i, 255, 0, 0); // Vendos ngjyrën e pikselit (në RAM) strip.show (); // Përditëso shiritin që të përputhet}}}}

Së fundi ne duhet të thërrasim funksionin në lakun tonë të zbrazët ();

E mbani mend TIMER RYTHM që shtuam në hapin 8? Në këtë deklaratë nëse do ta thërrasim funksionin timer ();.

TIMER RYTHM tani duhet të duket kështu:

// fillo TIMER RYTHM ***************************************** *********

if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; kohëmatës (); strip.show ();} // fund TIMER RYTHM *********************************** ******************

Tani ngarkoni këtë kod!

Tani për tani shiriti juaj LED duhet të fiket 1 LED çdo sekondë dhe të pulsojë me të kuqe kur të përfundojë…

Tani le ta bëjmë këtë dashuri amë me telekomandë!

Hapi 10: Bëjeni të telekomanduar: Pjesa I

Bëjeni të kontrolluar nga distanca: Pjesa I
Bëjeni të kontrolluar nga distanca: Pjesa I
Bëjeni të kontrolluar nga distanca: Pjesa I
Bëjeni të kontrolluar nga distanca: Pjesa I

Ne kemi kohëmatësin tonë, gjithçka është mirë dhe e shkëlqyeshme, por ju premtova se do të jeni në gjendje ta kontrolloni atë me telefonin tuaj, apo jo? Le të hyjmë në fazën përfundimtare të projektit tonë: bërja e kohëmatësit tonë me telekomandë.

Ende e keni hapur skedën tuaj Adafruit? Le të udhëtojmë për në io.adafruit.com dhe të shkojmë te pulti i ndërfaqes së kohëmatësit dhe të krijojmë një bllok të ri: TOGGLE

  1. Lidhni çelësin me burimin TIMER
  2. Vendosni vlerën ON në: 1
  3. Vendosni vlerën OFF në: 0

Arsyeja për këtë është se Adafruit nuk dërgon të dhëna teksti në NodeMCU -në tonë, por vetëm numra.

Ju gjithashtu mund t'i jepni Toggle një emër nëse ju pëlqen, ndoshta: 'Çelësi aktiv/fikur'

Tani le të kthehemi te Arduino IDE

Vetëm për t'u siguruar që kodi ynë është i përditësuar, le të NDPLRMARROJM code kodin tonë edhe një herë.

HAP MONITORIN SERIAL pasi të ketë përfunduar ngarkimi dhe shtypni TOGGLE në pultin tonë Adafruit disa herë. Tani duhet të shohim diçka të tillë që shfaqet në monitorin tonë serik:

mori <- 0mori <<1 mori <- 0 mori <- 1 mori <- 1 mori <- 0

Kjo do të thotë që ne në fakt mund të dërgojmë kontrolle në NodeMCU -në tonë!

Nëse nuk po i merrni këto mesazhe, kontrolloni nëse të dhënat tuaja Adafruit në konfigurimin tuaj janë ende të sakta.

Hapi 11: Bëjeni të telekomanduar: Pjesa II

Tani gjithçka që ka mbetur është të bëjmë diçka me kontrollet tona të marra.

Për ta bërë këtë ne duhet të ndryshojmë deklaratën tonë TIMER RYTHM if në lakun void (); pak.

Ne do t'i themi NodeMCU -së tonë që duhet të fillojë kohëmatësin vetëm pasi të kemi marrë '1' (që do të thotë: ON) nga Adafruit.

Së pari le të mbledhim të dhënat që na dërgon Adafruit

Shtoni kodin e mëposhtëm POR setup void ():

int adaData; // mbledh të dhënat që na dërgon AdaFruit

Tani le të mbledhim në fakt ato të dhëna

Shtoni kodin e mëposhtëm INSIDE void handleMessage ():

adaData = të dhëna-> toInt ();

Le të ndryshojmë lakin tonë të zbrazët ();

TIMER RYTHM tani duhet të duket kështu:

// fillo TIMER RYTHM ***************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("nuk po kandidoj"); } else if (adaData == 1) {kohëmatës (); } strip.shfaq (); } // fund TIMER RYTHM **************************************** ************

NGARA kodin tuaj…

Tani duhet të jeni në gjendje të ndizni dhe fikni kohëmatësin duke përdorur ndërprerësin në Adafruit!

Hapi 12: Luaj rreth! Kemi mbaruar… apo Jemi?

Tani për tani ju duhet të keni një kohëmatës plotësisht të funksionuar në distancë! Nëse kjo është për ju, atëherë faleminderit që keni ardhur së bashku me këtë projekt!

Nëse doni të vazhdoni pak më gjatë, në hapat e ardhshëm ne do të shtojmë një buton RESET për kohëmatësin tonë!

Hapi 13: EXTRA: Krijo butonin momental

EXTRA: Krijo butonin momental
EXTRA: Krijo butonin momental

Le të kthehemi në pultin tonë. Tani ne duam të krijojmë përsëri një bllok të ri.

  1. Krijoni një buton Momentary
  2. Lidheni atë me burimin 'kohëmatës'
  3. Vendosni vlerën e shtypit në: 2
  4. Hiqni vlerën e lëshimit
  5. Jepini një ngjyrë të bukur!

Në mënyrë të përshtatshme butoni i momentit quhet tashmë "Rivendos"!

Pasi ta keni krijuar këtë bllok, provojeni, butoni funksionon nëse merrni:

marrë <- 2

Në monitorin tuaj serik.

Nëse nuk e shihni këtë mesazh, provoni të ngarkoni përsëri skicën

Hapi 14: EXTRA: Shtoni funksionin e rivendosjes

Për ta bërë butonin e rivendosjes të bëjë gjithçka, duhet të shtojmë një funksion që rivendos të gjitha LED -të në gjendjen origjinale.

Shtoni kodin e mëposhtëm Poshtë void blinkie ():

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

Tani gjithçka që ka mbetur është thirrja e funksionit tonë, për këtë ne duhet të ndryshojmë TIMER RYTHM për herë të fundit

TIMER RYTHM tani duhet të duket kështu:

// fillo TIMER RYTHM ***************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("nuk po kandidoj"); } else if (adaData == 1) {kohëmatës (); } tjetër if (adaData == 2) {përsëritje (); } strip.shfaq (); } // fund TIMER RYTHM *************************************** ************

NGARA kodin tuaj…

Tani ju gjithashtu duhet të jeni në gjendje të rivendosni kohëmatësin duke shtypur butonin!

Recommended: