İçindekiler:

NodeMCU ile Uzaktan Kontrollü Zamanlayıcı: 14 Adım
NodeMCU ile Uzaktan Kontrollü Zamanlayıcı: 14 Adım

Video: NodeMCU ile Uzaktan Kontrollü Zamanlayıcı: 14 Adım

Video: NodeMCU ile Uzaktan Kontrollü Zamanlayıcı: 14 Adım
Video: ESP8266 NodeMCU Nedir, Nasıl Kullanılır? Örnek Web Server Projesi ve Arduino ile Kıyaslama 2024, Temmuz
Anonim
NodeMCU ile Uzaktan Kontrollü Zamanlayıcı
NodeMCU ile Uzaktan Kontrollü Zamanlayıcı

Burada bir NodeMCU ve Adafruit kullanarak bir zamanlayıcı oluşturacağız. Zamanlayıcımızı bir LED şerit ile görüntüleyeceğiz ve onu telefonumuzu veya bilgisayarımızı kullanarak kontrol edebileceğiz!

Hedefimiz:

Yapabileceğimiz bir LED şerit kullanarak bir zamanlayıcı oluşturun: telefonumuzu veya bilgisayarımızı kullanarak başlatabilir, duraklatabilir ve sıfırlayabiliriz.

Gereçler

Donanım:

  • DüğümMCU ESP 8266
  • Adafruit NeoPixel LED şerit

Kütüphaneler:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Başka:

İyi bir WiFi bağlantısı

Adım 1: Adafruit'te Feed Oluşturalım

Adafruit'te Feed Oluşturalım!
Adafruit'te Feed Oluşturalım!

Artık ihtiyacımız olan her şeye sahip olduğumuza göre, inşaata başlamaya hazırız! Öncelikle Adafruit'te bir feed oluşturmalıyız. Adafruit, Arduino'muzu internete bağlamamızı ve kullanışlı uzaktan kumandalı özellikler yapmamızı gerçekten kolaylaştıran bir hizmettir. Henüz yapmadıysanız, Adafruit'e kaydolun.

Şimdi yeni bir besleme oluşturalım

Feed'imize istediğimiz ismi verebiliriz, ben buna 'zamanlayıcı' diyorum.

Bir feed'in yaptığı, yaptığımız her şeyi kontrol panelimize kaydetmek (bir dakika içinde oluşturacağımız) ve bu verileri panomuza göndermektir, ancak bu, gönderilecek verilerimiz olduğunda bakacağımız bir şeydir.

Adım 2: Şimdi Bir Dashboard Yapalım.

Şimdi Bir Dashboard Yapalım.
Şimdi Bir Dashboard Yapalım.
Şimdi Bir Dashboard Yapalım.
Şimdi Bir Dashboard Yapalım.
Şimdi Bir Dashboard Yapalım.
Şimdi Bir Dashboard Yapalım.

Şimdi bir feed oluşturduğumuz gibi yeni bir Dashboard oluşturacağız. Kontrol panelimi arayacağım: 'zamanlayıcı arayüzü' çünkü temel olarak kontrol panelimiz böyle olacak: zamanlayıcımızı kontrol etmek için düğmelerin bulunduğu bir arayüz.

3. Adım: Anahtarımızı Alın

Anahtarımızı Alın
Anahtarımızı Alın

Arduino'muzu feed'imize bağlamak istiyorsak Adafruit anahtarımızı almamız gerekiyor, bu sizin feed'lerinize yalnızca sizin bağlanabilmenizi sağlayacak gizli şifreniz.

Adafruit'te ekranın sağ üst köşesindeki sarı renkli AIO Key butonuna tıklayarak anahtarınızı alabilirsiniz.

Bu anahtarı bir yere kaydedin, daha sonra ihtiyacımız olacak.

Anahtarınızı paylaşmayın! Aksi takdirde, kötü niyetli kişiler yayınlarınıza ve cihazlarınıza bağlanabilir.

4. Adım: Feed Okuma Örneği'ni açın

Feed Okuma Örneği'ni açın
Feed Okuma Örneği'ni açın

Şimdi Arduino IDE'mizi açalım ve kodlama işlemlerine başlayalım. Öncelikle Adafruit IO Arduino kütüphanesini kurmamız gerekiyor.

Kitaplıkları nasıl kuracağınızı bilmiyor musunuz? bu Adafruit'ten harika bir rehber: Arduino Kütüphaneleri

Adafruit, kullanmamız ve öğrenmemiz için önceden hazırlanmış birçok örnek sunuyor. Bu örneklerden biri: adafruitio_21_feed_read. Bu örneği burada bulabilirsiniz: Dosya - Örnekler Adafruit IO Arduino adafruitio_21_feed_read

(görseldeki hollandalı arayüzümü mazur görün)

Adım 5: Bağlantımızı Kuralım

adafruitio_21_feed_read çizimini başarıyla açtıysanız, çiziminizde 2 sekme görüyor olmalısınız: adafruitio_21_feed_read ve config.h. Bu eskiz, 1. adımda yaptığımız feed'e bağlanabilmemiz için yapılmıştır.

Bu feed'e bağlanmak için WiFi ve Adafruit hesabımız hakkında birkaç ayrıntıyı doldurmamız gerekiyor,

Şimdi config.h'ye gidelim, burada aşağıdaki ayrıntıları dolduracağız:

Adafruit kullanıcı adınız:

#define IO_USERNAME "joopert"

Adafruit anahtarınız:

#define IO_KEY "1234567890abcdefghijklmnop"

WiFi'nizin adı:

#define WIFI_SSID "MyWifi"

Ve WiFi şifreniz:

#define WIFI_PASS "aVerySecretPassword"

Şimdi adafruitio_21_feed_read sekmesine geri dönelim ve dolduralım:

Adafruit kullanıcı adınız… tekrar:

#define FEED_OWNER "joopert"

Ve son olarak feed adınız (1. adımda oluşturduğumuz feed'den):

AdafruitIO_Feed *sharedFeed = io.feed("zamanlayıcı", FEED_OWNER);

Adım 6: Adafruit IO Bağlantısını Kontrol Edin

Adafruit IO Bağlantısını Kontrol Edin
Adafruit IO Bağlantısını Kontrol Edin

Daha önce attığımız adımların doğru uygulanıp uygulanmadığını kontrol etmek için çizimimizi NodeMCU'ya yükleyeceğiz. Seri monitörünüzü açarsanız, yukarıdaki resimdeki gibi görünmelidir. İlk olarak, seri monitör size WiFi'nize ve Adafruit'e bağlanmaya çalıştığını gösteriyor. bu tamamlandıysa şunu söylemelidir:

Adafruit IO bağlandı

Bu harika bir haber! Artık zamanlayıcımıza işlevsellik eklemeye başlayabiliriz…

Adım 7: LED'e izin verin

LED sağlar
LED sağlar
LED sağlar
LED sağlar

Şimdi LED şeridimizi açma zamanı!

LED şeridinizi D5 PIN'ine bağlayın (D5'i bulamıyorsanız, başka bir PIN'e bağlayın ve koddaki LED_PIN'i değiştirin).

LED şeridi tanımlayın

Aşağıdaki kod NeoPixel kitaplığını ekleyecektir (buradan bu kitaplık hakkında daha fazla bilgi edinin: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) ve Arduino'muzun LED şeridimizin nerede olduğunu ve nerede olduğunu bildiğinden emin olun. kaç ışığı var. LED şeridinizin farklı özellikleri varsa, kodda değiştirin.

void setup() öğesinin ÜZERİNE aşağıdaki kodu ekleyin:

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

#define LED_PIN D5 // LED şerit nereye bağlı?

#define LED_COUNT 30 // Kaç pikseli var?

#define PARLAKLIK 50 // NeoPixel parlaklık, 0 (min) - 255 (maks)

Adafruit_NeoPixel şeridi(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

LED şeridi başlat

Şimdi LED şeridimizi çalıştıracağız ve parlaklığı ayarlayacağız (parlaklık 0 dakikadan 255 maks'a çıkıyor, ama tavsiye ederim 50… 255 GERÇEKTEN parlak).

void setup() içine aşağıdaki kodu ekleyin:

strip.begin(); // INITIALIZE NeoPixel şerit nesnesi (GEREKLİ)strip.show(); // En kısa sürede tüm pikselleri KAPATIN strip.setBrightness(50); // PARLAKLIK'ı yaklaşık 1/5'e ayarlayın (maks = 255)

ledsOn(); // Her bir LED'i tek tek açmak için işlevi çağırır

Işıkları aç

Belki de henüz var olmayan bir işlevi çağırdığımızı fark etmişsinizdir, bu kodlamanın bir sonraki bölümü olacaktır. Işıklarımızı açmak istiyorsak, her bir LED'i tek tek açan bir 'for döngüsü' oluşturmalıyız (for döngüsünün ne olduğunu bilmiyor musunuz? Buradan kontrol edin: www.arduino.cc/reference/ tr/dil/yapı/kontrol yapısı/için/).

Şimdi fonksiyonu yaratacağız: ledsOn();

AŞAĞIDAKİ void handleMessage() kodunu ekleyin:

void ledsOn() { for (int i = 0; i < strip.numPixels(); i++) { // Stripteki her piksel için… strip.setPixelColor(i, 0, 0, 255); // Pikselin rengini mavi strip.show(); // Şeridi } } ile eşleşecek şekilde güncelle

Yüklemek

Şimdi eğlenceli kısım, kodumuzu NodeMCU'ya yükleyelim… Her şey doğru çalışıyorsa, LED şeridiniz şimdi tamamen maviye dönmelidir!

Hiç piksel görünmüyor mu?: şeridi doğru PIN'e bağladınız mı? Ya da internet bağlantınız kopmuş olabilir.

Yalnızca bazı pikseller mi görünmüyor?: Doğru piksel miktarını ayarlayıp ayarlamadığınızı kontrol edin!

Adım 8: Zamanlayıcıya Zamanlama Ekleyin

Şimdi zamanlayıcımızın aslında… şey… zamanlar, bir şey olduğundan emin olacağız.

Arduino ile zamanlama yapmanın farklı yolları vardır, biri gecikmedir (), bu, kartımızın işlenmesini belirli bir süre boyunca durdurur. Arduino'muz gecikme sırasında temelde donduğu için bunu kullanmayacağız ve panomuzun düzenli olarak güncellenmesini istiyoruz. Bu yüzden Millis() kullanacağız, bu Arduino'da zamanlama yapmanın daha zarif bir yolu, Millis() ile hala aralıklar arasında kod çalıştırabiliriz.

Bunun nasıl çalıştığıyla ilgileniyorsanız şu makaleye göz atabilirsiniz:

Millis() kodunu ekleyelim:

Bu kodu void setup() öğesinin ÜZERİNE koyun

imzasız uzun öncekiMillis = 0; // LED şeridinin en son güncellendiği zamanı saklayacaktırint interval = 1000; // zamanlayıcımızın aralığı (milisaniye)

Ve bu kodu void loop() içine koyalım:

imzasız uzun akımMillis = millis();// ZAMANLAYICI RİTMİNİ başlat ************************************************** ********* if (currentMillis - öncekiMillis >= interval) { öncekiMillis = currentMillis;

// ZAMANLAYICI RİTMİNİ sonlandır ************************************************** ***********

Az önce yaptığımız şey, LED şeridimizin LED'leri kapatması için bir ritim oluşturmaktı, bir sonraki adımda tam da bunu yapmak için kodu ekleyeceğiz.

Adım 9: Geri sayım

Bu adımda: Tüm LED'lerimiz kapanana kadar şeridin sonundaki BİR LED'i her saniye (veya ayarladığınız aralık ne olursa olsun) kapatmamızı sağlayacak bir işlev yapacağız.

En üstte 'led'ler' adında bir 'int' oluşturacağız. Bu daha sonra zamanlayıcımıza hala kaç ledin kapanması gerektiğini söyleyecektir.

void setup() öğesinin ÜZERİNE aşağıdaki kodu ekleyin:

int ledler = LED_COUNT-1; // kaç pikselin yanması gerektiğini söyler

Şimdi 'timer();' fonksiyonunu ekleyelim, bu her saniye bir ışığı kapatıyor olacak

void ledsOn() öğesinin altına aşağıdaki kodu ekleyin:

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

if (ledler > -1) { ledler--; } başka { yanıp sönen(); } }

Tüm ışıklar yandıktan sonra zamanlayıcının yapıldığına dair kullanıcıya biraz geri bildirim vermek istiyoruz. 'göz kırpma();' ile zamanlayıcı tamamlandıktan sonra LED'ler kırmızı renkte yanıp sönecektir!

void setup() öğesinin ÜZERİNE aşağıdaki kodu ekleyin:

int yanıp sönmeDurum = 1; // flashie'ye söyler(); Işığın açık mı yoksa kapalı mı olması gerektiği işlevi

void timer() öğesinin altına aşağıdaki kodu ekleyin:

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

yanıp sönmeDurum = 0; strip.clear(); } else { yanıp sönmeStatus = 1; for (int i = 0; i < strip.numPixels(); i++) { // Stripteki her piksel için… strip.setPixelColor(i, 255, 0, 0); // Piksel rengini ayarla (RAM'de) strip.show(); // Şeridi } } } } ile eşleşecek şekilde güncelle

Son olarak void döngümüzdeki(); işlevi çağırmalıyız, 8. adımda eklediğimiz ZAMANLAYICI RİTMİNİ hatırlıyor musunuz? Bu if ifadesinde timer(); fonksiyonunu çağıracağız.

TIMER RYTHM şimdi şöyle görünmelidir:

// ZAMANLAYICI RİTMİNİ başlat ************************************************** *********

if (currentMillis - öncekiMillis >= aralık) { öncekiMillis = currentMillis; zamanlayıcı(); strip.show();} // ZAMANLAYICI RİTMİNİ sonlandır ******************************************* ******************

Şimdi bu kodu yükleyin!

Şu anda LED şeridiniz her saniyede 1 LED'i kapatmalı ve bittiğinde kırmızı renkte yanıp sönmelidir…

Şimdi bu anayı uzaktan kumandalı yapalım!

Adım 10: Uzaktan Kontrol Edin: Bölüm I

Uzaktan Kumandalı Yapın: Bölüm I
Uzaktan Kumandalı Yapın: Bölüm I
Uzaktan Kumandalı Yapın: Bölüm I
Uzaktan Kumandalı Yapın: Bölüm I

Zamanlayıcımız var, sorun değil ama telefonunuzla kontrol edebileceğinize söz verdim, değil mi? Gelelim projemizin son aşamasına: timer'ımızı uzaktan kumandalı hale getirmek.

Adafruit sekmeniz hala açık mı? io.adafruit.com'a geri dönelim ve zamanlayıcı arayüzü kontrol panelimize gidelim ve yeni bir blok oluşturalım: TOGGLE

  1. Geçişi TIMER beslemesine bağlayın
  2. AÇIK değerini şu şekilde ayarlayın: 1
  3. KAPALI değerini şuna ayarlayın: 0

Bunun nedeni, Adafruit'in NodeMCU'muza metin verisi göndermemesi, sadece sayıları göndermesidir.

İsterseniz Toggle'a bir ad da verebilirsiniz, belki: 'Açma/Kapama düğmesi'

Şimdi Arduino IDE'ye geri dönelim

Sadece kodumuzun güncel olduğundan emin olmak için kodumuzu bir kez daha YÜKLEyelim.

Yükleme tamamlandıktan sonra SERİ MONİTÖRÜ AÇIN ve Adafruit panomuzdaki GEÇİŞE birkaç kez BASIN. Şimdi seri monitörümüzde bunun gibi bir şeyin ortaya çıktığını görmeliyiz:

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

Bu, kontrolleri NodeMCU'muza gerçekten gönderebileceğimiz anlamına gelir!

Bu mesajları almıyorsanız, config.h'nizdeki Adafruit Verilerinizin hala doğru olup olmadığını kontrol edin.

Adım 11: Uzaktan Kontrol Edin: Kısım II

Şimdi geriye kalan tek şey, alınan kontrollerimizle bir şeyler yapmak.

Bunu yapmak için void döngüsünde(); TIMER RYTHM if deyimimizi değiştirmeliyiz; birazcık.

NodeMCU'muza, zamanlayıcıyı yalnızca Adafruit'ten '1' (yani: AÇIK) aldığımızda başlatması gerektiğini söyleyeceğiz.

İlk önce Adafruit'in bize gönderdiği verileri toplayalım

void setup() öğesinin ÜZERİNE aşağıdaki kodu ekleyin:

int adaData; // AdaFruit'in bize gönderdiği verileri toplar

Şimdi aslında bu verileri toplayalım

void handleMessage() İÇERİSİNE aşağıdaki kodu ekleyin:

adaData = data->toInt();

Void loop'umuzu değiştirelim();

TIMER RYTHM şimdi şöyle görünmelidir:

// ZAMANLAYICI RİTMİNİ başlat ************************************************** *********if (currentMillis - öncekiMillis >= aralık) { öncekiMillis = currentMillis; if (adaData == 0) { Serial.println("çalışmıyorum"); } else if (adaData == 1) { timer(); } şerit.göster(); } // ZAMANLAYICI RİTMİNİ sonlandır *************************************************** ***************

Kodunuzu YÜKLEYİN…

Artık Adafruit'teki anahtarı kullanarak zamanlayıcıyı açıp kapatabilmelisiniz!

Adım 12: Etrafında Oyna! Bitirdik… Yoksa Biz mi?

Şu anda tam olarak çalışan bir uzaktan zamanlayıcıya sahip olmalısınız! Bu sizin için buysa, bu projeyle birlikte geldiğiniz için teşekkür ederiz!

Biraz daha devam etmek isterseniz, sonraki birkaç adımda zamanlayıcımız için bir RESET düğmesi ekleyeceğiz!

Adım 13: EKSTRA: Anlık Düğme Oluşturun

EKSTRA: Anlık Düğme Oluştur
EKSTRA: Anlık Düğme Oluştur

Kontrol panelimize dönelim. Şimdi tekrar YENİ BİR BLOK OLUŞTURMAK istiyoruz.

  1. Anlık bir düğme oluşturun
  2. 'Zamanlayıcı' beslemesine bağlayın
  3. Basın değerini şuna ayarlayın: 2
  4. yayın değerini KALDIR
  5. Güzel bir renk ver!

Uygun bir şekilde, anlık düğme zaten 'Sıfırla' olarak adlandırılıyor!

Bu bloğu oluşturduktan sonra test edin, aşağıdakileri alırsanız düğme çalışır:

alınan <- 2

Seri monitörünüzde.

Bu mesajı görmüyorsanız, çizimi yeniden yüklemeyi deneyin.

Adım 14: EKSTRA: Sıfırlama İşlevini Ekleyin

Sıfırlama düğmesinin herhangi bir şey yapmasını sağlamak için tüm LED'leri orijinal durumuna sıfırlayan bir işlev eklememiz gerekiyor.

Aşağıdaki kodu void flashie() altına ekleyin:

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

Şimdi geriye sadece fonksiyonumuzu çağırmak kalıyor, bunun için TIMER RYTHM'i son bir kez değiştirmemiz gerekiyor.

TIMER RYTHM şimdi şöyle görünmelidir:

// ZAMANLAYICI RİTMİNİ başlat ************************************************** *********if (currentMillis - öncekiMillis >= aralık) { öncekiMillis = currentMillis if (adaData == 0) { Serial.println("çalışmıyorum"); } else if (adaData == 1) { timer(); } else if (adaData == 2) { rerun(); } şerit.göster(); } // ZAMANLAYICI RİTMİNİ sonlandır *************************************************** ***************

Kodunuzu YÜKLEYİN…

Artık düğmeye basarak zamanlayıcıyı da sıfırlayabilmelisiniz!

Önerilen: