Obsah:

Dálkově ovládaný časovač s NodeMCU: 14 kroků
Dálkově ovládaný časovač s NodeMCU: 14 kroků

Video: Dálkově ovládaný časovač s NodeMCU: 14 kroků

Video: Dálkově ovládaný časovač s NodeMCU: 14 kroků
Video: eWeLink-Smart WiFi 2-Way Wall Panel Switch 2024, Listopad
Anonim
Dálkově ovládaný časovač s NodeMCU
Dálkově ovládaný časovač s NodeMCU

Zde vytvoříme časovač pomocí NodeMCU a Adafruit. Budeme zobrazovat náš časovač pomocí LED pásky a budeme jej moci ovládat pomocí telefonu nebo počítače!

Náš cíl:

Vytvořte časovač pomocí LED pásky, kterou můžeme: spustit, pozastavit a resetovat pomocí telefonu nebo počítače.

Zásoby

Hardware:

  • NodeMCU ESP 8266
  • LED pásek Adafruit NeoPixel

Knihovny:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Jiný:

Slušné WiFi připojení

Krok 1: Vytvořme krmivo v Adafruitu

Pojďme vytvořit krmivo v Adafruitu!
Pojďme vytvořit krmivo v Adafruitu!

Nyní, když máme vše, co potřebujeme, jsme připraveni začít stavět! Nejprve musíme v Adafruit vytvořit feed. Adafruit je služba, která nám opravdu usnadňuje připojení našeho Arduina k internetu a vytváření užitečných dálkově ovládaných funkcí. Pokud jste to ještě neudělali, zaregistrujte se na Adafruit.

Nyní vytvořme nový kanál

Náš kanál můžeme pojmenovat, jak chceme, já tomu říkám „časovač“.

Co zdroj dělá, je zaznamenat vše, co děláme, na náš řídicí panel (který vytvoříme za minutu) a odešle tato data na naši desku, ale na to se podíváme, jakmile budeme mít data k odeslání.

Krok 2: Nyní vytvoříme řídicí panel

Nyní vytvořme řídicí panel
Nyní vytvořme řídicí panel
Nyní vytvořme řídicí panel
Nyní vytvořme řídicí panel
Nyní vytvoříme hlavní panel …
Nyní vytvoříme hlavní panel …

Nyní stejným způsobem, jakým jsme vytvořili kanál, vytvoříme nový hlavní panel. Řídicímu panelu zavolám: „rozhraní časovače“, protože to je v podstatě náš hlavní panel: rozhraní s tlačítky pro ovládání našeho časovače.

Krok 3: Získejte náš klíč

Získejte náš klíč
Získejte náš klíč

Pokud chceme připojit náš Arduino k našemu kanálu, potřebujeme získat klíč Adafruit, toto je vaše tajné heslo, které zajistí, že se ke svým kanálům připojíte pouze vy.

Klíč můžete získat kliknutím na žluté tlačítko AIO Key v pravém horním rohu obrazovky v Adafruit.

Tento klíč někam uložte, budeme ho potřebovat později.

Nesdílejte svůj klíč! Jinak by se k vašim kanálům a zařízením mohli připojit lidé se špatnými úmysly.

Krok 4: Otevřete příklad čtení kanálu

Otevřete příklad čtení kanálu
Otevřete příklad čtení kanálu

Nyní otevřeme naše Arduino IDE a zahájíme proces kódování. Nejprve musíme mít nainstalovanou knihovnu Adafruit IO Arduino.

Nevíte, jak nainstalovat knihovny? toto je skvělý průvodce od Adafruit: Arduino Libraries

Adafruit nabízí spoustu předem připravených příkladů, ze kterých se můžeme poučit. Jedním z těchto příkladů je: adafruitio_21_feed_read. Tento příklad najdete zde: Soubor - Příklady Adafruit IO Arduino adafruitio_21_feed_read

(omluvte mé holandské rozhraní na obrázku)

Krok 5: Pojďme nastavit naše připojení

Pokud jste úspěšně otevřeli skicu adafruitio_21_feed_read, měli byste ve skice vidět 2 karty: adafruitio_21_feed_read a config.h. Tato skica byla vytvořena, abychom se mohli připojit ke kanálu, který jsme vytvořili v kroku 1.

Abychom se mohli připojit k tomuto kanálu, musíme vyplnit několik podrobností o naší WiFi a našem účtu Adafruit,

Pojďme cestovat do config.h, zde vyplníme následující podrobnosti:

Vaše uživatelské jméno Adafruit:

#define IO_USERNAME "joopert"

Váš klíč Adafruit:

#define IO_KEY "1234567890abcdefghijklmnop"

Název vašeho WiFi:

#define WIFI_SSID „MyWifi“

A vaše heslo k WiFi:

#define WIFI_PASS "aVerySecretPassword"

Vraťme se nyní na kartu adafruitio_21_feed_read a vyplňte:

Vaše uživatelské jméno Adafruit … znovu:

#define FEED_OWNER „joopert“

A nakonec vaše jméno (z kanálu, který jsme vytvořili v kroku 1):

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

Krok 6: Zkontrolujte připojení k Adafruit IO

Zkontrolujte připojení k Adafruit IO
Zkontrolujte připojení k Adafruit IO

Abychom zkontrolovali, zda byly kroky, které jsme provedli dříve, provedeny správně, nahrajeme naši skicu na NodeMCU. Pokud otevřete sériový monitor, měl by vypadat jako na obrázku výše. Nejprve vám sériový monitor ukazuje, že se pokouší připojit k vaší WiFi a Adafruit. pokud je to kompletní, mělo by to znít:

Adafruit IO připojen

To je skvělá zpráva! Nyní můžeme začít přidávat funkce do našeho časovače …

Krok 7: Umožňuje LED

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

Nyní je čas zapnout náš LED pás!

Připojte svůj LED pásek k PINu D5 (pokud nemůžete najít D5, připojte jej k jinému PINu a změňte LED_PIN v kódu).

Definujte LED pás

Následující kód přidá knihovnu NeoPixel (více o této knihovně se dozvíte zde: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) a ujistěte se, že náš Arduino ví, kde je náš LED pásek a kolik má světel. Pokud má váš LED pásek jiné specifikace, změňte jej v kódu.

Přidejte následující kód NAHORU neplatné nastavení ():

// nastavení připojení NeoPixel #include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Kam je připojen LED pás?

#define LED_COUNT 30 // Kolik pixelů má?

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

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

Spusťte LED pásek

Nyní spustíme LED pásek a nastavíme jas (jas se pohybuje od 0 min do 255 max., Ale doporučuji 50… 255 je SKUTEČNĚ jasný).

Do neplatného nastavení () přidejte následující kód:

strip.begin (); // INICIALIZUJTE objekt pásu NeoPixel (POVINNÝ) strip.show (); // VYPNĚTE všechny pixely ASAP strip.setBrightness (50); // Nastavte BRIGHTNESS na přibližně 1/5 (max = 255)

ledsOn (); // Volá funkci k zapnutí každé LED po jedné

Rozsviť světla

Možná jste si už všimli, že voláme funkci, která zatím neexistuje, to bude naše další část kódování. Pokud chceme rozsvítit naše světla, musíme vytvořit „for loop“, která rozsvítí každou jednotlivou LED jednu po druhé (nevíte, co je to for loop? Podívejte se na to zde: www.arduino.cc/reference/ en/language/structure/control-structure/for/).

Nyní budeme vytvářet funkci: ledsOn ();

Přidejte následující kód NÍŽE neplatný handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Pro každý pixel v pásu… strip.setPixelColor (i, 0, 0, 255); // Nastaví barvu pixelu na modrý proužek.show (); // Aktualizujte pás, aby odpovídal}}

Nahrát

Nyní je ta zábavná část, nahrajme náš kód na NodeMCU … Pokud vše funguje správně, váš LED pásek by měl nyní úplně zmodrat!

Nezobrazují se žádné pixely ?: Připojili jste proužek ke správnému PINu? Nebo je možná vaše připojení k internetu ztraceno.

Nezobrazují se pouze některé pixely ?: zkontrolujte, zda jste nastavili správné množství pixelů!

Krok 8: Přidejte časování do časovače

Nyní se ujistíme, že náš časovač skutečně … no … krát, něco.

Existují různé způsoby, jak provádět časování pomocí Arduina, jedním je delay (), což zastaví zpracování naší desky na definované časové období. Nebudeme to používat, protože naše Arduino v podstatě během zpoždění zamrzne a chceme, aby se naše deska pravidelně aktualizovala. Budeme tedy používat Millis (), toto je elegantnější způsob časování v Arduinu, s Millis () můžeme stále spouštět kód mezi intervaly.

Pokud vás zajímá, jak to funguje, můžete se podívat na tento článek:

Pojďme přidat kód pro Millis ():

Umístěte tento kód NAD prázdné nastavení ()

nepodepsané dlouhé předchozí Millis = 0; // uloží se naposledy, kdy byl LED pás aktualizovánv intervalu = 1000; // interval našeho časovače (milisekundy)

A vložme tento kód do prázdné smyčky ():

unsigned long currentMillis = millis ();// spustit ČASOVAČ RYTHM ********************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// konec RYTHM ČASOVAČE ************************************************* ***********

To, co jsme právě udělali, bylo vytvořit rytmus pro náš LED pás k vypnutí LED diod, v dalším kroku přidáme kód, který to udělá.

Krok 9: Odpočítávání

V tomto kroku: vytvoříme funkci, která zajistí, že každou sekundu (nebo jakýkoli interval, který jste nastavili) vypneme JEDNU LED na konci pásu, dokud nezhasnou všechny naše LED diody.

Nahoře vytvoříme 'int' s názvem 'leds'. To později našemu časovači řekne, kolik LED ještě musí vypnout.

Přidejte následující kód NAHORU neplatné nastavení ():

int leds = LED_COUNT-1; // říká, kolik pixelů by mělo svítit

Nyní přidejme funkci 'timer ();', toto vypne světlo každou sekundu

Přidejte následující kód NÍŽE pod prázdné ledsOn ():

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

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

Chceme dát uživateli zpětnou vazbu, že časovač je hotový poté, co všechna světla shořela. S 'blinkie ();' LED diody budou blikat červeně po dokončení časovače!

Přidejte následující kód NAHORU neplatné nastavení ():

int blinkStatus = 1; // řekne blinkie (); funkce, zda by mělo být světlo zapnuté nebo vypnuté

Přidejte následující kód NÍŽE pod neplatný časovač ():

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

blinkStatus = 0; strip.clear (); } else {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Pro každý pixel v pásu… strip.setPixelColor (i, 255, 0, 0); // Nastaví barvu pixelu (v RAM) strip.show (); // Aktualizujte pás, aby odpovídal}}}}

Nakonec musíme zavolat funkci v naší prázdné smyčce ();, Pamatujete si RYTHM ČASOVAČE, který jsme přidali v kroku 8? V tomto příkazu if zavoláme funkci timer ();.

TIMER RYTHM by nyní měl vypadat takto:

// spustit ČASOVAČ RYTHM ********************************************* *********

if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; časovač (); strip.show ();} // // konec ČASOVAČ RYTHM ************************************* ******************

Nyní nahrajte tento kód!

Právě teď by váš LED pás měl vypínat 1 LED každou sekundu a blikat červeně, když je hotovo …

Nyní pojďme udělat tuto mateřskou na dálkové ovládání!

Krok 10: Make It Remote Controlled: Part 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 pořádku a hloupé, ale slíbil jsem vám, že to budete moci ovládat telefonem, že? Vstupme do závěrečné fáze našeho projektu: dálkové ovládání našeho časovače.

Stále máte otevřenou kartu Adafruit? Pojďme se vrátit na io.adafruit.com a přejdeme na hlavní panel rozhraní časovače a vytvoříme nový blok: TOGGLE

  1. Připojte přepínač ke zdroji TIMER
  2. Nastavte hodnotu ZAPNUTO na: 1
  3. Nastavte hodnotu OFF na: 0

Důvodem je to, že Adafruit neposílá textová data na náš NodeMCU, ale pouze čísla.

Toggle můžete také pojmenovat, pokud chcete, možná: „Přepínač zapnutí/vypnutí“

Vraťme se nyní k Arduino IDE

Abychom se ujistili, že je náš kód aktuální, ZAVEJME náš kód ještě jednou.

Jakmile bude nahrávání dokončeno, OTEVŘETE SÉRIOVÝ MONITOR a několikrát STISKNĚTE TOGGLE na našem hlavním panelu Adafruit. Nyní bychom měli vidět, že se něco takového objevuje na našem sériovém monitoru:

přijato <- 0 přijato <- 1 přijato <- 0 přijato <- 1 přijato <- 0

To znamená, že můžeme skutečně posílat ovládací prvky na náš NodeMCU!

Pokud tyto zprávy nedostáváte, zkontrolujte, zda jsou vaše data Adafruit v souboru config.h stále správná.

Krok 11: Make It Remote Controlled: Part II

Teď už zbývá jen něco dělat s našimi přijatými ovládacími prvky.

Abychom to mohli udělat, musíme změnit náš příkaz TIMER RYTHM if v neplatné smyčce (); trochu.

Řekneme našemu NodeMCU, že by měl časovač spustit až poté, co od Adafruit obdržíme '1' (což znamená: ON).

Nejprve shromáždíme data, která nám Adafruit posílá

Přidejte následující kód NAHORU neplatné nastavení ():

int adaData; // shromažďuje data, která nám AdaFruit posílá

Nyní ve skutečnosti shromáždíme tato data

Přidejte následující kód UVNITŘ do neplatné handleMessage ():

adaData = data-> toInt ();

Změňme naši prázdnou smyčku ();

TIMER RYTHM by nyní měl vypadat takto:

// spustit ČASOVAČ RYTHM ********************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("im not running"); } else if (adaData == 1) {timer (); } strip.show (); } // konec ČASOVAČ RYTHM ******************************************* ************

Načíst kód…

Nyní byste měli být schopni časovač zapnout a vypnout pomocí přepínače v Adafruit!

Krok 12: Hrajte dokola! Jsme hotovi … nebo ano?

Právě teď byste měli mít plně funkční vzdálený časovač! Pokud je to pro vás, pak vám děkuji, že jste přišli s tímto projektem!

Pokud chcete pokračovat o něco déle, v příštích několika krocích přidáme tlačítko RESET pro náš časovač!

Krok 13: EXTRA: Vytvořit momentální tlačítko

EXTRA: Vytvořit momentální tlačítko
EXTRA: Vytvořit momentální tlačítko

Vraťme se na náš řídicí panel. Nyní chceme znovu VYTVOŘIT NOVÝ BLOK.

  1. Vytvořte tlačítko Momentary
  2. Připojte jej ke kanálu „časovače“
  3. Nastavte hodnotu lisu na: 2
  4. ODSTRAŇTE hodnotu uvolnění
  5. Dejte mu pěknou barvu!

Pohodlné tlačítko se již pohodlně nazývá „Reset“!

Jakmile tento blok vytvoříte, vyzkoušejte jej, tlačítko funguje, pokud obdržíte:

obdržel <- 2

Ve vašem sériovém monitoru.

Pokud se vám tato zpráva nezobrazuje, zkuste skicu znovu nahrát

Krok 14: EXTRA: Přidejte funkci Reset

Aby tlačítko reset provedlo cokoli, musíme přidat funkci, která resetuje všechny diody LED zpět do původního stavu.

Přidejte následující kód NÍŽE pod prázdnou blinkie ():

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

Nyní zbývá už jen volat naši funkci, proto musíme naposledy změnit TIMER RYTHM

TIMER RYTHM by nyní měl vypadat takto:

// spustit ČASOVAČ RYTHM ********************************************* ********* 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 (); } // konec RYTHM ČASOVAČE ********************************************** ************

Načíst kód…

Nyní byste měli mít také možnost resetovat časovač stisknutím tlačítka!

Doporučuje: