Mündəricat:

NodeMCU ilə Uzaqdan İdarə olunan Taymer: 14 Addım
NodeMCU ilə Uzaqdan İdarə olunan Taymer: 14 Addım

Video: NodeMCU ilə Uzaqdan İdarə olunan Taymer: 14 Addım

Video: NodeMCU ilə Uzaqdan İdarə olunan Taymer: 14 Addım
Video: Introduction to Heltec LoRa CubeCell Development Board HTCC-AB01 2024, Iyul
Anonim
NodeMCU ilə Uzaqdan İdarə olunan Taymer
NodeMCU ilə Uzaqdan İdarə olunan Taymer

Burada bir NodeMCU və Adafruit istifadə edərək bir taymer yaradacağıq. Taymerimizi LED şeridi ilə göstərəcəyik və telefonumuzdan və ya kompüterimizdən istifadə edərək idarə edə biləcəyik!

Bizim məqsədimiz:

Bir LED şeridi istifadə edərək bir taymer yaradın: telefonumuzdan və ya kompüterimizdən istifadə edərək başladın, dayandırın və sıfırlayın.

Təchizat

Avadanlıq:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel LED şeridi

Kitabxanalar:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Digər:

Yaxşı bir WiFi bağlantısı

Addım 1: Gəlin Adafruit -də Feed yaradaq

Adafruit -də Feed yaradaq!
Adafruit -də Feed yaradaq!

İndi ehtiyacımız olan hər şeyi əldə etdikdən sonra tikintiyə başlamağa hazırıq! Əvvəlcə Adafruit -də bir yem yaratmalıyıq. Adafruit, Arduinomuzu internetə bağlamağı və uzaqdan idarə olunan faydalı xüsusiyyətlər yaratmağı həqiqətən asanlaşdıran bir xidmətdir. Hələ etməmisinizsə, Adafruit -ə üzv olun.

İndi yeni bir feed yaradaq

İstədiyimiz yemi adlandıra bilərik, buna 'taymer' deyirəm.

Bir yemin etdiyi şey, tablosumuzda etdiyimiz hər şeyi (yalnız bir dəqiqə ərzində yaradacağıq) qeyd etmək və bu məlumatları lövhəmizə göndərməkdir, ancaq göndəriləcək məlumatları əldə etdikdən sonra baxacağıq.

Addım 2: İndi bir Tablosu hazırlayaq

İndi tablosunu hazırlayaq
İndi tablosunu hazırlayaq
İndi tablosunu hazırlayaq
İndi tablosunu hazırlayaq
İndi tablosunu hazırlayaq
İndi tablosunu hazırlayaq

İndi bir feed hazırladığımız kimi, yeni bir Tablosuna da yaradacağıq. Tablosuna zəng edəcəyəm: 'timer interfeysi', çünki tablosumuzun əsası belə olacaq: timerimizi idarə etmək üçün düymələri olan bir interfeys.

Addım 3: Açarımızı əldə edin

Açarımızı əldə edin
Açarımızı əldə edin

Arduinomuzu yemimizə bağlamaq istəsək, Adafruit açarımızı almalıyıq, bu, yalnız sizin yemlərinizə qoşula biləcəyinizə əmin olacaq gizli şifrənizdir.

Adafruit -də ekranınızın sağ üst tərəfindəki sarı AIO düyməsini basaraq açarınızı əldə edə bilərsiniz.

Bu açarı bir yerdə saxla, sonra ehtiyacımız olacaq.

Açarınızı paylaşmayın! Əks təqdirdə pis niyyətli insanlar lentinizə və cihazlarınıza qoşula bilər.

Addım 4: Feed Read nümunəsini açın

Feed Oxuma nümunəsini açın
Feed Oxuma nümunəsini açın

İndi Arduino IDE -ni açaq və kodlaşdırma prosesinə başlayaq. İlk növbədə Adafruit IO Arduino kitabxanasını quraşdırmalıyıq.

Kitabxanaları necə quracağınızı bilmirsiniz? bu Adafruit: Arduino Kitabxanaları tərəfindən əla bir bələdçidir

Adafruit, istifadə etməyimiz və öyrənməyimiz üçün bir çox əvvəlcədən hazırlanmış nümunələr təqdim edir. Bu nümunələrdən biri: adafruitio_21_feed_read. Bu nümunəni burada tapa bilərsiniz: Fayl - Nümunələr Adafruit IO Arduino adafruitio_21_feed_read

(şəkildəki Hollandiya interfeysini bağışlayın)

Addım 5: Əlaqəmizi quraq

Adafruitio_21_feed_read eskizini uğurla açmısınızsa, eskizinizdə 2 nişan görməli olacaqsınız: adafruitio_21_feed_read və config.h. Bu eskiz, 1 -ci addımda hazırladığımız yemə qoşula biləcəyimiz üçün hazırlanmışdır.

Bu yemə qoşulmaq üçün WiFi və Adafruit hesabımız haqqında bir neçə detal doldurmalıyıq.

Config.h saytına səyahət edək, burada aşağıdakı detalları dolduracağıq:

Adafruit istifadəçi adınız:

#oOUSERNAME "joopert" i təyin edin

Adafruit açarınız:

#IO_KEY "1234567890abcdefghijklmnop" təyin edin

WiFi -nin adı:

#WIFI_SSID "MyWifi" ni təyin edin

Və WiFi şifrəniz:

#aIFI_PASS "aVerySecretPassword" təyin edin

İndi adafruitio_21_feed_read sekmesine qayıdaq və dolduraq:

Adafruit istifadəçi adınız… yenə:

#FEED_OWNER "joopert" ni təyin edin

Və nəhayət feed adınız (1 -ci addımda hazırladığımız lentdən):

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

Addım 6: Adafruit IO ilə əlaqəni yoxlayın

Adafruit IO ilə Əlaqəni yoxlayın
Adafruit IO ilə Əlaqəni yoxlayın

Əvvəllər atdığımız addımların düzgün yerinə yetirildiyini yoxlamaq üçün eskizimizi NodeMCU -ya yükləyəcəyik. Serial monitörünüzü açarsanız, yuxarıdakı şəkilə bənzəməlidir. Əvvəlcə serial monitor sizə WiFi və Adafruit -ə qoşulmağa çalışdığını göstərir. tamam olarsa deməlidir:

Adafruit IO qoşulub

Bu əla xəbərdir! İndi sayğacımıza funksionallıq əlavə etməyə başlaya bilərik …

Addım 7: LED -ə icazə verin

LED -ə icazə verin
LED -ə icazə verin
LED -ə icazə verin
LED -ə icazə verin

İndi LED şeridimizi açmağın vaxtı gəldi!

LED şeridinizi D5 PİN -ə qoşun (əgər D5 -i başqa bir PİN -ə qoşa bilmirsinizsə və kodda LED_PİN -i dəyişirsinizsə).

LED şeridini təyin edin

Aşağıdakı kod NeoPixel kitabxanasını əlavə edəcək (bu kitabxana haqqında daha çox məlumatı buradan əldə edin: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) və Arduino-nun LED şeridimizin harada olduğunu bildiyinə əmin olun. neçə işıq var. LED şeridinizin fərqli xüsusiyyətləri varsa, onu kodda dəyişdirin.

Yuxarıdakı void setup () kodunu əlavə edin:

// NeoPixel bağlantısı qurun #include #ifdef _AVR_ #include #endif

#define LED_PIN D5 // LED şeridi haraya bağlıdır?

#define LED_COUNT 30 // Neçə pikseli var?

#define BRIGHTNESS 50 // NeoPixel parlaqlığı, 0 (dəq) - 255 (maksimum)

Adafruit_NeoPixel zolağı (LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

LED şeridini işə salın

İndi LED şeridimizi işə salacağıq və parlaqlığı təyin edəcəyik (parlaqlıq 0 dəqiqədən 255 -ə qədərdir, amma 50… 255 -in həqiqətən parlaq olduğunu məsləhət görürəm).

Void setup () -a aşağıdakı kodu əlavə edin:

strip.begin (); // NeoPixel zolaq obyektini (TƏLƏB EDİR) strip.show () başlatın; // ASAP strip.setBrightness (50) ən qısa zamanda bütün pikselləri söndürün; // BRIGHTNESS -i təxminən 1/5 (maksimum = 255) olaraq təyin edin

ledsOn (); // Hər LED -i tək -tək açmaq üçün funksiyanı çağırır

İşıqları yandırın

Ola bilsin ki, hələ mövcud olmayan bir funksiyanı çağırdığımızı, bu kodlaşdırmanın növbəti hissəmiz olacaq. İşıqlarımızı yandırmaq istəyiriksə, hər bir LED -i tək -tək yandıran bir 'for loop' yaratmalıyıq (for loopun nə olduğunu bilmirsiniz? Bura baxın: www.arduino.cc/reference/ en/dil/quruluş/nəzarət-quruluş/üçün/).

İndi funksiyanı yaradacağıq: ledsOn ();

Aşağıdakı void handleMessage () kodunu əlavə edin:

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Şeriddəki hər piksel üçün… strip.setPixelColor (i, 0, 0, 255); // Pikselin rəngini mavi zolaq olaraq təyin edin.show (); // Zolağı uyğunlaşdırın}}

Yükləmək

İndi əyləncəli hissədir, kodumuzu NodeMCU -ya yükləyək … Hər şey düzgün işləyirsə, LED şeridiniz artıq tamamilə mavi rəngə çevrilməlidir!

Heç bir piksel görünmür ?: zolağı doğru PİN -ə bağlamısınız? Yoxsa internet bağlantınız kəsildi.

Yalnız bəzi piksellər görünmür ?: Düzgün piksel miqdarını təyin edib etmədiyinizi yoxlayın!

Adım 8: Zamanlayıcıya Zamanlama əlavə edin

İndi əmin olacağıq ki, taymerimiz əslində … yaxşı… dəfə, bir şey.

Arduino ilə vaxt qurmağın fərqli yolları var, biri gecikmədir (), bu da lövhəmizin işlənməsini müəyyən bir müddətə dayandırır. Arduino gecikmə əsnasında dondurduğundan bunu istifadə etməyəcəyik və lövhəmizin mütəmadi olaraq yenilənməsini istəyirik. Millis () istifadə edəcəyik, bu, Arduino'da vaxt qurmağın daha zərif bir yoludur, Millis () ilə yenə də aralıqlar arasında kod işlədə bilərik.

Bunun necə işlədiyi ilə maraqlanırsınızsa, bu məqaləyə baxa bilərsiniz:

Millis () kodunu əlavə edək:

Bu kodu void setup -ın üstünə qoyun ()

işarəsiz uzun əvvəlkiMillis = 0; // LED şeridi son dəfə yenilənəndə saxlayacaq interval = 1000; // taymerimizin aralığı (milisaniyə)

Və bu kodu boşluq döngəsinə () qoyaq:

işarəsiz uzun cariMillis = millis ();// TAYMER RİTMİNƏ başla ******************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// TAYMER RİTMİNİ bitirin ******************************************* ***********

Etdiyimiz şey, LED şeritimizin LEDləri söndürməsi üçün bir ritm yaratmaq idi, növbəti addımda bunun üçün kodu əlavə edəcəyik.

Addım 9: Geri sayma

Bu addımda: bütün LEDlərimiz sönənə qədər hər bir saniyədə (və ya təyin etdiyiniz hər hansı bir aralıqda) zolağın sonunda BİR LED -i söndürdüyümüzə əmin olacağımız bir funksiya edəcəyik.

Yuxarıda 'leds' adlanan 'int' yaradacağıq. Bu daha sonra taymerimizə hələ də neçə ledin söndürülməli olduğunu söyləyəcək.

Yuxarıdakı void setup () kodunu əlavə edin:

int leds = LED_COUNT-1; // neçə pikselin yandırılması lazım olduğunu bildirir

İndi 'timer ();' funksiyasını əlavə edək, bu hər saniyədə bir işığı söndürəcək

Aşağıdakı kodu void ledsOn () altına əlavə edin:

void timer () {strip.setPixelColor (ledlər, 0, 0, 0);

if (leds> -1) {leds--; } başqa {blinkie (); }}

İstifadəçiyə taymerin bütün işıqlar yandıqdan sonra edildiyini bildirmək istəyirik. 'Blinkie ();' ilə Taymer bitdikdən sonra LEDlər qırmızı yanıb -sönəcək!

Yuxarıdakı void setup () kodunu əlavə edin:

int blinkStatus = 1; // göz qırpımını söyləyir (); işığın yandırılması və ya söndürülməsi zamanı

Void timer () altına aşağıdakı kodu əlavə edin:

boş blinkie () {if (blinkStatus == 1) {

blinkStatus = 0; strip.clear (); } başqa {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Şeriddəki hər piksel üçün… strip.setPixelColor (i, 255, 0, 0); // Pikselin rəngini təyin edin (RAM -da) strip.show (); // Şeridi uyğunlaşdırın}}}}

Nəhayət, boşluq döngəmizdəki funksiyanı çağırmalıyıq ();, 8 -ci addımda əlavə etdiyimiz TİMER RİTMİ yadınızdadırmı? Bu if ifadəsində timer () funksiyasını çağıracağıq.

TIMER RYTHM indi belə görünməlidir:

// TAYMER RİTMİNƏ başlayın ******************************************* *********

if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; taymer (); strip.show ();} // TIMER RYTHM -i bitirin ************************************ ******************

İndi bu kodu yükləyin!

Hal -hazırda LED şeridiniz hər saniyədə 1 LED -i söndürməli və bitdikdə qırmızı yanıb -sönməlidir …

İndi gəlin bu ana sevgisini uzaqdan idarə edək!

Addım 10: Uzaqdan idarə olun: I hissə

Uzaqdan idarə olun: I hissə
Uzaqdan idarə olun: I hissə
Uzaqdan idarə olun: I hissə
Uzaqdan idarə olun: I hissə

Taymerimiz var, hər şey qaydasındadır, amma söz verdim ki, bunu telefonunuzla idarə edə biləcəksiniz? Layihəmizin son mərhələsinə daxil olaq: Taymeri uzaqdan idarə etmək.

Adafruit nişanınız hələ də açıqdır? Gəlin io.adafruit.com saytına qayıdaq və timer interfeys tablosuna gedək və yeni bir blok yaradaq: TOGGLE

  1. Keçidi TIMER yeminə qoşun
  2. ON dəyərini təyin edin: 1
  3. OFF dəyərini təyin edin: 0

Bunun səbəbi, Adafruit -in NodeMCU -ya mətn məlumatları göndərməməsi, ancaq nömrələrdir.

İstəsəniz, Toggle -a da bir ad verə bilərsiniz, bəlkə də: 'Açma/Kapama açarı'

İndi Arduino IDE -yə qayıdaq

Kodumuzun güncəl olduğundan əmin olmaq üçün kodumuzu bir daha YÜKLƏYƏCƏK.

Yükləmə tamamlandıqdan sonra SERİ MONİTÖRÜNÜ AÇIN və Adafruit tablosuna TOGGLE düyməsini bir neçə dəfə basın. İndi serial monitorumuzda belə bir şeyin ortaya çıxdığını görməliyik:

alındı <- 0 alındı <- 1 alındı <- 0 alındı <- 1 alındı <- 0

Bu o deməkdir ki, həqiqətən NodeMCU -ya idarəetmə göndərə bilərik!

Bu mesajları almırsınızsa, config.h -dəki Adafruit Məlumatlarınızın hələ də düzgün olub olmadığını yoxlayın.

Addım 11: Uzaqdan idarə olun: II hissə

İndi geriyə qalan yalnız alınan nəzarətlərimizlə bir şey etməkdir.

Bunu etmək üçün, void loop () ifadəsindəki TIMER RYTHM -ni dəyişdirməliyik; bir az.

NodeMCU -ya, Adafruit -dən '1' (yəni AÇIQ) aldığımız zaman sayğacın işə salınacağını söyləyəcəyik.

Əvvəlcə Adafruit -in bizə göndərdiyi məlumatları toplayaq

Yuxarıdakı void setup () kodunu əlavə edin:

int adaData; // AdaFruit -in bizə göndərdiyi məlumatları toplayır

İndi gəlin bu məlumatları toplayaq

Void handleMessage () daxilinə aşağıdakı kodu əlavə edin:

adaData = data-> toInt ();

Void loopumuzu dəyişdirək ();

TIMER RYTHM indi belə görünməlidir:

// TAYMER RİTMİNƏ başla ******************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; əgər (adaData == 0) {Serial.println ("işləmirəm"); } başqa if (adaData == 1) {timer (); } strip.show (); } // ZAMAN RİTMİNİ bitirin ****************************************** ************

Kodunuzu YÜKLƏ …

İndi Adafruit -dəki açarı istifadə edərək taymeri aça və söndürə bilməlisiniz!

Addım 12: Ətrafda oynayın! Bitirdik … yoxsa biz mi?

Hal -hazırda tam işləyən uzaq bir taymeriniz olmalıdır! Bu sizin üçündürsə, bu layihə ilə birlikdə gəldiyiniz üçün təşəkkür edirik!

Bir az daha davam etmək istəyirsinizsə, növbəti bir neçə addımda timerimiz üçün RESET düyməsini əlavə edəcəyik!

Addım 13: ƏLAVƏ: Anlıq Düymə yaradın

ƏLAVƏ: Bir anlıq düymə yaradın
ƏLAVƏ: Bir anlıq düymə yaradın

İdarə panelimizə qayıdaq. İndi yenidən yeni bir blok yaratmaq istəyirik.

  1. Bir anlıq düymə yaradın
  2. 'Taymer' lentinə qoşun
  3. Mətbuat dəyərini təyin edin: 2
  4. Buraxılış dəyərini silin
  5. Gözəl bir rəng verin!

Əlverişli anlıq düyməyə artıq 'Sıfırla' deyilir!

Bu bloku yaratdıqdan sonra test edin, alsanız düymə işləyir:

alındı <- 2

Serial monitorunuzda.

Bu mesajı görmürsünüzsə, eskizi yenidən yükləməyə çalışın

Addım 14: ƏLAVƏ: Sıfırlama funksiyasını əlavə edin

Sıfırlama düyməsini bir şey etmək üçün bütün LED -ləri orijinal vəziyyətinə qaytaran bir funksiya əlavə etməliyik.

Void blinkie () altına aşağıdakı kodu əlavə edin:

void təkrar () {leds = LED_COUNT; ledsOn (); }

İndi qalan yalnız funksiyamızı çağırmaqdır, bunun üçün TIMER RYTHM -i son dəfə dəyişdirməliyik

TIMER RYTHM indi belə görünməlidir:

// TAYMER RİTMİNƏ başlayın ******************************************* ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("işləmir"); } başqa if (adaData == 1) {timer (); } if if (adaData == 2) {rerun (); } strip.show (); } // ZAMAN RİTMİNİ bitirin ****************************************** ************

Kodunuzu YÜKLƏ …

İndi düyməni basaraq taymeri sıfırlaya bilməlisiniz!

Tövsiyə: