Sisällysluettelo:

Kauko -ohjattu ajastin solmulla MCU: 14 vaihetta
Kauko -ohjattu ajastin solmulla MCU: 14 vaihetta

Video: Kauko -ohjattu ajastin solmulla MCU: 14 vaihetta

Video: Kauko -ohjattu ajastin solmulla MCU: 14 vaihetta
Video: 10 Most Amazing Rescue Ships in the World 2024, Heinäkuu
Anonim
Kaukosäädetty ajastin NodeMCU: lla
Kaukosäädetty ajastin NodeMCU: lla

Tässä aiomme luoda ajastimen käyttämällä NodeMCU: ta ja Adafruitia. Aiomme näyttää ajastimemme LED -nauhalla ja voimme hallita sitä puhelimella tai tietokoneella!

Meidän maalimme:

Luo ajastin LED -nauhalla, jonka voimme: käynnistää, keskeyttää ja nollata puhelimella tai tietokoneella.

Tarvikkeet

Laitteisto:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel LED -nauha

Kirjastot:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Muu:

Hyvä WiFi -yhteys

Vaihe 1: Luo syöte Adafruitissa

Luo syöte Adafruitissa!
Luo syöte Adafruitissa!

Nyt kun saimme kaiken tarvitsemamme, olemme valmiita rakentamaan! Ensinnäkin meidän on luotava syöte Adafruitiin. Adafruit on palvelu, jonka avulla voimme todella helposti yhdistää Arduinomme Internetiin ja tehdä hyödyllisiä kauko -ohjattavia ominaisuuksia. Jos et ole jo tehnyt niin, tilaa Adafruit.

Luodaan nyt uusi syöte

Voimme nimetä syötteemme mitä tahansa haluamme, kutsun sitä "ajastimeksi".

Syöte tallentaa kaiken tekemämme hallintapaneeliin (jonka me luomme vain minuutissa) ja lähettää tiedot hallituksellemme, mutta tarkastelemme sitä heti, kun meillä on tietoja lähetettäväksi.

Vaihe 2: Tehdään nyt koontinäyttö

Tehdään nyt kojelauta
Tehdään nyt kojelauta
Tehdään nyt kojelauta
Tehdään nyt kojelauta
Tehdään nyt kojelauta
Tehdään nyt kojelauta

Luomme uuden hallintapaneelin samalla tavalla kuin syötteen. Kutsun kojelautaani "ajastinkäyttöliittymäksi", koska se on pohjimmiltaan se, mitä kojelautamme tulee olemaan: käyttöliittymä, jossa on painikkeet ajastimen ohjaamiseksi.

Vaihe 3: Hanki avaimemme

Hanki avaimemme
Hanki avaimemme

Jos haluamme yhdistää Arduinomme syötteeseemme, meidän on hankittava Adafruit -avain, tämä on salainen salasanasi, joka varmistaa, että vain sinä voit muodostaa yhteyden syötteisiisi.

Voit saada avaimesi napsauttamalla keltaista AIO Key -painiketta näytön oikeassa yläkulmassa Adafruitissa.

Tallenna tämä avain jonnekin, tarvitsemme sitä myöhemmin.

Älä jaa avainta! Muuten ihmiset, joilla on pahat aikomukset, voivat muodostaa yhteyden syötteisiisi ja laitteisiisi.

Vaihe 4: Avaa esimerkki syötteen lukemisesta

Avaa esimerkki syötteen lukemisesta
Avaa esimerkki syötteen lukemisesta

Avaa nyt Arduino IDE ja aloita koodausprosessi. Ensinnäkin meidän on asennettava Adafruit IO Arduino -kirjasto.

Etkö tiedä kuinka asentaa kirjastoja? tämä on loistava Adafruitin opas: Arduino Libraries

Adafruit tarjoaa paljon valmiita esimerkkejä, joita voimme käyttää ja joista voimme oppia. Yksi näistä esimerkeistä on: adafruitio_21_feed_read. Löydät tämän esimerkin täältä: Tiedosto - Esimerkkejä Adafruit IO Arduino adafruitio_21_feed_read

(anteeksi hollantilainen käyttöliittymäni kuvassa)

Vaihe 5: Asennetaan yhteys

Jos olet avannut onnistuneesti adafruitio_21_feed_read -luonnoksen, luonnoksessasi pitäisi näkyä kaksi välilehteä: adafruitio_21_feed_read ja config.h. Tämä luonnos tehtiin, jotta voimme muodostaa yhteyden vaiheessa 1 tekemäämme syötteeseen.

Jotta voimme muodostaa yhteyden tähän syötteeseen, meidän on täytettävä muutamia tietoja WiFi -yhteydestämme ja Adafruit -tilistämme,

Siirrymme osoitteeseen config.h, tässä täytämme seuraavat tiedot:

Adafruit -käyttäjänimesi:

#define IO_USERNAME "joopert"

Adafruit -avaimesi:

#define IO_KEY "1234567890abcdefghijklmnop"

WiFi -verkon nimi:

#define WIFI_SSID "MyWifi"

Ja WiFi -salasanasi:

#define WIFI_PASS "aVerySecretPassword"

Palataan nyt adafruitio_21_feed_read -välilehdelle ja täytetään:

Adafruit -käyttäjätunnuksesi… uudelleen:

#define FEED_OWNER "joopert"

Ja lopuksi syötteenimi (vaiheessa 1 tekemästämme syötteestä):

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

Vaihe 6: Tarkista yhteys Adafruit IO: hon

Tarkista yhteys Adafruit IO: hon
Tarkista yhteys Adafruit IO: hon

Tarkistaaksemme, ovatko aiemmin suorittamamme vaiheet suoritettu oikein, lataamme luonnoksemme NodeMCU: hon. Jos avaat sarjamonitorisi, sen pitäisi näyttää yllä olevan kuvan kaltaiselta. Ensin sarjamonitori näyttää, että se yrittää muodostaa yhteyden WiFi -verkkoon ja Adafruitiin. jos se on valmis, sen pitäisi sanoa:

Adafruit IO yhdistetty

Tämä on hieno uutinen! Nyt voimme aloittaa toimintojen lisäämisen ajastimeemme…

Vaihe 7: Antaa LED -valon

Antaa LED -valon
Antaa LED -valon
Antaa LED -valon
Antaa LED -valon

Nyt on aika kytkeä LED -nauha päälle!

Liitä LED -nauha D5 -PIN -koodiin (jos et löydä D5 -liitintä, yhdistä se toiseen PIN -koodiin ja vaihda koodin LED_PIN -koodi).

Määritä LED -nauha

Seuraava koodi lisää NeoPixel-kirjaston (lue lisää tästä kirjastosta täältä: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) ja varmista, että Arduino tietää missä LED-nauhamme on ja kuinka monta valoa siinä on. Jos LED -nauhallasi on eri tekniset tiedot, muuta se koodissa.

Lisää seuraava koodi mitätöityjen asetusten yläpuolelle ():

// aseta NeoPixel -yhteys #include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // Mihin LED -nauha on kytketty?

#define LED_COUNT 30 // Kuinka monta pikseliä siinä on?

#define BRIGHTNESS 50 // NeoPixel -kirkkaus, 0 (min) - 255 (maksimi)

Adafruit_NeoPixel -nauha (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Käynnistä LED -nauha

Käynnistämme nyt LED -nauhan ja asetamme kirkkauden (kirkkaus vaihtelee 0 minuutista 255 maksimi, mutta suosittelen 50… 255 on todella kirkas).

Lisää seuraava koodi tyhjään asetukseen ():

strip.begin (); // ALOITA NeoPixel -nauhaobjekti (VAATIMUS) strip.show (); // Sammuta kaikki pikselit ASAP strip.setBrightness (50); // Aseta KIRKKAUS arvoon noin 1/5 (enintään = 255)

ledsOn (); // Kutsuu toimintoa kytkemään kaikki LEDit yksitellen päälle

Sytytä valot

Ehkä olet jo huomannut, että kutsumme funktiota, jota ei ole vielä olemassa, se on seuraava osa koodausta. Jos haluamme sytyttää valot, meidän on luotava 'for loop', joka sytyttää jokaisen yksittäisen LED -valon yksitellen (etkö tiedä, mikä on for -silmukka? Tarkista se täältä: www.arduino.cc/reference/ fi/kieli/rakenne/ohjausrakenne/for/).

Nyt aiomme luoda funktion: ledsOn ();

Lisää seuraava koodi BOLOW void handleMessage ():

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Jokaiselle nauhan pikselille… strip.setPixelColor (i, 0, 0, 255); // Aseta pikselin väri sininen nauha.show (); // Päivitä liuska vastaamaan}}

Lataa

Nyt on hauska osa, lataamme koodimme NodeMCU: hon… Jos kaikki toimii oikein, LED -nauhan pitäisi nyt muuttua täysin siniseksi!

Eikö pikseleitä näy ?: oletko liittänyt nauhan oikeaan PIN -koodiin? Tai ehkä Internet -yhteys katkeaa.

Eikö vain jotkut pikselit näy?: Tarkista, asetatko oikean pikselimäärän!

Vaihe 8: Lisää ajoitus ajastimeen

Nyt aiomme varmistaa, että ajastimemme todella… no… kertaa, jotain.

On olemassa erilaisia tapoja tehdä ajoitus Arduinolla, yksi on delay (), tämä pysäyttää aluksemme käsittelyn määritetyn ajan. Emme aio käyttää tätä, koska Arduinomme jäätyy periaatteessa viiveen aikana, ja haluamme, että korttimme päivitetään säännöllisesti. Joten aiomme käyttää Milliä (), tämä on tyylikkäämpi tapa tehdä ajoitus Arduinossa, ja Millis (): llä voimme silti suorittaa koodia välien välillä.

Jos olet kiinnostunut tämän toiminnasta, voit lukea tämän artikkelin:

Lisätään Millis (): n koodi:

Laita tämä koodi tyhjän asennuksen yläpuolelle ()

allekirjoittamaton aikaisempiMillis = 0; // säilyttää LED -nauhan viimeisimmän päivityksen ajan = intervalli = 1000; // ajastimemme aikaväli (millisekuntia)

Ja laitetaan tämä koodi void loopiin ():

allekirjoittamaton pitkävirtaMillis = millis ();// käynnistä AJASTINRYTHM ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// lopeta TIMER RYTHM ******************************************** ***********

Teimme juuri rytmin LED -nauhallemme LED -valojen sammuttamiseksi, seuraavassa vaiheessa lisäämme koodin juuri tämän tekemiseksi.

Vaihe 9: Lähtölaskenta

Tässä vaiheessa: teemme toiminnon, joka varmistaa, että sammutamme jokaisen sekunnin (tai minkä tahansa asettamasi välin) YKSI LED -valon nauhan päässä, kunnes kaikki LED -valot sammuvat.

Luomme "int" yläreunassa nimeltä "ledit". Tämä kertoo myöhemmin ajastimellemme, kuinka monta lediä sen on vielä sammuttava.

Lisää seuraava koodi mitätöityjen asetusten yläpuolelle ():

int ledit = LED_COUNT-1; // kertoo kuinka monta pikseliä pitäisi sytyttää

Lisätään nyt toiminto 'timer ();', tämä sammuttaa valon joka sekunti

Lisää seuraava koodi tyhjien LEDien alapuolelle ():

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

jos (ledit> -1) {ledit--; } else {blinkie (); }}

Haluamme antaa käyttäjälle palautetta siitä, että ajastin on tehty, kun kaikki valot ovat palanneet. Kanssa 'blinkie ();' LED -valot vilkkuvat punaisena ajastimen jälkeen!

Lisää seuraava koodi mitätöityjen asetusten yläpuolelle ():

int blinkStatus = 1; // kertoo blinkie (); toiminto, jos valon pitäisi olla päällä tai pois päältä

Lisää seuraava koodi tyhjiöajastimen () alle:

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

blinkStatus = 0; strip.clear (); } else {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Jokaiselle nauhan pikselille… strip.setPixelColor (i, 255, 0, 0); // Aseta pikselin väri (RAM -muistissa) strip.show (); // Päivitä liuska vastaamaan}}}}

Lopuksi meidän on kutsuttava funktio tyhjäsilmukassamme ();, Muistatko AJASTINYKSIKÖN, jonka lisäsimme vaiheessa 8? Tässä if -lauseessa kutsumme funktiota ajastimeksi ();.

TIMER RYTHM: n pitäisi nyt näyttää tältä:

// käynnistä AJASTINRYTHM ******************************************** *********

if (currentMillis - previousMillis> = väli) {previousMillis = currentMillis; ajastin(); strip.show ();} // end TIMER RYTHM ************************************* *******************

Lataa nyt tämä koodi!

Tällä hetkellä LED -nauhasi pitäisi sammuttaa 1 LED joka sekunti ja vilkkua punaisena, kun se on valmis …

Tehdään nyt tämä äidin rakastaja kauko -ohjattavaksi!

Vaihe 10: Tee se kauko -ohjattavaksi: Osa I

Tee siitä kauko -ohjattava: Osa I
Tee siitä kauko -ohjattava: Osa I
Tee siitä kauko -ohjattava: Osa I
Tee siitä kauko -ohjattava: Osa I

Meillä on ajastin, kaikki on hyvin ja hauskaa, mutta lupasin sinulle, että pystyt hallitsemaan sitä puhelimellasi? Siirrymme projektimme viimeiseen vaiheeseen: ajastimen tekeminen kauko -ohjattavaksi.

Onko Adafruit -välilehti vielä auki? Mennään takaisin osoitteeseen io.adafruit.com ja mennään ajastinkäyttöliittymän kojelautaan ja luodaan uusi lohko: TOGGLE

  1. Liitä kytkin AJASTIN -syötteeseen
  2. Aseta ON -arvoksi: 1
  3. Aseta OFF -arvoksi: 0

Syynä tähän on se, että Adafruit ei lähetä tekstitietoja NodeMCU: lle, vaan vain numeroita.

Voit myös antaa Togglelle nimen, jos haluat, esimerkiksi: On/Off -kytkin

Palataan nyt takaisin Arduino IDE: hen

Varmista vain, että koodimme on ajan tasalla, LATAA koodimme uudelleen.

AVAA SERIAL MONITOR, kun se on ladattu, ja PAINA KYTKENTÄ Adafruit -hallintapaneelissamme muutaman kerran. Meidän pitäisi nyt nähdä jotain tällaista ilmestyvän sarjamonitoriin:

vastaanotettu <- 0 vastaanotettu <- 1 vastaanotettu <- 0 vastaanotettu <- 1 vastaanotettu <- 0

Tämä tarkoittaa, että voimme itse lähettää ohjaimia NodeMCU -laitteellemme!

Jos et saa näitä viestejä, tarkista, ovatko konfiguraatiossa h olevat Adafruit -tiedot edelleen oikein.

Vaihe 11: Tee se kauko -ohjattavaksi: Osa II

Nyt ei muuta kuin tekemään jotain saamillamme ohjaimilla.

Tätä varten meidän on muutettava TIMER RYTHM if -lauseemme void -silmukassa (); hieman.

Kerromme NodeMCU: lle, että sen pitäisi käynnistää ajastin vasta, kun olemme saaneet Adafruitilta '1' (mikä tarkoittaa: ON).

Keräämme ensin tiedot, jotka Adafruit lähettää meille

Lisää seuraava koodi mitätöityjen asetusten yläpuolelle ():

int adaData; // kerää tietoja, jotka AdaFruit lähettää meille

Nyt kerätään tosiasiallisesti nämä tiedot

Lisää seuraava koodi tyhjäkädensijan sisälleMessage ():

adaData = data-> toInt ();

Muutetaan tyhjä silmukka ();

TIMER RYTHM: n pitäisi nyt näyttää tältä:

// käynnistä AJASTINRYTHM ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("en ole käynnissä"); } else if (adaData == 1) {timer (); } strip.show (); } // end TIMER RYTHM ******************************************* ************

LATAA koodisi…

Nyt sinun pitäisi pystyä kytkemään ajastin päälle ja pois päältä Adafruutin kytkimellä!

Vaihe 12: Pelaa! Olemme valmiita… vai olemmeko?

Nyt sinulla pitäisi olla täysin toimiva kauko -ajastin! Jos tämä on sinulle, kiitos, että olet mukana tässä projektissa!

Jos haluat jatkaa hieman pidempään, lisäämme seuraavien vaiheiden aikana RESET -painikkeen ajastimeemme!

Vaihe 13: LISÄ: Luo hetkellinen painike

LISÄ: Luo hetkellinen painike
LISÄ: Luo hetkellinen painike

Palataan kojelautaan. Nyt haluamme luoda uuden lohkon.

  1. Luo hetkellinen painike
  2. Liitä se ajastinsyöteeseen
  3. Aseta puristusarvoksi: 2
  4. POISTA vapautusarvo
  5. Anna sille kiva väri!

Kätevästi hetkellinen painike on jo nimeltään 'Reset'!

Kun olet luonut tämän lohkon, testaa se, painike toimii, jos saat:

sai <- 2

Sarjamonitorissasi.

Jos et näe tätä viestiä, yritä ladata luonnos uudelleen

Vaihe 14: LISÄ: Lisää nollaustoiminto

Jotta nollauspainike voisi tehdä mitä tahansa, meidän on lisättävä toiminto, joka palauttaa kaikki LEDit takaisin alkuperäiseen tilaansa.

Lisää seuraava koodi void blinkien () alle:

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

Nyt on jäljellä vain funktion kutsuminen, sillä meidän on vaihdettava AJASTINYKSIKKÖ viimeisen kerran

TIMER RYTHM: n pitäisi nyt näyttää tältä:

// käynnistä AJASTINRYTHM ******************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("en ole käynnissä"); } else if (adaData == 1) {timer (); } else if (adaData == 2) {rerun (); } strip.show (); } // end TIMER RYTHM ******************************************* ************

LATAA koodisi…

Nyt sinun pitäisi myös pystyä nollaamaan ajastin painamalla painiketta!

Suositeltava: