Mundarija:

NodeMCU bilan masofadan boshqariladigan taymer: 14 qadam
NodeMCU bilan masofadan boshqariladigan taymer: 14 qadam

Video: NodeMCU bilan masofadan boshqariladigan taymer: 14 qadam

Video: NodeMCU bilan masofadan boshqariladigan taymer: 14 qadam
Video: ESP8266 Project: How to control 2 AC bulb or load using 2 Relay with NodeMCU and D1 Mini over WiFi 2024, Iyul
Anonim
NodeMCU bilan masofadan boshqariladigan taymer
NodeMCU bilan masofadan boshqariladigan taymer

Bu erda biz NodeMCU va Adafruit yordamida taymer yaratamiz. Biz taymerimizni LED tasmasi bilan ko'rsatamiz va biz uni telefon yoki kompyuter yordamida boshqaramiz!

Bizning maqsadimiz:

LED tasmasi yordamida taymer yarating, biz buni qila olamiz: telefon yoki kompyuter yordamida ishga tushirish, to'xtatib turish va qayta o'rnatish.

Ta'minotlar

Uskuna:

  • NodeMCU ESP 8266
  • Adafruit NeoPixel LED tasmasi

Kutubxonalar:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Boshqa:

Yaxshi Wi -Fi ulanishi

1 -qadam: Keling, Adafruit -da tasma yarataylik

Adafruit -da tasma yarataylik!
Adafruit -da tasma yarataylik!

Endi biz hamma narsani oldik, qurilishni boshlashga tayyormiz! Birinchidan, biz Adafruit -da kanal yaratishimiz kerak. Adafruit - bu bizning Arduino -ni Internetga ulash va masofadan boshqarishning foydali xususiyatlarini yaratishni osonlashtiradigan xizmat. Agar siz hali qilmagan bo'lsangiz, Adafruit -ga ro'yxatdan o'ting.

Endi yangi tasma yarataylik

Biz tasmamizga xohlagan narsani nom berishimiz mumkin, men buni "taymer" deb atayman.

Lent nima qiladi - biz bajaradigan hamma narsani asboblar panelida yozamiz (biz buni bir daqiqada yaratamiz) va bu ma'lumotlarni bizning taxtamizga yuboradi, lekin biz ma'lumot yuborilganidan keyin ko'rib chiqamiz.

2 -qadam: Endi boshqaruv panelini tuzamiz

Endi asboblar panelini tuzamiz
Endi asboblar panelini tuzamiz
Endi asboblar panelini tuzamiz.
Endi asboblar panelini tuzamiz.
Endi asboblar panelini tuzamiz
Endi asboblar panelini tuzamiz

Endi biz tasma yaratganimizdek, biz yangi boshqaruv panelini yaratamiz. Men boshqaruv paneliga "taymer interfeysi" deb nom beraman, chunki bu bizning boshqaruv paneli bo'ladi: taymerni boshqarish tugmachalari bo'lgan interfeys.

3 -qadam: Kalitni oling

Bizning kalitni oling
Bizning kalitni oling

Agar biz Arduino -ni o'z kanalimizga ulashni xohlasak, biz Adafruit kalitini olishimiz kerak, bu sizning maxfiy parolingiz, bu sizning kanalingizga faqat siz ulanishingizga ishonch hosil qiladi.

Adafruit -da ekranning o'ng yuqori qismidagi sariq AIO tugmachasini bosish orqali siz kalitni olishingiz mumkin.

Bu kalitni biror joyga saqlang, keyinroq kerak bo'ladi.

Kalitingizni baham ko'rmang! Aks holda, yomon niyatli odamlar sizning kanallaringiz va qurilmalaringizga ulanishi mumkin.

4 -qadam: Feed o'qish misolini oching

Tasmani o'qish misolini oching
Tasmani o'qish misolini oching

Endi Arduino IDE -ni ochamiz va kodlash jarayonini boshlaymiz. Birinchidan, biz Adafruit IO Arduino kutubxonasini o'rnatishimiz kerak.

Kutubxonalarni qanday o'rnatishni bilmayapsizmi? bu Adafruit tomonidan ajoyib qo'llanma: Arduino kutubxonalari

Adafruit bizdan foydalanishimiz va o'rganishimiz uchun oldindan tayyorlangan ko'plab misollarni taklif qiladi. Bu misollardan biri: adafruitio_21_feed_read. Siz bu misolni bu erda topishingiz mumkin: Fayl - Misollar Adafruit IO Arduino adafruitio_21_feed_read

(rasmdagi Gollandiya interfeysi uchun uzr so'rayman)

5 -qadam: Keling, aloqani o'rnatamiz

Agar siz adafruitio_21_feed_read eskizini muvaffaqiyatli ochgan bo'lsangiz, siz eskizda 2 ta yorliqni ko'rishingiz kerak: adafruitio_21_feed_read va config.h. Bu eskiz biz 1 -qadamda tayyorlangan tasmaga ulanishimiz uchun qilingan.

Bu tasmaga ulanish uchun biz WiFi va Adafruit hisobimiz haqida bir nechta ma'lumotlarni to'ldirishimiz kerak.

Keling, config.h ga sayohat qilamiz, bu erda biz quyidagi ma'lumotlarni to'ldiramiz:

Sizning Adafruit foydalanuvchi nomingiz:

#IO_USERNAME "joopert" ni aniqlang

Sizning Adafruit kalitingiz:

#aniqlang IO_KEY "1234567890abcdefghijklmnop"

Wi -Fi tarmog'ingizning nomi:

#WIFI_SSID "MyWifi" ni aniqlang

Va sizning WiFi parolingiz:

#aIFI_PASS "aVerySecretPassword" ni belgilang

Endi adafruitio_21_feed_read sahifasiga qaytamiz va to'ldiramiz:

Sizning Adafruit foydalanuvchi ismingiz … yana:

#FEED_OWNER "joopert" ni aniqlang

Va nihoyat, sizning tasma nomingiz (biz 1 -bosqichda tayyorlangan tasmadan):

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

6 -qadam: Adafruit IO ga ulanishni tekshiring

Adafruit IO ga ulanishni tekshiring
Adafruit IO ga ulanishni tekshiring

Oldin qilingan qadamlar to'g'ri bajarilganligini tekshirish uchun biz eskizimizni NodeMCU -ga yuklamoqchimiz. Agar siz ketma -ket monitorni ochsangiz, u yuqoridagi rasmga o'xshash bo'lishi kerak. Birinchidan, ketma -ket monitor sizga Wi -Fi va Adafruit -ga ulanmoqchi ekanligini ko'rsatadi. agar bu to'liq bo'lsa, u shunday deyishi kerak:

Adafruit IO ulangan

Bu ajoyib yangilik! Endi biz taymerimizga funksionallikni qo'shishni boshlashimiz mumkin …

7 -qadam: LEDni yoqish

LEDga ruxsat bering
LEDga ruxsat bering
LEDga ruxsat bering
LEDga ruxsat bering

Endi LED tasmasini yoqish vaqti keldi!

LED tasmasini D5 PIN -kodiga ulang (agar D5 topilmasa, uni boshqa PIN -kodga ulang va LED_PIN kodini o'zgartiring).

LED chizig'ini aniqlang

Quyidagi kod NeoPixel kutubxonasini qo'shadi (bu kutubxona haqida ko'proq bilib oling: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) va bizning Arduino bizning LED tasmasi qayerda ekanligini bilishiga ishonch hosil qiling. qancha chiroqlar bor. Agar sizning LED tasmasi har xil texnik xususiyatlarga ega bo'lsa, uni kodda o'zgartiring.

Void setup () ustidagi quyidagi kodni qo'shing:

// NeoPixel ulanishini o'rnatish #o'z ichiga #ifdef _AVR_ #include #endif

#define LED_PIN D5 // LED tasmasi qayerga ulangan?

#define LED_COUNT 30 // U nechta pikselga ega?

#RIGHTNESS 50 ni aniqlang // NeoPixel nashrida, 0 (min) dan 255 gacha (maksimal)

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

LED chizig'ini ishga tushiring

Endi biz LED chizig'ini ishga tushiramiz va yorqinlikni o'rnatamiz (nashrida 0 daqiqadan 255 gacha, lekin men tavsiya qilaman 50 … 255 haqiqatdan ham yorqin).

Void setup () ga quyidagi kodni qo'shing:

strip.begin (); // NeoPixel strip ob'ektini INITIALIZE (REQUIRED) strip.show (); // Barcha piksellarni ASAP strip.setBrightness o'chiring (50); // BRIGHTNESS ni 1/5 ga o'rnating (maksimal = 255)

ledsOn (); // Har bir LEDni birma -bir yoqish funktsiyasini chaqiradi

Chiroqlarni yoqing

Ehtimol, siz hali ham mavjud bo'lmagan funktsiyani chaqirayotganimizni payqadingiz, bu kodlashning keyingi qismi bo'ladi. Agar biz o'z chirog'imizni yoqmoqchi bo'lsak, biz har bir LEDni birma -bir yoqadigan "for loop" yaratishimiz kerak (for loop nima ekanligini bilmayapsizmi? Bu yerga qarang: www.arduino.cc/reference/) uz/til/struktura/nazorat-tuzilma/uchun/).

Endi biz funktsiyani yaratmoqchimiz: ledsOn ();

Quyidagi kodni BOLOW void handleMessage () ga qo'shing:

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Ipdagi har bir piksel uchun… strip.setPixelColor (i, 0, 0, 255); // piksel rangini ko'k chiziqqa o'rnating.show (); // Ipni mos keladigan qilib yangilang}}

Yuklab oling

Endi bu qiziqarli qism, kodimizni NodeMCU -ga yuklaymiz … Agar hamma narsa to'g'ri ishlayotgan bo'lsa, sizning LED tasmangiz endi to'liq ko'k rangga aylanishi kerak!

Hech qanday piksel ko'rinmayaptimi ?: chiziqni to'g'ri PIN -kodga uladingizmi? Yoki Internet aloqasi uzilib qolgan bo'lishi mumkin.

Faqat ba'zi piksellar ko'rinmayaptimi?: Piksellar sonini to'g'ri sozlaganingizni tekshiring!

8 -qadam: Taymerga Vaqtni qo'shing

Endi biz taymerimiz haqiqatan ham … yaxshi … bir narsa ekanligiga ishonch hosil qilamiz.

Arduino -da vaqtni belgilashning turli xil usullari mavjud, biri kechiktirish (), bu bizning taxtamizga ishlov berishni ma'lum vaqtgacha to'xtatadi. Biz buni ishlatmaymiz, chunki bizning Arduino asosan kechikish paytida muzlab qoladi va biz taxtamiz muntazam yangilanib turishini xohlaymiz. Shunday qilib, biz Millis () dan foydalanmoqchimiz, bu vaqtni Arduino -da bajarishning yanada oqilona usuli, Millis () bilan biz hali ham kodni intervallar oralig'ida ishga tushirishimiz mumkin.

Agar siz bu qanday ishlashiga qiziqsangiz, ushbu maqolani o'qishingiz mumkin:

Millis () kodini qo'shamiz:

Ushbu kodni void setup () ustidan qo'ying.

imzosiz uzoq oldingiMillis = 0; // LED tasmasi oxirgi marta saqlangan vaqt oralig'ida = 1000; // taymerimiz oralig'i (millisekund)

Va bu kodni void loop () ga qo'yaylik:

belgisiz uzun oqimMillis = millis ();// TAYMER RITMASINI boshlang ***************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis;

// taymer ritmini tugatish ***************************************** ***********

Biz qilgan ishimiz - LED tasmasi uchun LEDlarni o'chirish uchun ritm yaratish edi, keyingi bosqichda biz buning uchun kodni qo'shamiz.

9 -qadam: orqaga hisob

Bu bosqichda: biz har bir soniyada (yoki siz belgilagan intervalda) chiziq oxiridagi BIR LEDni o'chirishga ishonch hosil qiladigan funktsiyani bajaramiz, barcha LEDlarimiz o'chguncha.

Biz tepada "leds" deb nomlangan "int" ni yaratamiz. Bu keyinchalik taymerimizga qancha LEDni o'chirish kerakligini aytadi.

Void setup () ustidagi quyidagi kodni qo'shing:

int leds = LED_COUNT-1; // qancha piksel yoqilishi kerakligini bildiradi

Endi 'timer ();' funktsiyasini qo'shamiz, bu har soniyada chiroqni o'chiradi

Quyidagi void ledsOn () kodini qo'shing:

bo'sh taymer () {strip.setPixelColor (leds, 0, 0, 0);

if (leds> -1) {leds--; } boshqa {blinkie (); }}

Biz foydalanuvchiga taymer barcha chiroqlar yonib ketganidan keyin bajarilgani haqida fikr bildirmoqchimiz. 'Blinkie ();' bilan taymer tugagandan so'ng, LEDlar qizil rangda yonadi!

Void setup () ustidagi quyidagi kodni qo'shing:

int blinkStatus = 1; // miltillab aytadi (); chiroq yoqilgan yoki o'chirilgan bo'lishi kerak

Quyidagi kodni bo'sh vaqt taymeriga () qo'shing:

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

blinkStatus = 0; strip.clear (); } boshqa {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Ipdagi har bir piksel uchun… strip.setPixelColor (i, 255, 0, 0); // pikselning rangini belgilang (RAMda) strip.show (); // Ipni mos keladigan qilib yangilang}}}}

Nihoyat, funktsiyani void loop (); deb chaqirishimiz kerak.

Biz 8 -qadamda qo'shgan TIMER RITMini eslaysizmi? Bu if ifodasida biz taymer () funktsiyasini chaqiramiz.

TIMER RYTHM endi shunday bo'lishi kerak:

// TAYMER RITMASINI boshlang ***************************************** *********

if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; taymer (); strip.show ();} // TIMER RITMASINI tugatish ************************************ ******************

Endi bu kodni yuklang!

Hozirgi vaqtda sizning LED tasmangiz har soniyada 1 LEDni o'chirib qo'yishi va tugashi bilan qizil yonib turishi kerak …

Keling, bu ota -onani masofadan boshqarish pultiga aylantiraylik!

10 -qadam: Masofadan boshqariladigan qiling: I qism

Masofadan boshqariladigan qilib qo'ying: I qism
Masofadan boshqariladigan qilib qo'ying: I qism
Masofadan boshqariladigan qilib qo'ying: I qism
Masofadan boshqariladigan qilib qo'ying: I qism

Bizda taymer bor, hammasi juda zo'r, lekin men sizga va'da berdimki, siz uni telefoningiz bilan boshqarasiz, to'g'rimi? Loyihamizning yakuniy bosqichiga o'tamiz: taymerni masofadan boshqarish pulti.

Adafruit tabingiz hali ham ochiqmi? Keling, io.adafruit.com saytiga qaytamiz va taymer interfeysi boshqaruv paneliga o'tamiz va yangi blok yaratamiz: TOGGLE

  1. O'tkazgichni TIMER tasmasiga ulang
  2. ON qiymatini quyidagicha o'rnating: 1
  3. O'chirish qiymatini quyidagicha o'rnating: 0

Buning sababi shundaki, Adafruit bizning NodeMCU -ga matnli ma'lumotlarni yubormaydi, faqat raqamlar.

Agar xohlasangiz, Toggle -ga nom berishingiz mumkin, ehtimol: "Yoqish/O'chirish tugmasi"

Endi Arduino IDE -ga qaytaylik

Bizning kodimiz yangilanganligiga ishonch hosil qilish uchun kodimizni yana bir marta yuklaymiz.

Yuklash tugagandan so'ng, seriyali monitorni oching va Adafruit asboblar panelida bir necha marta bosing. Endi biz ketma -ket monitorimizda shunga o'xshash narsani ko'rishimiz kerak:

qabul <- 0 qabul <- 1 qabul <- 0 qabul <- 1 qabul <- 0

Bu shuni anglatadiki, biz NodeMCU -ga boshqaruvni yuborishimiz mumkin!

Agar siz bu xabarlarni olmasangiz, config.h dagi Adafruit ma'lumotlaringiz to'g'riligini tekshiring.

11 -qadam: masofadan boshqariladigan qilib qo'ying: II qism

Qolgan narsa - biz olgan boshqaruv elementlari yordamida biror narsa qilish.

Buni amalga oshirish uchun biz TIMER RYTHM ni o'zgartirishimiz kerak, agar void loopidagi ifodasi (); ozgina.

Biz NodeMCU -ga taymerni faqat Adafruit -dan '1' (ya'ni: yoqilgan) olgandan so'ng ishga tushirishini aytamiz.

Birinchidan, Adafruit bizga yuboradigan ma'lumotlarni to'playlik

Void setup () ustidagi quyidagi kodni qo'shing:

int adaData; // AdaFruit bizga yuboradigan ma'lumotlarni to'playdi

Keling, aslida bu ma'lumotlarni to'playlik

Void handleMessage () ichidagi quyidagi kodni qo'shing:

adaData = ma'lumotlar-> toInt ();

Void loopimizni o'zgartiramiz ();

TIMER RYTHM endi shunday bo'lishi kerak:

// TAYMER RITMASINI boshlang ***************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("ishlamayapti"); } if if (adaData == 1) {taymer (); } strip.show (); } // taymer ritmini tugatish ****************************************** ************

Kodni yuklang …

Endi siz Adafruit -dagi kalit yordamida taymerni yoqishingiz va o'chirishingiz kerak!

12 -qadam: atrofida o'ynang! Biz tugadikmi yoki bizmi?

Hozir sizda to'liq ishlaydigan masofali taymer bo'lishi kerak! Agar bu sizga tegishli bo'lsa, ushbu loyiha bilan birga kelganingiz uchun tashakkur!

Agar siz biroz ko'proq davom etmoqchi bo'lsangiz, keyingi qadamlarda biz taymerimiz uchun RESET tugmasini qo'shamiz!

13 -qadam: QO'ShIMChA: Vaqt tugmachasini yarating

QO'ShIMChA: Vaqt tugmachasini yarating
QO'ShIMChA: Vaqt tugmachasini yarating

Boshqaruv paneliga qaytaylik. Endi biz yana yangi blok yaratmoqchimiz.

  1. Vaqt tugmachasini yarating
  2. Uni "taymer" tasmasiga ulang
  3. Matbuot qiymatini quyidagicha o'rnating: 2
  4. Chiqarish qiymatini olib tashlang
  5. Unga chiroyli rang bering!

Qulay bo'lgan vaqtinchalik tugma allaqachon "Qayta tiklash" deb nomlangan!

Ushbu blokni yaratganingizdan so'ng, uni sinab ko'ring, agar siz qabul qilsangiz, tugma ishlaydi:

qabul qilingan <- 2

Sizning ketma -ket monitoringizda.

Agar siz bu xabarni ko'rmasangiz, eskizni qayta yuklashga urinib ko'ring

14 -qadam: QO'ShIMChA: Qayta tiklash funktsiyasini qo'shing

Qayta tiklash tugmachasini bajarish uchun biz barcha LEDlarni asl holatiga qaytaradigan funktsiyani qo'shishimiz kerak.

Quyidagi void blinkie () kodini qo'shing:

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

Endi faqat bizning funktsiyamizga qo'ng'iroq qilish qoldi, buning uchun biz TIMER RYTHM -ni oxirgi marta o'zgartirishimiz kerak

TIMER RYTHM endi shunday bo'lishi kerak:

// TAYMER RITMASINI boshlang ***************************************** ********* if (currentMillis - previousMillis> = interval) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("ishlamayapti"); } if if (adaData == 1) {taymer (); } if if (adaData == 2) {rerun (); } strip.show (); } // taymer ritmini tugatish ****************************************** ************

Kodni yuklang …

Endi siz tugmachani bosib taymerni asl holatiga qaytarishingiz kerak!

Tavsiya: