INHOUDSOPGAWE:

Afstandsbediende timer met NodeMCU: 14 stappe
Afstandsbediende timer met NodeMCU: 14 stappe

Video: Afstandsbediende timer met NodeMCU: 14 stappe

Video: Afstandsbediende timer met NodeMCU: 14 stappe
Video: Zou jij het kopen ? 😂 #nederlands #holland 2024, November
Anonim
Afstandsbeheerde timer met NodeMCU
Afstandsbeheerde timer met NodeMCU

Hier maak ons 'n timer met 'n NodeMCU en Adafruit. Ons gaan ons timer met 'n LED -strook vertoon, en ons kan dit beheer met ons telefoon of rekenaar!

Ons mikpunt:

Skep 'n timer met behulp van 'n LED -strook wat ons kan: begin, onderbreek en herstel met behulp van ons telefoon of rekenaar.

Voorrade

Hardeware:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel LED -strook

Biblioteke:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Ander:

'N Behoorlike WiFi -verbinding

Stap 1: Kom ons skep 'n voer in Adafruit

Kom ons skep 'n voer in Adafruit!
Kom ons skep 'n voer in Adafruit!

Noudat ons alles gekry het wat ons nodig het, is ons gereed om te begin bou! Eerstens moet ons 'n voer in Adafruit skep. Adafruit is 'n diens wat dit vir ons baie maklik maak om ons Arduino aan die internet te koppel en nuttige funksies op afstand te maak. As u dit nog nie gedoen het nie, meld u aan by Adafruit.

Laat ons nou 'n nuwe voer skep

Ons kan ons voer noem wat ons wil, ek noem dit 'timer'.

Wat 'n voer doen, is om alles wat ons doen op ons dashboard op te neem (wat ons binne 'n minuut skep) en die data na ons bord te stuur, maar dit is iets waarna ons sal kyk as ons data gestuur het.

Stap 2: Kom ons maak nou 'n paneelbord

Kom ons maak nou 'n paneelbord
Kom ons maak nou 'n paneelbord
Kom ons maak nou 'n paneelbord
Kom ons maak nou 'n paneelbord
Kom ons maak nou 'n paneelbord
Kom ons maak nou 'n paneelbord

Op dieselfde manier as wat ons 'n voer gemaak het, skep ons 'n nuwe dashboard. Ek sal my dashboard noem: 'timer -koppelvlak', want dit is basies wat ons dashboard sal wees: 'n koppelvlak met die knoppies om ons timer te beheer.

Stap 3: Kry ons sleutel

Kry ons sleutel
Kry ons sleutel

As ons ons Arduino aan ons voer wil koppel, moet ons ons Adafruit -sleutel kry, dit is u geheime wagwoord wat verseker dat slegs u met u feeds kan skakel.

U kan u sleutel kry deur op die geel AIO -knoppie regs bo op u skerm in Adafruit te klik.

Stoor hierdie sleutel êrens, ons benodig dit later.

Moenie jou sleutel deel nie! Anders kan mense met 'n slegte voorneme aan u feeds en toestelle koppel.

Stap 4: Maak die voerleesvoorbeeld oop

Maak die voedingsvoorbeeld oop
Maak die voedingsvoorbeeld oop

Laat ons nou ons Arduino IDE oopmaak en met die koderingsproses begin. In die eerste plek moet ons die Adafruit IO Arduino -biblioteek laat installeer.

Weet u nie hoe om biblioteke te installeer nie? dit is 'n uitstekende gids deur Adafruit: Arduino Libraries

Adafruit bied baie voorafgemaakte voorbeelde om van te gebruik en te leer. Een van hierdie voorbeelde is: adafruitio_21_feed_read. U kan hierdie voorbeeld hier vind: File - Voorbeelde Adafruit IO Arduino adafruitio_21_feed_read

(verskoon my Nederlandse koppelvlak in die prentjie)

Stap 5: Kom ons stel ons verbinding op

As u die skets adafruitio_21_feed_read suksesvol oopgemaak het, moet u 2 oortjies in u skets sien: adafruitio_21_feed_read en config.h. Hierdie skets is gemaak sodat ons kan aansluit by die voer wat ons in stap 1 gemaak het.

Om by hierdie voer aan te sluit, moet ons 'n paar besonderhede oor ons WiFi en ons Adafruit -rekening invul,

Kom ons reis na config.h, hier vul ons die volgende besonderhede in:

U Adafruit -gebruikersnaam:

#definieer IO_USERNAME "joopert"

U Adafruit -sleutel:

#definieer IO_KEY "1234567890abcdefghijklmnop"

Jou WiFi se naam:

#definieer WIFI_SSID "MyWifi"

En u WiFi -wagwoord:

#definieer WIFI_PASS "aVerySecretPassword"

Kom ons gaan nou terug na die blad adafruitio_21_feed_read en vul in:

U Adafruit -gebruikersnaam … weer:

#definieer FEED_OWNER "joopert"

En laastens u voernaam (uit die voer wat ons in stap 1 gemaak het):

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

Stap 6: Gaan die verbinding met Adafruit IO na

Gaan die verbinding met Adafruit IO na
Gaan die verbinding met Adafruit IO na

Om te kyk of die stappe wat ons voorheen geneem het, korrek uitgevoer is, gaan ons ons skets na die NodeMCU oplaai. As u u seriële monitor oopmaak, moet dit soos die prentjie hierbo lyk. Die seriële monitor wys u eers dat dit probeer om aan te sluit op u WiFi en op Adafruit. as dit volledig is, moet dit sê:

Adafruit IO verbind

Dit is goeie nuus! Nou kan ons funksies by ons timer begin voeg …

Stap 7: Laat LED toe

Laat LED
Laat LED
Laat LED
Laat LED

Nou is dit tyd om ons LED -strook aan te skakel!

Koppel u LED -strook aan die D5 -PIN (as u die D5 nie kan vind nie, koppel dit aan 'n ander PIN en verander die LED_PIN in die kode).

Definieer LED -strook

Die volgende kode sal die NeoPixel-biblioteek byvoeg (leer meer oor hierdie biblioteek hier: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) en maak seker dat ons Arduino weet waar ons LED-strook is en hoeveel ligte het dit. As u LED -strook verskillende spesifikasies het, verander dit in die kode.

Voeg die volgende kode bo die leemte -opstelling () by:

// stel NeoPixel -verbinding in #sluit #ifdef _AVR_ #include #endif in

#define LED_PIN D5 // Waaraan is die LED -strook gekoppel?

#define LED_COUNT 30 // Hoeveel pixels het dit?

#define BRIGHTNESS 50 // NeoPixel -helderheid, 0 (min) tot 255 (maksimum)

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

Begin LED -strook

Nou begin ons ons LED -strook en stel ons die helderheid in (die helderheid wissel van 0 min tot 255 maks., Maar ek beveel aan dat 50 … 255 regtig helder is).

Voeg die volgende kode by IN die nietige opstelling ():

strip.begin (); // INITIALISEER NeoPixel -strookvoorwerp (VEREIST) strip.show (); // Skakel alle pixels so gou as moontlik strip.setBrightness (50) af; // Stel BRIGHTNESS op ongeveer 1/5 (maksimum = 255)

ledsOn (); // Roep die funksie op om elke LED een vir een aan te skakel

Skakel die ligte aan

Miskien het u al opgemerk dat ons 'n funksie noem wat nog nie bestaan nie, wat ons volgende deel van kodering sal wees. As ons ons ligte wil aanskakel, moet ons 'n 'vir lus' skep wat elke individuele LED een vir een aanskakel (weet nie wat 'n lus is nie? Kyk hier: www.arduino.cc/reference/ af/taal/struktuur/kontrole-struktuur/vir/).

Nou gaan ons die funksie skep: ledsOn ();

Voeg die volgende kode HIERONDER void handleMessage () by:

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Vir elke pixel in strook … strip.setPixelColor (i, 0, 0, 255); // Stel die kleur van die pixel in op die blou strook.show (); // Werk strook by om by te pas}}

Laai op

Dit is nou die prettige deel, laat ons ons kode na die NodeMCU oplaai … As alles reg werk, moet u LED -strook nou heeltemal blou word!

Kom daar geen pixels voor nie?: Het u die strook aan die regte PIN gekoppel? Of miskien is u internetverbinding verlore.

Wys net 'n paar pixels nie ?: kyk of u die regte hoeveelheid pixels ingestel het!

Stap 8: Voeg tydsberekening by die timer

Nou gaan ons seker maak dat ons timer eintlik … wel … tye, iets is.

Daar is verskillende maniere om tydsberekening met Arduino te doen, een is vertraging (), dit stop die verwerking van ons bord vir 'n bepaalde tyd. Ons gaan dit nie gebruik nie, aangesien ons Arduino basies vries tydens die vertraging, en ons wil hê dat ons bord gereeld moet opdateer. Dus gaan ons Millis () gebruik, dit is 'n meer elegante manier om tydsberekening in Arduino te doen, met Millis () kan ons steeds kode tussen intervalle uitvoer.

As u belangstel in hoe dit werk, kan u na hierdie artikel kyk:

Kom ons voeg die kode vir Millis () by:

Plaas hierdie kode BO die leemte -opstelling ()

ongetekende lang vorigeMillis = 0; // sal die laaste keer wat die LED -strook bygewerk is, stoor in die interval = 1000; // interval van ons timer (millisekondes)

En laat ons hierdie kode in die leemte -lus () plaas:

ongetekende lang stroomMillis = millis ();// begin TIMER RITM ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// eindig TIMER RITM ******************************************** ************

Wat ons pas gedoen het, was om 'n ritme vir ons LED -strook te skep om LED's uit te skakel; in die volgende stap voeg ons die kode by om dit te doen.

Stap 9: aftelling

In hierdie stap: ons maak 'n funksie wat sal verseker dat ons elke sekonde (of watter interval ook al u stel) EEN LED aan die einde van die strook afskakel totdat al ons LED's af is.

Ons sal bo -aan 'n 'int' skep met die naam 'leds'. Dit sal ons timer later vertel hoeveel LED's dit nog moet afskakel.

Voeg die volgende kode bo die leemte -opstelling () by:

int leds = LED_COUNT-1; // tel hoeveel pixels aangesteek moet word

Laat ons nou die funksie 'timer ();' byvoeg, dit sal elke sekonde 'n lig uitskakel

Voeg die volgende kode ONDER die void ledsOn () by:

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

as (leds> -1) {leds--; } anders {blinkie (); }}

Ons wil 'n paar terugvoer gee aan die gebruiker dat die timer klaar is nadat al die ligte uitgebrand het. Met 'blinkie ();' die LED's sal rooi flikker nadat die timer klaar is!

Voeg die volgende kode bo die leemte -opstelling () by:

int blinkStatus = 1; // vertel die blinkie (); of die lig aan of af moet wees

Voeg die volgende kode ONDER die leemtydteller () by:

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

blinkStatus = 0; strip.clear (); } anders {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Vir elke pixel in strook … strip.setPixelColor (i, 255, 0, 0); // Stel pixel se kleur (in RAM) strip.show () in; // Werk strook by om by te pas}}}}

Uiteindelik moet ons die funksie in ons leemte -lus ();, Onthou u die TIMERRITME wat ons in stap 8 bygevoeg het? In hierdie if -verklaring noem ons die funksietimer ();.

TIMER RITME moet nou so lyk:

// begin TIMER RITM ******************************************** *********

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

Laai nou hierdie kode op!

Op die oomblik moet u LED -strook elke sekonde 1 LED afskakel en rooi knip as dit klaar is …

Laat ons nou hierdie moederliefde op afstand beheer!

Stap 10: Maak dit op afstand beheer: Deel I

Maak dit op afstand beheer: Deel I
Maak dit op afstand beheer: Deel I
Maak dit op afstand beheer: Deel I
Maak dit op afstand beheer: Deel I

Ons het ons tydteller, dit is alles in orde, maar ek het u belowe dat u dit met u telefoon kan beheer, reg? Laat ons die laaste fase van ons projek betree: ons timer op afstand laat beheer.

Het u Adabruit -oortjie nog oop? Kom ons gaan terug na io.adafruit.com en gaan na ons timer -koppelvlak -dashboard en skep 'n nuwe blok: TOGGLE

  1. Koppel die skakelaar aan die TIMER -feed
  2. Stel die AAN -waarde in op: 1
  3. Stel die OFF -waarde in op: 0

Die rede hiervoor is dat Adafruit nie teksdata na ons NodeMCU stuur nie, maar slegs getalle.

U kan die skakelaar ook 'n naam gee as u wil, miskien: 'Aan/uit -skakelaar'

Kom ons gaan nou terug na die Arduino IDE

Net om seker te maak dat ons kode op datum is, laai ons ons kode weer op.

Maak die reeksmonitor oop sodra die oplaai klaar is en druk 'n paar keer op die skakelaar op ons Adafruit -dashboard. Ons behoort nou iets soos hierdie in ons seriële monitor te sien verskyn:

ontvang <- 0 ontvang <- 1 ontvang <- 0 ontvang <- 1 ontvang <- 0

Dit beteken dat ons eintlik kontroles na ons NodeMCU kan stuur!

As u hierdie boodskappe nie ontvang nie, kyk of u Adafruit -data in u config.h steeds korrek is.

Stap 11: Maak dit op afstand beheer: Deel II

Nou bly daar net iets om te doen met ons ontvangde kontroles.

Om dit te kan doen, moet ons ons TIMER RITM as verklaring in die leemte -lus () verander; n bietjie.

Ons sal vir ons NodeMCU sê dat die timer eers moet begin sodra ons '1' (wat beteken: AAN) van Adafruit ontvang het.

Laat ons eers die data versamel wat Adafruit vir ons stuur

Voeg die volgende kode bo die leemte -opstelling () by:

int adaData; // versamel die data wat AdaFruit vir ons stuur

Laat ons nou eintlik die data versamel

Voeg die volgende kode BINNE die void handleMessage () by:

adaData = data-> toInt ();

Kom ons verander ons leemte -lus ();

TIMER RITME moet nou so lyk:

// begin TIMER RITM ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("ek loop nie"); } anders as (adaData == 1) {timer (); } strip.show (); } // eindig TIMER RITM ******************************************* *************

LAAI jou kode op …

Nou moet u die timer in en uit kan skakel met die skakelaar in Adafruit!

Stap 12: Speel rond! Ons is klaar … of is ons?

Op die oomblik behoort u 'n ten volle funksionele afstandteller te hê! As dit vir u is, dan is u dankbaar dat u met hierdie projek saamgegaan het!

As u 'n bietjie langer wil voortgaan, voeg ons in die volgende paar stappe 'n RESET -knoppie by vir ons timer!

Stap 13: EKSTRA: Skep 'n kortstondige knoppie

EKSTRA: Skep 'n kortstondige knoppie
EKSTRA: Skep 'n kortstondige knoppie

Kom ons keer terug na ons paneelbord. Nou wil ons weer 'n NUWE BLOK SKEP.

  1. Skep 'n kortstondige knoppie
  2. Koppel dit aan die 'timer' -voer
  3. Stel die perswaarde op: 2
  4. VERWYDER die vrystellingswaarde
  5. Gee dit 'n mooi kleur!

Die kort knoppie word gerieflik reeds 'Herstel' genoem!

Sodra u hierdie blok geskep het, toets dit, die knoppie werk as u die volgende ontvang:

ontvang <- 2

In u seriële monitor.

As u hierdie boodskap nie sien nie, kan u die skets weer oplaai

Stap 14: EKSTRA: Voeg die Herstelfunksie by

Om die reset -knoppie alles te laat doen, moet ons 'n funksie byvoeg wat al die LED's in die oorspronklike toestand terugstel.

Voeg die volgende kode ONDER die leemte blinkie () by:

leë herhaling () {leds = LED_COUNT; ledsOn (); }

Nou hoef ons net ons funksie te bel; daarvoor moet ons TIMER RITME 'n laaste keer verander

TIMER RITME moet nou so lyk:

// begin TIMER RITM ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("ek loop nie"); } anders as (adaData == 1) {timer (); } anders as (adaData == 2) {herhaal (); } strip.show (); } // beëindig TIMER RITM ******************************************* *************

LAAI jou kode op …

Nou moet u ook die timer kan herstel deur op die knoppie te druk!

Aanbeveel: