Indholdsfortegnelse:

Fjernstyret timer med NodeMCU: 14 trin
Fjernstyret timer med NodeMCU: 14 trin

Video: Fjernstyret timer med NodeMCU: 14 trin

Video: Fjernstyret timer med NodeMCU: 14 trin
Video: Dancing Wings - Stick 14 - 1.4m - Build Part 1 of 2 2024, Juli
Anonim
Fjernstyret timer med NodeMCU
Fjernstyret timer med NodeMCU

Her skal vi oprette en timer ved hjælp af en NodeMCU og Adafruit. Vi viser vores timer med en LED -strimmel, og vi kan styre den ved hjælp af vores telefon eller computer!

Vores mål:

Opret en timer ved hjælp af en LED -strip, som vi kan: starte, pause og nulstille ved hjælp af vores telefon eller computer.

Forbrugsvarer

Hardware:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel LED strip

Biblioteker:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Andet:

En anstændig WiFi -forbindelse

Trin 1: Lad os oprette et feed i Adafruit

Lad os oprette et feed i Adafruit!
Lad os oprette et feed i Adafruit!

Nu hvor vi har alt, hvad vi har brug for, er vi klar til at begynde at bygge! Først og fremmest skal vi oprette et feed i Adafruit. Adafruit er en service, der gør det virkelig let for os at forbinde vores Arduino til internettet og lave nyttige fjernstyrede funktioner. Hvis du ikke allerede har gjort det, skal du tilmelde dig Adafruit.

Lad os nu oprette et nyt feed

Vi kan navngive vores feed hvad vi vil, jeg kalder det 'timer'.

Hvad et feed gør, er at registrere alt, hvad vi gør i vores dashboard (som vi opretter på bare et minut) og sender disse data til vores board, men det er noget, vi vil se på, når vi har data, der skal sendes.

Trin 2: Lad os nu lave et dashboard

Lad os nu lave et dashboard
Lad os nu lave et dashboard
Lad os nu lave et dashboard
Lad os nu lave et dashboard
Lad os nu lave et dashboard
Lad os nu lave et dashboard

På samme måde som vi lavede et feed, opretter vi et nyt dashboard. Jeg vil kalde mit dashboard: 'timer -interface', fordi det er dybest set, hvad vores dashboard vil være: en grænseflade med knapperne til at styre vores timer.

Trin 3: Få vores nøgle

Få vores nøgle
Få vores nøgle

Hvis vi vil slutte vores Arduino til vores feed, skal vi få vores Adafruit -nøgle, dette er din hemmelige adgangskode, der vil sikre, at kun du kan oprette forbindelse til dine feeds.

Du kan få din nøgle ved at klikke på den gule AIO -knap øverst til højre på din skærm i Adafruit.

Gem denne nøgle et eller andet sted, vi får brug for den senere.

Del ikke din nøgle! Ellers kunne folk med dårlige hensigter oprette forbindelse til dine feeds og enheder.

Trin 4: Åbn feedlæsningseksemplet

Åbn feedlæsningseksemplet
Åbn feedlæsningseksemplet

Lad os nu åbne vores Arduino IDE og starte kodningsprocessen. Først og fremmest skal vi have Adafruit IO Arduino -biblioteket installeret.

Ved du ikke, hvordan du installerer biblioteker? dette er en fantastisk vejledning af Adafruit: Arduino Libraries

Adafruit tilbyder en masse præfabrikerede eksempler, som vi kan bruge og lære af. Et af disse eksempler er: adafruitio_21_feed_read. Du kan finde dette eksempel her: Fil - Eksempler Adafruit IO Arduino adafruitio_21_feed_read

(undskyld min hollandske grænseflade på billedet)

Trin 5: Lad os oprette vores forbindelse

Hvis du med succes har åbnet adafruitio_21_feed_read -skitsen, skal du se 2 faner i din skitse: adafruitio_21_feed_read og config.h. Denne skitse blev lavet, så vi kan oprette forbindelse til det feed, vi lavede i trin 1.

For at oprette forbindelse til dette feed skal vi udfylde et par detaljer om vores WiFi og vores Adafruit -konto,

Lad os rejse til config.h, her udfylder vi følgende detaljer:

Dit Adafruit brugernavn:

#define IO_USERNAME "joopert"

Din Adafruit -nøgle:

#define IO_KEY "1234567890abcdefghijklmnop"

Dit WiFi -navn:

#define WIFI_SSID "MyWifi"

Og din WiFi -adgangskode:

#define WIFI_PASS "aVerySecretPassword"

Lad os nu gå tilbage til fanen adafruitio_21_feed_read og udfylde:

Dit Adafruit brugernavn … igen:

#define FEED_OWNER "joopert"

Og endelig dit feednavn (fra det feed, vi lavede i trin 1):

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

Trin 6: Kontroller forbindelsen til Adafruit IO

Kontroller forbindelsen til Adafruit IO
Kontroller forbindelsen til Adafruit IO

For at kontrollere, om de trin, vi tog før, er blevet udført korrekt, vil vi uploade vores skitse til NodeMCU. Hvis du åbner din serielle skærm, skal den ligne billedet ovenfor. Først viser den serielle skærm dig, at den prøver at oprette forbindelse til din WiFi og til Adafruit. hvis det er fuldstændigt skal der stå:

Adafruit IO tilsluttet

Dette er gode nyheder! Nu kan vi begynde at tilføje funktionalitet til vores timer …

Trin 7: Lader LED

Lader LED
Lader LED
Lader LED
Lader LED

Nu er det tid til at tænde vores LED -strip!

Tilslut din LED -strip til D5 -PIN -koden (hvis du ikke kan finde D5, skal du slutte den til en anden PIN -kode og ændre LED_PIN i koden).

Definer LED -strimmel

Følgende kode tilføjer NeoPixel-biblioteket (lær mere om dette bibliotek her: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) og sørg for, at vores Arduino ved, hvor vores LED-strip er og hvor mange lys det har. Hvis din LED -strip har forskellige specifikationer, skal du ændre den i koden.

Tilføj følgende kode OVER den ugyldige opsætning ():

// opsæt NeoPixel -forbindelse #inkluderer #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Hvor er LED -båndet tilsluttet?

#define LED_COUNT 30 // Hvor mange pixels har den?

#define BRIGHTNESS 50 // NeoPixel lysstyrke, 0 (min) til 255 (max)

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

Start LED -strip

Nu starter vi vores LED -strimmel og indstiller lysstyrken (lysstyrken går fra 0 min til 255 max, men jeg anbefaler 50 … 255 er VIRKELIG lys).

Tilføj følgende kode I det ugyldige setup ():

strip.begin (); // INITIALISER NeoPixel -strimmelobjekt (påkrævet) strip.show (); // Sluk for alle pixels ASAP strip.setBrightness (50); // Indstil BRIGHTNESS til ca. 1/5 (maks. = 255)

ledsOn (); // Opkalder funktionen til at tænde hver LED én efter én

Tænd lysene

Måske har du allerede bemærket, at vi kalder en funktion, der ikke eksisterer endnu, som vil være vores næste del af kodning. Hvis vi vil tænde vores lys, skal vi oprette en 'for loop', der tænder hver enkelt LED en efter en (ved ikke, hvad en for loop er? Tjek det her: www.arduino.cc/reference/ da/sprog/struktur/kontrol-struktur/for/).

Nu skal vi oprette funktionen: ledsOn ();

Tilføj følgende kode NEDEN void handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// For hver pixel i strip … strip.setPixelColor (i, 0, 0, 255); // Indstil pixelens farve til blå strip.show (); // Opdater strimmel, der matcher}}

Upload

Nu er det sjove, lad os uploade vores kode til NodeMCU … Hvis alt fungerer korrekt, skal din LED -strip nu blive helt blå!

Vises der ikke pixels ?: har du forbundet striben til den rigtige pinkode? Eller måske er din internetforbindelse tabt.

Vises kun nogle pixels ikke ?: Kontroller, om du har indstillet den rigtige mængde pixels!

Trin 8: Føj timing til timeren

Nu skal vi sikre os, at vores timer faktisk … godt … gange, noget.

Der er forskellige måder at foretage timing med Arduino, den ene er forsinkelse (), dette stopper behandlingen af vores bestyrelse i en defineret periode. Vi kommer ikke til at bruge dette, da vores Arduino stort set fryser under forsinkelsen, og vi vil have, at vores board opdateres regelmæssigt. Så vi kommer til at bruge Millis (), dette er en mere elegant måde at lave timing på i Arduino, med Millis () kan vi stadig køre kode imellem intervaller.

Hvis du er interesseret i, hvordan dette fungerer, kan du tjekke denne artikel:

Lad os tilføje koden til Millis ():

Sæt denne kode OVER den ugyldige opsætning ()

unsigned long previousMillis = 0; // vil gemme sidste gang LED -strimlen blev opdateretint interval = 1000; // interval for vores timer (millisekunder)

Og lad os sætte denne kode i hulrummet ():

usigneret lang strømMillis = millis ();// start TIMER RYTHM ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// slut TIMER RYTHM ******************************************** ************

Det, vi lige gjorde, var at skabe en rytme for vores LED -strip til at slukke LED'er, i det næste trin tilføjer vi koden for at gøre netop det.

Trin 9: Nedtælling

I dette trin: Vi laver en funktion, der sørger for, at vi hvert sekund (eller hvilket interval du har indstillet) slukker én LED for enden af strimlen, indtil alle vores lysdioder er slukket.

Vi opretter et 'int' øverst kaldet 'leds'. Dette vil senere fortælle vores timer, hvor mange lysdioder den stadig skal slukke.

Tilføj følgende kode OVER den ugyldige opsætning ():

int leds = LED_COUNT-1; // teller hvor mange pixels der skal tændes

Lad os nu tilføje funktionen 'timer ();', dette vil slukke et lys hvert sekund

Tilføj følgende kode NEDEN for void ledsOn ():

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

hvis (leds> -1) {leds--; } andet {blinkie (); }}

Vi vil gerne give nogle feedback til brugeren om, at timeren er udført, efter at alle lysene er brændt ud. Med 'blinkie ();' LED'erne blinker rødt, når timeren er udført!

Tilføj følgende kode OVER den ugyldige opsætning ():

int blinkStatus = 1; // fortæller blinkie (); funktion, om lyset skal være tændt eller slukket

Tilføj følgende kode NEDEN hulrumstimeren ():

ugyldig blinkie () {hvis (blinkStatus == 1) {

blinkStatus = 0; strip.clear (); } ellers {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// For hver pixel i strip … strip.setPixelColor (i, 255, 0, 0); // Indstil pixelens farve (i RAM) strip.show (); // Opdater strimmel, der matcher}}}}

Endelig er vi nødt til at kalde funktionen i vores hulrum ();, Kan du huske TIMER RYTHM, vi tilføjede i trin 8? I denne if -sætning kalder vi funktionstimeren ();.

TIMER RYTHM skal nu se sådan ud:

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

hvis (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; timer (); strip.show ();} // slut TIMER RYTHM ************************************** *******************

Upload nu denne kode!

Lige nu skulle din LED -strimmel slukke 1 LED hvert sekund og blinke rødt, når den er færdig …

Lad os nu lave denne motherlover fjernbetjent!

Trin 10: Gør det fjernstyret: Del I

Gør det fjernstyret: Del I
Gør det fjernstyret: Del I
Gør det fjernstyret: Del I
Gør det fjernstyret: Del I

Vi har vores timer, det er helt fint og dandy, men jeg lovede dig, at du ville kunne styre det med din telefon, ikke? Lad os gå ind i den sidste fase af vores projekt: at gøre vores timer fjernstyret.

Har du stadig din Adafruit -fane åben? Lad os rejse tilbage til io.adafruit.com og lad os gå til vores timer -grænseflade dashboard og oprette en ny blok: TOGGLE

  1. Tilslut skifteren til TIMER -feedet
  2. Indstil ON -værdien til: 1
  3. Indstil OFF -værdien til: 0

Grunden til dette er, at Adafruit ikke sender tekstdata til vores NodeMCU, men kun tal.

Du kan også give Toggle et navn, hvis du vil, måske: 'On/Off switch'

Lad os nu gå tilbage til Arduino IDE

Bare for at sikre, at vores kode er opdateret, lad os Uploade vores kode igen.

ÅBN SERIEMONITOREN, når den er uploadet, og TRYK PÅ SKIFTEN på vores Adafruit -betjeningspanel et par gange. Vi skulle nu se sådan noget dukke op i vores serielle skærm:

modtaget <- 0 modtaget <- 1 modtaget <- 0 modtaget <- 1 modtaget <- 0

Det betyder, at vi faktisk kan sende kontrolelementer til vores NodeMCU!

Hvis du ikke modtager disse meddelelser, skal du kontrollere, om dine Adafruit -data i din config.h stadig er korrekte.

Trin 11: Gør det fjernstyret: Del II

Nu mangler vi bare at gøre noget med vores modtagne kontroller.

For at gøre det skal vi ændre vores TIMER RYTHM if -sætning i tomrumsløkken (); en lille smule.

Vi vil fortælle vores NodeMCU, at den først skal starte timeren, når vi har modtaget '1' (hvilket betyder: ON) fra Adafruit.

Lad os først indsamle de data, Adafruit sender os

Tilføj følgende kode OVER den ugyldige opsætning ():

int adaData; // indsamler de data, AdaFruit sender os

Lad os nu faktisk indsamle disse data

Tilføj følgende kode INDEN for void handleMessage ():

adaData = data-> toInt ();

Lad os ændre vores tomrumsløjfe ();

TIMER RYTHM skal nu se sådan ud:

// start TIMER RYTHM ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; hvis (adaData == 0) {Serial.println ("jeg kører ikke"); } ellers hvis (adaData == 1) {timer (); } strip.show (); } // slut TIMER RYTHM ******************************************** *************

OPLAD din kode …

Nu skulle du være i stand til at tænde og slukke timeren ved hjælp af kontakten i Adafruit!

Trin 12: Spil rundt! Vi er færdige … eller er vi?

Lige nu skal du have en fuldt fungerende fjernbetjent timer! Hvis det er det for dig, så tak fordi du fulgte med dette projekt!

Hvis du vil fortsætte lidt længere, tilføjer vi i de næste par trin en RESET -knap til vores timer!

Trin 13: EKSTRA: Opret momentan knap

EKSTRA: Opret øjeblikkelig knap
EKSTRA: Opret øjeblikkelig knap

Lad os vende tilbage til vores dashboard. Nu vil vi Opret en ny blok igen.

  1. Opret en øjeblikkelig knap
  2. Tilslut det til 'timer' -feedet
  3. Indstil trykværdien til: 2
  4. FJERN udgivelsesværdien
  5. Giv den en flot farve!

Praktisk kaldes den midlertidige knap allerede 'Nulstil'!

Når du har oprettet denne blok, test den, fungerer knappen, hvis du modtager:

modtaget <- 2

I din serielle skærm.

Hvis du ikke kan se denne meddelelse, kan du prøve at uploade skitsen igen

Trin 14: EKSTRA: Tilføj nulstillingsfunktionen

For at få nulstillingsknappen til at gøre alt, skal vi tilføje en funktion, der nulstiller alle lysdioderne tilbage til den oprindelige tilstand.

Tilføj følgende kode NEDEN den ugyldige blinkie ():

ugyldig genudsendelse () {leds = LED_COUNT; ledsOn (); }

Nu mangler vi bare at kalde vores funktion, for det skal vi ændre TIMER RYTHM en sidste gang

TIMER RYTHM skal nu se sådan ud:

// start TIMER RYTHM ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("jeg kører ikke"); } ellers hvis (adaData == 1) {timer (); } ellers hvis (adaData == 2) {genudsendelse (); } strip.show (); } // slut TIMER RYTHM ******************************************** *************

OPLAD din kode …

Nu skulle du også kunne nulstille timeren ved at trykke på knappen!

Anbefalede: