Obsah:

Diaľkovo ovládaný časovač s NodeMCU: 14 krokov
Diaľkovo ovládaný časovač s NodeMCU: 14 krokov

Video: Diaľkovo ovládaný časovač s NodeMCU: 14 krokov

Video: Diaľkovo ovládaný časovač s NodeMCU: 14 krokov
Video: #58 ESP8266 передает данные 17 дней на sparkfun.com и ubidots.com, работая от часовых батарей. 2024, Júl
Anonim
Diaľkovo ovládaný časovač s NodeMCU
Diaľkovo ovládaný časovač s NodeMCU

Tu vytvoríme časovač pomocou NodeMCU a Adafruit. Časovač budeme zobrazovať pomocou LED pásika a budeme ho môcť ovládať pomocou telefónu alebo počítača!

Náš cieľ:

Vytvorte časovač pomocou LED pásu, ktorý môžeme: spustiť, pozastaviť a resetovať pomocou telefónu alebo počítača.

Zásoby

Hardvér:

  • NodeMCU ESP 8266
  • LED pásik Adafruit NeoPixel

Knižnice:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Iné:

Slušné WiFi pripojenie

Krok 1: Vytvorme krmivo v Adafruit

Vytvorme krmivo v Adafruit!
Vytvorme krmivo v Adafruit!

Teraz, keď máme všetko, čo potrebujeme, sme pripravení začať stavať! V prvom rade musíme vytvoriť krmivo v Adafruite. Adafruit je služba, ktorá nám skutočne uľahčuje pripojenie nášho Arduina k internetu a vytváranie užitočných funkcií na diaľkové ovládanie. Ak ste to ešte neurobili, zaregistrujte sa na Adafruit.

Teraz vytvoríme nový informačný kanál

Náš kanál môžeme pomenovať, ako chceme, hovorím mu „časovač“.

Informačný kanál robí to, že zaznamenáva všetko, čo robíme, na našom informačnom paneli (ktorý vytvoríme za minútu) a odošle tieto údaje na našu nástenku, ale na to sa pozrieme hneď, ako budeme mať odoslané údaje.

Krok 2: Teraz si vytvoríme informačný panel.

Teraz urobme informačný panel.
Teraz urobme informačný panel.
Teraz urobme informačný panel.
Teraz urobme informačný panel.
Teraz urobme informačný panel.
Teraz urobme informačný panel.

Teraz, rovnakým spôsobom ako sme vytvorili informačný kanál, vytvoríme nový informačný panel. Svoju palubnú dosku nazvem: „rozhranie časovača“, pretože v podstate to bude náš ovládací panel: rozhranie s tlačidlami na ovládanie nášho časovača.

Krok 3: Získajte náš kľúč

Získajte náš kľúč
Získajte náš kľúč

Ak chceme pripojiť naše Arduino k nášmu kanálu, potrebujeme získať kľúč Adafruit, toto je vaše tajné heslo, ktoré zaistí, že sa k vašim kanálom bude môcť pripojiť iba vy.

Kľúč môžete získať kliknutím na žlté tlačidlo AIO Key v pravom hornom rohu obrazovky v programe Adafruit.

Tento kľúč niekde uložte, budeme ho potrebovať neskôr.

Nezdieľajte svoj kľúč! V opačnom prípade by sa k vašim kanálom a zariadeniam mohli pripojiť ľudia so zlým úmyslom.

Krok 4: Otvorte príklad čítania informačného kanála

Otvorte príklad čítania informačného kanála
Otvorte príklad čítania informačného kanála

Teraz otvorme naše Arduino IDE a začneme proces kódovania. V prvom rade musíme mať nainštalovanú knižnicu Adafruit IO Arduino.

Neviete, ako nainštalovať knižnice? toto je skvelý sprievodca od spoločnosti Adafruit: Arduino Libraries

Adafruit ponúka veľa vopred pripravených príkladov, z ktorých sa môžeme poučiť a poučiť sa z nich. Jeden z týchto príkladov je: adafruitio_21_feed_read. Tento príklad nájdete tu: Súbor - Príklady Adafruit IO Arduino adafruitio_21_feed_read

(ospravedlňte moje holandské rozhranie na obrázku)

Krok 5: Nastavme si pripojenie

Ak ste úspešne otvorili skicu adafruitio_21_feed_read, v náčrte by sa vám mali zobraziť 2 karty: adafruitio_21_feed_read a config.h. Tento náčrt bol vytvorený, aby sme sa mohli pripojiť k kanálu, ktorý sme vytvorili v kroku 1.

Aby sme sa mohli pripojiť k tomuto kanálu, musíme vyplniť niekoľko podrobností o našej WiFi a našom účte Adafruit,

Poďme na stránku config.h, tu vyplníme nasledujúce podrobnosti:

Vaše používateľské meno Adafruit:

#define IO_USERNAME "joopert"

Váš kľúč Adafruit:

#define IO_KEY "1234567890abcdefghijklmnop"

Názov vášho WiFi:

#define WIFI_SSID „MyWifi“

A vaše heslo k WiFi:

#define WIFI_PASS "aVerySecretPassword"

Vráťme sa teraz na kartu adafruitio_21_feed_read a vyplňte:

Vaše používateľské meno Adafruit … znova:

#define FEED_OWNER „joopert“

A nakoniec váš feedname (z kanála, ktorý sme vytvorili v kroku 1):

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

Krok 6: Skontrolujte pripojenie k Adafruit IO

Skontrolujte pripojenie k Adafruit IO
Skontrolujte pripojenie k Adafruit IO

Aby sme skontrolovali, či boli kroky, ktoré sme urobili predtým, vykonané správne, nahráme náš náčrt na NodeMCU. Ak otvoríte sériový monitor, mal by vyzerať ako na obrázku vyššie. Sériový monitor vám najskôr ukazuje, že sa pokúša pripojiť k vášmu WiFi a Adafruit. ak je to úplné, malo by to znieť:

Adafruit IO pripojený

To je skvelá správa! Teraz môžeme začať pridávať funkcie do nášho časovača …

Krok 7: Umožňuje LED

Umožňuje LED
Umožňuje LED
Umožňuje LED
Umožňuje LED

Teraz je čas zapnúť náš LED pás!

Pripojte svoj LED pás k PIN D5 (ak nemôžete nájsť D5, pripojte ho k inému PIN a zmeňte LED_PIN v kóde).

Definujte pásik LED

Nasledujúci kód pridá knižnicu NeoPixel (viac informácií o tejto knižnici nájdete tu: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) a uistite sa, že náš Arduino vie, kde sa nachádza náš pás LED a koľko má svetiel. Ak má váš LED pás rôzne špecifikácie, zmeňte ho v kóde.

NAD NASTAVENIE prázdneho priestoru () pridajte nasledujúci kód:

// nastavenie pripojenia NeoPixel #include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Kam je pripojený pás LED?

#define LED_COUNT 30 // Koľko pixelov má?

#define BRIGHTNESS 50 // Jas NeoPixel, 0 (min) až 255 (max)

Pás Adafruit_NeoPixel (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Spustite LED pás

Teraz spustíme LED pás a nastavíme jas (jas sa pohybuje od 0 min do 255 max, ale odporúčam 50… 255 je OPRAVDU jasné).

Do neplatného nastavenia () pridajte nasledujúci kód:

strip.begin (); // INICIALIZUJTE objekt objektu NeoPixel (POVINNÝ) strip.show (); // VYPNITE všetky pixely ASAP strip.setBrightness (50); // Nastavte BRIGHTNESS na približne 1/5 (max = 255)

ledsOn (); // Volá funkciu, aby sa rozsvietila každá LED jedna po druhej

Zapnite svetlá

Možno ste si už všimli, že voláme funkciu, ktorá ešte neexistuje, to bude naša ďalšia časť kódovania. Ak chceme zapnúť svetlá, musíme vytvoriť „for loop“, ktorá zapne každú jednotlivú LED jednu po druhej (neviete, čo je to for loop? Pozrite sa na to tu: www.arduino.cc/reference/ sk/jazyk/štruktúra/štruktúra riadenia/pre/).

Teraz vytvoríme funkciu: ledsOn ();

Pridajte nasledujúci kód NIŽŠÍ prázdny handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Pre každý pixel v páse … strip.setPixelColor (i, 0, 0, 255); // Nastaví farbu pixelov na modrý pás.show (); // Aktualizujte pás, aby zodpovedal}}

Odovzdať

Teraz je zábavná časť, nahrajme náš kód na NodeMCU … Ak všetko funguje správne, váš LED pásik by mal teraz zmodrať!

Nezobrazujú sa žiadne pixely ?: Pripojili ste pásik k správnemu kódu PIN? Alebo je stratené internetové pripojenie.

Nezobrazujú sa iba niektoré pixely ?: skontrolujte, či ste nastavili správne množstvo pixelov!

Krok 8: Pridajte načasovanie do časovača

Teraz sa uistíme, že náš časovač skutočne … no … krát, niečo.

Existujú rôzne spôsoby, ako vykonať načasovanie s Arduinom, jeden je delay (), ktorý zastaví spracovanie našej dosky na definovanú dobu. Nebudeme to používať, pretože naše Arduino v podstate zamrzne počas oneskorenia a chceme, aby sa naša doska pravidelne aktualizovala. Budeme teda používať Millis (), toto je elegantnejší spôsob načasovania v Arduine, pričom pomocou Millis () môžeme stále spúšťať kód medzi intervalmi.

Ak vás zaujíma, ako to funguje, môžete si pozrieť tento článok:

Pridajme kód pre Millis ():

Umiestnite tento kód NAD NASTAVENIE prázdnoty ()

nepodpísané dlhé predchádzajúce Millis = 0; // uloží sa naposledy, keď bol LED pás aktualizovanýinterval = 1000; // interval nášho časovača (milisekundy)

A vložme tento kód DO prázdnej slučky ():

nepodpísaný dlhý prúd Millis = millis ();// spustenie RYTHM ČASOVAČA ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// koniec RYTHM ČASOVAČA ******************************************** ***********

To, čo sme urobili, bolo vytvoriť rytmus pre náš pás LED na vypnutie LED diód, v nasledujúcom kroku pridáme kód, ktorý to urobí.

Krok 9: Odpočítavanie

V tomto kroku: urobíme funkciu, ktorá zaistí, že každú sekundu (alebo akýkoľvek interval, ktorý ste nastavili) vypneme JEDNU LED na konci pásu, kým nezhasnú všetky naše LED diódy.

V hornej časti vytvoríme „int“s názvom „led“. To neskôr povie nášmu časovaču, koľko LED diód musí ešte vypnúť.

NAD NASTAVENIE prázdnoty () pridajte nasledujúci kód:

int leds = LED_COUNT-1; // uvádza, koľko pixelov by malo byť rozsvietených

Teraz pridajme funkciu „časovač ();“, toto vypne svetlo každú sekundu

Pridajte nasledujúci kód NÍŽE pod prázdne LEDsOn ():

neplatný časovač () {strip.setPixelColor (leds, 0, 0, 0);

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

Chceme poskytnúť používateľovi spätnú väzbu, že časovač sa vykonáva po zhasnutí všetkých svetiel. S 'blinkie ();' LED diódy začnú blikať červeno po dokončení časovača!

NAD NASTAVENIE prázdnoty () pridajte nasledujúci kód:

int blinkStatus = 1; // povie blinkie (); funkciu, či by svetlo malo byť zapnuté alebo vypnuté

Pridajte nasledujúci kód NIŽŠÍ ČASOVAČ prázdnoty ():

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

blinkStatus = 0; strip.clear (); } else {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Pre každý pixel v páse… strip.setPixelColor (i, 255, 0, 0); // Nastavenie farby pixelu (v RAM) strip.show (); // Aktualizujte pás, aby zodpovedal}}}}

Nakoniec musíme zavolať funkciu v našej prázdnej slučke ();, Pamätáte si RYTHM ČASOVAČA, ktorý sme pridali v kroku 8? V tomto prípade if zavoláme funkciu timer ();.

TIMER RYTHM by teraz mal vyzerať takto:

// spustenie RYTHM ČASOVAČA ******************************************** *********

if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; časovač (); strip.show ();} // koniec ČASOVÉHO RYTMU *********************************** ******************

Teraz nahrajte tento kód!

Váš LED pásik by mal práve teraz vypínať 1 LED každú sekundu a po dokončení by mal blikať načerveno …

Teraz urobme tento motherlover diaľkovo ovládaný!

Krok 10: Upravte ho na diaľkové ovládanie: časť I

Make It Remote Controlled: Part I
Make It Remote Controlled: Part I
Make It Remote Controlled: Part I
Make It Remote Controlled: Part I

Máme časovač, to je v poriadku a v pohode, ale sľúbil som vám, že ho budete môcť ovládať telefónom, však? Vstúpme do záverečnej fázy nášho projektu: diaľkového ovládania nášho časovača.

Stále máte otvorenú kartu Adafruit? Vráťme sa na stránku io.adafruit.com, prejdeme na hlavný panel rozhrania časovača a vytvoríme nový blok: TOGGLE

  1. Pripojte prepínač k kanálu TIMER
  2. Nastavte hodnotu ON na: 1
  3. Nastavte hodnotu OFF na: 0

Dôvodom je to, že Adafruit neposiela na náš NodeMCU textové údaje, ale iba čísla.

Ak chcete, prepínaču môžete dať aj názov, možno: „Prepínač Zap/Vyp“

Teraz sa vráťme k IDE Arduino

Aby sme sa ubezpečili, že náš kód je aktuálny, ZADEJME náš kód ešte raz.

Akonáhle je nahrávanie dokončené, OTVORTE SÉRIOVÝ MONITOR a párkrát STLAČTE TOGGLE na našom paneli Adafruit. Teraz by sme na našom sériovom monitore mali vidieť niečo podobné.

prijaté <- 0 prijaté <- 1 prijaté <- 0 prijaté <- 1 prijaté <- 0

To znamená, že skutočne môžeme odosielať ovládacie prvky na náš NodeMCU!

Ak tieto správy nedostávate, skontrolujte, či sú vaše údaje Adafruit v súbore config.h stále správne.

Krok 11: Upravte ho na diaľkové ovládanie: časť II

Teraz už zostáva len robiť niečo s našimi prijatými ovládacími prvkami.

Aby sme to urobili, musíme zmeniť príkaz TIMER RYTHM if v prázdnej slučke (); trochu.

Povieme nášmu NodeMCU, že časovač by sa mal spustiť iba vtedy, keď od spoločnosti Adafruit dostaneme „1“(čo znamená: ZAPNUTÉ).

Najprv zozbierajme údaje, ktoré nám Adafruit posiela

NAD NASTAVENIE prázdneho priestoru () pridajte nasledujúci kód:

int adaData; // zbiera údaje, ktoré nám AdaFruit zasiela

Teraz skutočne zozbierajme tieto údaje

Pridajte nasledujúci kód VNÚTRI prázdneho handleMessage ():

adaData = data-> toInt ();

Zmeňme svoju prázdnu slučku ();

TIMER RYTHM by teraz mal vyzerať takto:

// spustenie RYTHM ČASOVAČA ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("nie som spustený"); } else if (adaData == 1) {timer (); } strip.show (); } // koniec RYTHM ČASOVAČA ******************************************* ************

Načítajte kód…

Teraz by ste mali byť schopní zapnúť a vypnúť časovač pomocou prepínača v programe Adafruit!

Krok 12: Hrajte okolo! Hotovo … alebo áno?

Práve teraz by ste mali mať plne funkčný diaľkový časovač! Ak je to pre vás všetko, ďakujem vám, že ste prišli s týmto projektom!

Ak chcete pokračovať trochu dlhšie, v nasledujúcich niekoľkých krokoch pridáme tlačidlo RESET pre náš časovač!

Krok 13: EXTRA: Vytvorte chvíľkové tlačidlo

EXTRA: Vytvorte okamžité tlačidlo
EXTRA: Vytvorte okamžité tlačidlo

Vráťme sa na náš prístrojový panel. Teraz chceme znova VYTVORIŤ NOVÝ BLOK.

  1. Vytvorte tlačidlo Momentary
  2. Pripojte ho k kanálu „časovača“
  3. Nastavte hodnotu lisu na: 2
  4. ODSTRAŇTE hodnotu uvoľnenia
  5. Dajte mu peknú farbu!

Dočasné tlačidlo sa už pohodlne nazýva „Reset“!

Keď tento blok vytvoríte, vyskúšate si ho, tlačidlo funguje, ak dostanete:

prijaté <- 2

Na vašom sériovom monitore.

Ak sa vám táto správa nezobrazuje, skúste znova nahrať náčrt

Krok 14: EXTRA: Pridajte funkciu Reset

Aby tlačidlo reset mohlo urobiť čokoľvek, musíme pridať funkciu, ktorá resetuje všetky LED diódy späť do pôvodného stavu.

Pridajte nasledujúci kód NÍŽE pod prázdnu blinkie ():

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

Teraz už zostáva len volať našu funkciu, a preto musíme poslednýkrát zmeniť TIMER RYTHM

TIMER RYTHM by teraz mal vyzerať takto:

// spustenie RYTHM ČASOVAČA ******************************************** ********* 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 (); } // koniec RYTHM ČASOVAČA ******************************************* ************

Načítajte kód…

Teraz by ste mali byť tiež schopní resetovať časovač stlačením tlačidla!

Odporúča: