Talaan ng mga Nilalaman:

Remote Controlled Timer With NodeMCU: 14 Hakbang
Remote Controlled Timer With NodeMCU: 14 Hakbang

Video: Remote Controlled Timer With NodeMCU: 14 Hakbang

Video: Remote Controlled Timer With NodeMCU: 14 Hakbang
Video: How to make Universal Remote control using ESP8266 Google Assistant & Cadio 2024, Hulyo
Anonim
Remote Controlled Timer Sa NodeMCU
Remote Controlled Timer Sa NodeMCU

Narito lilikha kami ng isang timer gamit ang isang NodeMCU at Adafruit. Ipapakita namin ang aming timer sa isang LED strip at makokontrol namin ito gamit ang aming telepono o computer!

Ang aming layunin:

Lumikha ng isang timer gamit ang isang LED strip na maaari naming: simulan, i-pause at i-reset gamit ang aming telepono o computer.

Mga gamit

Hardware:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel LED strip

Mga Aklatan:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Iba pa:

Isang disenteng koneksyon sa WiFi

Hakbang 1: Lumikha Tayo ng isang Feed sa Adafruit

Lumikha Tayo ng isang Feed sa Adafruit!
Lumikha Tayo ng isang Feed sa Adafruit!

Ngayon na nakuha namin ang lahat ng kailangan namin, handa na kaming magsimulang magtayo! Una sa lahat kailangan naming lumikha ng isang feed sa Adafruit. Ang Adafruit ay isang serbisyo na ginagawang madali para sa amin na ikonekta ang aming Arduino sa internet at gumawa ng mga kapaki-pakinabang na tampok na remote control. Kung hindi mo pa nagagawa, mag-sign up para sa Adafruit.

Ngayon ay lumikha tayo ng isang bagong feed

Maaari naming pangalanan ang aming feed ng anumang gusto namin, tinatawag kong 'timer'.

Ang ginagawa ng isang feed ay itala ang lahat ng ginagawa namin sa aming dashboard (na lilikha namin sa loob lamang ng isang minuto) at ipadala ang data na iyon sa aming board, ngunit iyon ang isang bagay na titingnan namin sa sandaling mayroon kaming ipadala na data.

Hakbang 2: Ngayon Gumawa Tayo ng isang Dashboard.

Ngayon Gumawa Tayo ng isang Dashboard.
Ngayon Gumawa Tayo ng isang Dashboard.
Ngayon Gumawa Tayo ng isang Dashboard.
Ngayon Gumawa Tayo ng isang Dashboard.
Ngayon Gumawa Tayo ng isang Dashboard.
Ngayon Gumawa Tayo ng isang Dashboard.

Ngayon sa parehong paraan na gumawa kami ng isang feed, lilikha kami ng isang bagong Dashboard. Tatawagan ko ang aking dashboard: 'timer interface' dahil iyon talaga ang magiging dashboard namin: isang interface na may mga pindutan upang makontrol ang aming timer.

Hakbang 3: Kunin ang Aming Susi

Kunin ang aming Susi
Kunin ang aming Susi

Kung nais naming ikonekta ang aming Arduino sa aming feed kailangan naming makuha ang aming key ng Adafruit, ito ang iyong lihim na password na makasisiguro na ikaw lamang ang makakakonekta sa iyong mga feed.

Maaari mong makuha ang iyong susi sa pamamagitan ng pag-click sa dilaw na pindutan ng AIO Key sa kanang tuktok ng iyong screen sa Adafruit.

I-save ang key na ito sa kung saan, kakailanganin natin ito sa paglaon.

Huwag ibahagi ang iyong susi! Kung hindi man ang mga taong may masamang hangarin ay maaaring kumonekta sa iyong mga feed at aparato.

Hakbang 4: Buksan ang Halimbawa ng Basahin ang Feed

Buksan ang Halimbawa ng Basahin ang Feed
Buksan ang Halimbawa ng Basahin ang Feed

Ngayon buksan natin ang aming Arduino IDE at simulan ang mga coding proces. Una sa lahat kailangan naming magkaroon ng naka-install na Adafruit IO Arduino library.

Hindi alam kung paano mag-install ng mga aklatan? ito ay isang mahusay na gabay ng Adafruit: Arduino Library

Nag-aalok ang Adafruit ng maraming paunang ginawa na mga halimbawa para magamit namin at matuto mula. Isa sa mga halimbawang ito ay: adafruitio_21_feed_read. Mahahanap mo ang halimbawang ito dito: File - Mga Halimbawa Adafruit IO Arduino adafruitio_21_feed_read

(patawarin ang aking interface ng dutch sa imahe)

Hakbang 5: I-set up Natin ang aming Koneksyon

Kung matagumpay mong nabuksan ang sketch ng adafruitio_21_feed_read dapat kang makakita ng 2 mga tab sa iyong sketch: adafruitio_21_feed_read at config.h. Ang sketch na ito ay ginawa upang makakonekta kami sa feed na ginawa namin sa hakbang 1.

Upang kumonekta sa feed na ito kailangan naming punan ang ilang mga detalye tungkol sa aming WiFi at sa aming Adafruit account,

Maglakbay tayo sa config.h, dito pupunan natin ang mga sumusunod na detalye:

Ang iyong username ng Adafruit:

# tukuyin ang IO_USERNAME "joopert"

Ang iyong key ng Adafruit:

#define IO_KEY "1234567890abcdefghijklmnop"

Ang pangalan ng iyong WiFi:

# tukuyin ang WIFI_SSID "MyWifi"

At ang iyong password sa WiFi:

# tukuyin ang WIFI_PASS "aVerySecretPassword"

Bumalik tayo ngayon sa tab na adafruitio_21_feed_read at punan:

Ang iyong username ng Adafruit… muli:

# tukuyin ang FEED_OWNER "joopert"

At sa wakas ang iyong feedname (mula sa feed na ginawa namin sa hakbang 1):

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

Hakbang 6: Suriin ang Koneksyon sa Adafruit IO

Suriin ang Koneksyon sa Adafruit IO
Suriin ang Koneksyon sa Adafruit IO

Upang suriin kung ang mga hakbang na kinuha namin dati ay naisakatuparan nang tama, ilalagay namin ang aming sketch sa NodeMCU. Kung buksan mo ang iyong serial monitor, dapat itong magmukhang katulad ng larawan sa itaas. Ipinapakita sa iyo ng una ang serial monitor na sinusubukan nitong kumonekta sa iyong WiFi at sa Adafruit. kung kumpleto na dapat sabihin:

Nakakonekta ang Adafruit IO

Ito ay mahusay na balita! Maaari na kaming magsimulang magdagdag ng pag-andar sa aming timer …

Hakbang 7: Hinahayaan ang LED

Hinahayaan ang LED
Hinahayaan ang LED
Hinahayaan ang LED
Hinahayaan ang LED

Ngayon ay oras na upang i-on ang aming LED strip!

Ikonekta ang iyong LED strip sa D5 PIN (kung hindi mo makita ang D5 ikonekta ito sa isa pang PIN at baguhin ang LED_PIN sa code).

Tukuyin ang LED strip

Ang sumusunod na code ay idaragdag ang NeoPixel library (alamin ang higit pa tungkol sa library na ito dito: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) at tiyakin na alam ng aming Arduino kung saan ang aming LED strip at ilan ang ilaw nito. Kung ang iyong LED strip ay may iba't ibang mga pagtutukoy, baguhin ito sa code.

Idagdag ang sumusunod na code SA itaas ng walang bisa na pag-setup ():

// set up NeoPixel connection # isama ang #ifdef _AVR_ # isama ang #endif

#define LED_PIN D5 // Saan nakakonekta ang LED strip?

#define LED_COUNT 30 // Ilan ang mga pixel nito?

#define BRIGHTNESS 50 // NeoPixel brightness, 0 (min) to 255 (max)

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

Simulan ang LED strip

Ngayon ay sisimulan namin ang aming LED strip at itatakda ang ningning (ang ningning ay magmula sa 0 min hanggang 255 max, ngunit inirerekumenda ko ang 50 … 255 ay talagang maliwanag).

Idagdag ang sumusunod na code SA walang bisa na pag-setup ():

strip.begin (); // INITIALIZE NeoPixel strip object (REQUIRED) strip.show (); // OFF OFF all pixel ASAP strip.setBrightness (50); // Itakda ang KARAPATAN sa halos 1/5 (max = 255)

ledsOn (); // Tumatawag sa pagpapaandar upang i-on ang bawat LED nang paisa-isa

Buksan ang mga ilaw

Marahil napansin mo na na tumatawag kami ng isang pagpapaandar na wala pa, iyon ang aming susunod na bahagi ng pag-coding. Kung nais naming i-on ang aming mga ilaw kailangan naming lumikha ng isang 'para sa loop' na i-on ang bawat indibidwal na LED isa-isa (hindi alam kung ano ang para sa loop? Suriin ito dito: www.arduino.cc/referensi/ tl / wika / istraktura / control-istraktura / para /).

Ngayon ay lilikha namin ang pagpapaandar: ledsOn ();

Idagdag ang sumusunod na code BELOW void handleMessage ():

void ledsOn () {para (int i = 0; i <strip.numPixels (); i ++) {// Para sa bawat pixel sa strip… strip.setPixelColor (i, 0, 0, 255); // Itakda ang kulay ng pixel sa asul na strip.show (); // Update strip to match}}

Mag-upload

Ngayon ang kasiya-siyang bahagi, i-upload natin ang aming code sa NodeMCU … Kung gumagana ang lahat nang tama ang iyong LED strip ay dapat na ngayong ganap na maging asul!

Wala bang nagpapakita ng mga pixel ?: nakakonekta mo ang strip sa tamang PIN? O baka nawala ang iyong koneksyon sa internet.

Ang ilang mga pixel lamang ba ay hindi nagpapakita ?: suriin kung itinakda mo ang tamang dami ng mga pixel!

Hakbang 8: Idagdag ang Timing sa Timer

Ngayon ay titiyakin namin na ang aming timer ay talagang… mabuti … mga oras, isang bagay.

Mayroong iba't ibang mga paraan upang gawin ang tiyempo sa Arduino, ang isa ay pagkaantala (), ititigil nito ang pagproseso ng aming board para sa isang tinukoy na tagal ng panahon. Hindi namin ito gagamitin dahil ang aming Arduino ay karaniwang nagyeyelo habang naantala, at nais naming regular na mag-update ang aming board. Sa gayon gagamitin namin ang Millis (), ito ay isang mas matikas na paraan ng paggawa ng tiyempo sa Arduino, kasama si Millis () maaari pa rin tayong magpatakbo ng code sa pagitan ng mga agwat.

Kung interesado ka sa kung paano ito gumagana maaari mong suriin ang artikulong ito:

Idagdag natin ang code para sa Millis ():

Ilagay ang code na ito SA itaas ng void setup ()

unsigned matagal na nakaraangMillis = 0; // mag-iimbak ng huling oras na ang LED strip ay na-updateint interval = 1000; // agwat ng aming timer (milliseconds)

At ilagay natin ang code na ito SA void loop ():

unsigned long currentMillis = millis ();// simulan ang TIMER RYTHM ***** ********* kung (currentMillis - nakaraangMillis> = agwat) {nakaraangMillis = currentMillis;

// pagtatapos TIMER RYTHM ***** **** *****

Ang ginawa lang namin ay lumikha ng isang rythm para sa aming LED strip upang i-off ang mga LED, sa susunod na hakbang ay idaragdag namin ang code upang magawa iyon.

Hakbang 9: Countdown

Sa hakbang na ito: gagawa kami ng isang pag-andar na matiyak na bawat segundo (o anumang agwat na itinakda mo) ay pinapatay namin ang ONE LED sa dulo ng strip hanggang sa ang lahat ng aming mga LED ay naka-off.

Lilikha kami ng isang 'int' sa tuktok na tinatawag na 'leds'. Sasabihin nito sa paglaon sa aming timer kung gaano karaming mga leds ang kailangan pa nitong patayin.

Idagdag ang sumusunod na code SA itaas ng walang bisa na pag-setup ():

int leds = LED_COUNT-1; // tels kung gaano karaming mga pixel ang dapat na naiilawan

Ngayon idagdag natin ang function na 'timer ();', papatayin nito ang isang ilaw bawat segundo

Idagdag ang sumusunod na code BELOW the void ledsOn ():

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

kung (leds> -1) {leds--; } iba pa {blinkie (); }}

Nais naming magbigay ng ilang puna sa gumagamit na ang timer ay tapos na matapos ang lahat ng mga ilaw ay nasunog. Gamit ang 'blinkie ();' ang mga LED ay magpapikit pula matapos ang timer ay tapos na!

Idagdag ang sumusunod na code SA ITAAS ang walang bisa na pag-setup ():

int blinkStatus = 1; // says the blinkie (); pagpapaandar ng basa ang ilaw ay dapat na patayin o patayin

Idagdag ang sumusunod na code BELOW the void timer ():

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

blinkStatus = 0; strip.clear (); } iba pa {blinkStatus = 1; para sa (int i = 0; i <strip.numPixels (); i ++) {// Para sa bawat pixel sa strip… strip.setPixelColor (i, 255, 0, 0); // Itakda ang kulay ng pixel (sa RAM) na strip.show (); // Update strip upang maitugma}}}}

Sa wakas kailangan nating tawagan ang pagpapaandar sa aming void loop ();, Naaalala ang TIMER RYTHM na idinagdag namin sa hakbang 8? Sa ito kung pahayag tatawagin namin ang function timer ();.

Ang TIMER RYTHM ay dapat magmukhang ganito:

// simulan ang TIMER RYTHM ***** *********

kung (currentMillis - nakaraangMillis> = agwat) {nakaraangMillis = currentMillis; timer (); strip.show ();} // pagtatapos ng TIMER RYTHM ***** ***** *****

Ngayon i-upload ang code na ito!

Sa ngayon ang iyong LED strip ay dapat na patayin ang 1 LED bawat segundo at kumurap pula kapag tapos na ito …

Ngayon gawin nating remote control ang motherlover na ito!

Hakbang 10: Gawin itong Remote Controlled: Bahagi I

Gawin itong Remote Controlled: Bahagi I
Gawin itong Remote Controlled: Bahagi I
Gawin itong Remote Controlled: Bahagi I
Gawin itong Remote Controlled: Bahagi I

Nakuha namin ang aming timer, lahat iyon ay mabuti at masarap ngunit ipinangako ko sa iyo na makokontrol mo ito sa iyong telepono di ba? Ipasok natin ang pangwakas na yugto ng aming proyekto: ginagawang remote control ang aming timer.

Nabuksan mo pa rin ang iyong tab na Adafruit? Maglakbay tayo upang bumalik sa io.adafruit.com at pumunta tayo sa aming dashboard ng interface ng interface at lumikha ng isang bagong bloke: TOGGLE

  1. Ikonekta ang toggle sa feed ng TIMER
  2. Itakda ang halaga na ON sa: 1
  3. Itakda ang halaga na OFF sa: 0

Ang dahilan para dito ay hindi nagpapadala ang Adafruit ng data ng teksto sa aming NodeMCU, ngunit mga numero lamang.

Maaari mo ring bigyan ang Toggle ng isang pangalan kung gusto mo, marahil: 'On / Off switch'

Ngayon bumalik tayo sa Arduino IDE

Upang matiyak lamang na napapanahon ang aming code, mag-UPLOAD ulit tayo ng ating code.

BUKSAN ANG SERIAL MONITOR sa sandaling tapos na ang pag-upload at pindutin ang TOGGLE sa aming Adafruit dashboard ng ilang beses. Dapat ay nakakakita na kami ngayon ng isang bagay tulad nito na lumalabas sa aming serial monitor:

natanggap <- 0tanggap <- 1 natanggap <- 0 natanggap <- 1 natanggap <- 0

Nangangahulugan ito na maaari talaga kaming magpadala ng mga kontrol sa aming NodeMCU!

Kung hindi mo natatanggap ang mga mensaheng ito, suriin kung ang iyong Data ng Adafruit sa iyong config.h ay tama pa rin.

Hakbang 11: Gawin itong Remote Controlled: Bahagi II

Ngayon ang natitira lamang ay ang paggawa ng isang bagay sa aming mga natanggap na kontrol.

Upang magawa iyon kailangan nating baguhin ang aming TIMER RYTHM kung pahayag sa void loop (); kaunti lamang.

Sasabihin namin sa aming NodeMCU na dapat lamang nitong simulan ang timer sa sandaling natanggap namin ang '1' (na nangangahulugang: ON) mula sa Adafruit.

Kolektahin muna natin ang data na ipinapadala sa amin ng Adafruit

Idagdag ang sumusunod na code SA itaas ng walang bisa na pag-setup ():

int adaData; // kinokolekta ang data na ipinadala sa amin ng AdaFruit

Talagang kolektahin natin ang data na iyon

Idagdag ang sumusunod na code SA LOOB ng void handleMessage ():

adaData = data-> toInt ();

Baguhin natin ang ating void loop ();

Ang TIMER RYTHM ay dapat magmukhang ganito:

// simulan ang TIMER RYTHM ***** ********* kung (currentMillis - nakaraangMillis> = agwat) {nakaraangMillis = currentMillis; kung (adaData == 0) {Serial.println ("im not running"); } iba pa kung (adaData == 1) {timer (); } strip.show (); } // pagtatapos TIMER RYTHM ***** *****

I-UPLOAD ang iyong code…

Ngayon ay dapat mong i-on at i-off ang timer sa pamamagitan ng paggamit ng switch sa Adafruit!

Hakbang 12: Maglaro sa Paikot! Tapos Na… o Tayo Na?

Sa ngayon dapat kang magkaroon ng isang ganap na paggana ng remote timer! Kung ito ang para sa iyo pagkatapos ay salamat sa pagsama sa proyektong ito!

Kung nais mong magpatuloy nang medyo mas mahaba, sa mga susunod na hakbang ay nagdaragdag kami ng isang pindutang I-reset para sa aming timer!

Hakbang 13: EXTRA: Lumikha ng Button na Sandali

EXTRA: Lumikha ng Momentary Button
EXTRA: Lumikha ng Momentary Button

Bumalik tayo sa aming dashboard. Ngayon nais naming lumikha ng isang BAGONG BLOCK.

  1. Lumikha ng isang pindutang Sandali
  2. Ikonekta ito sa feed na 'timer'
  3. Itakda ang halaga ng pindutin sa: 2
  4. TANGGALIN ang halaga ng paglabas
  5. Bigyan ito ng magandang kulay!

Maginhawa ang panandaliang pindutan ay tinatawag na 'I-reset'!

Kapag nagawa mo na ang block na ito ay subukin ito, gagana ang pindutan kung natanggap mo:

natanggap <- 2

Sa iyong serial monitor.

Kung hindi mo nakikita ang mensaheng ito, subukang muling i-upload ang sketch

Hakbang 14: EXTRA: Idagdag ang I-reset ang Function

Upang gawin ang pindutang pag-reset gawin ang anumang kailangan namin upang magdagdag ng isang pagpapaandar na i-reset ang lahat ng mga LED pabalik sa orihinal na estado.

Idagdag ang sumusunod na code BELOW the void blinkie ():

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

Ngayon ang natitira lamang ay ang pagtawag sa aming pag-andar, para doon kailangan nating baguhin ang TIMER RYTHM sa huling pagkakataon

Ang TIMER RYTHM ay dapat magmukhang ganito:

// simulan ang TIMER RYTHM ***** ********* kung (currentMillis - nakaraangMillis> = agwat) {nakaraangMillis = currentMillis kung (adaData == 0) {Serial.println ("hindi ako tumatakbo"); } iba pa kung (adaData == 1) {timer (); } iba pa kung (adaData == 2) {rerun (); } strip.show (); } // pagtatapos TIMER RYTHM ***** *****

I-UPLOAD ang iyong code…

Ngayon ay dapat mo ring ma-reset ang timer sa pamamagitan ng pagpindot sa pindutan!

Inirerekumendang: