INHOUDSOPGAWE:
- Voorrade
- Stap 1: Kom ons skep 'n voer in Adafruit
- Stap 2: Kom ons maak nou 'n paneelbord
- Stap 3: Kry ons sleutel
- Stap 4: Maak die voerleesvoorbeeld oop
- Stap 5: Kom ons stel ons verbinding op
- Stap 6: Gaan die verbinding met Adafruit IO na
- Stap 7: Laat LED toe
- Stap 8: Voeg tydsberekening by die timer
- Stap 9: aftelling
- Stap 10: Maak dit op afstand beheer: Deel I
- Stap 11: Maak dit op afstand beheer: Deel II
- Stap 12: Speel rond! Ons is klaar … of is ons?
- Stap 13: EKSTRA: Skep 'n kortstondige knoppie
- Stap 14: EKSTRA: Voeg die Herstelfunksie by
Video: Afstandsbediende timer met NodeMCU: 14 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
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
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
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
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
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
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
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
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
- Koppel die skakelaar aan die TIMER -feed
- Stel die AAN -waarde in op: 1
- 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
Kom ons keer terug na ons paneelbord. Nou wil ons weer 'n NUWE BLOK SKEP.
- Skep 'n kortstondige knoppie
- Koppel dit aan die 'timer' -voer
- Stel die perswaarde op: 2
- VERWYDER die vrystellingswaarde
- 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:
Afstandsbediende LED -oë en kostuumkap: 7 stappe (met foto's)
Afstandsbediende LED -oë en kostuumkap: Twin Jawas! Dubbele Orko! Twee spook towenaars van Bubble-Bobble! Hierdie kostuumkap kan enige wese met LED-oë wees wat u kies net deur die kleure te verander. Ek het hierdie projek vir die eerste keer in 2015 gemaak met 'n baie eenvoudige stroombaan en kode, maar hierdie jaar wou ek
DIY Ir afstandsbediende Led Strip: 10 stappe (met foto's)
DIY Ir Remote Controlled Led Strip: Hallo hallo almal welkom by ons nuwe instruksies, soos u reeds uit die kleinkiekie weet dat ons in hierdie projek 'n Ir led strip -kontroleerder gaan maak wat beheer kan word met behulp van 'n algemeen beskikbare IR -afstandsbediening wat gewoonlik gebruik in
Afstandsbediende hovercraft: 8 stappe (met foto's)
Afstandsbeheerde hovercraft: ss
Afstandsbediende huistoepassing met geheue -funksie: 4 stappe
Huistoepassing op afstand met geheue -funksie: deur hierdie kring te gebruik, kan ons 4 relais met behulp van 'n afstandsbediening beheer, en deur die eeprom -funksie te onthou, onthou dit die laaste toestand van relais, selfs tydens kragverlies
Afstandsbediende Bluetooth -motor met behulp van Arduino UNO: 4 stappe
Afstandsbediende Bluetooth -motor met Arduino UNO: Dit sal altyd fassinerend wees om te begin implementeer wat ons tot dusver in Arduino bestudeer het. Eintlik sou die meeste van almal die basiese beginsels volg. So hier gaan ek eenvoudig hierdie Arduino -gebaseerde motor met afstandsbediening verduidelik. Vereistes: 1.Arduino UNO