فهرست مطالب:

تایمر کنترل از راه دور با NodeMCU: 14 مرحله
تایمر کنترل از راه دور با NodeMCU: 14 مرحله

تصویری: تایمر کنترل از راه دور با NodeMCU: 14 مرحله

تصویری: تایمر کنترل از راه دور با NodeMCU: 14 مرحله
تصویری: در چند ثانیه ریموت کنترل رو کپی کن 2024, جولای
Anonim
تایمر کنترل از راه دور با NodeMCU
تایمر کنترل از راه دور با NodeMCU

در اینجا ما قصد داریم یک تایمر با استفاده از NodeMCU و Adafruit ایجاد کنیم. ما قصد داریم تایمر خود را با یک نوار LED نمایش دهیم و می توانیم آن را با استفاده از تلفن یا رایانه خود کنترل کنیم!

هدف ما:

با استفاده از یک نوار LED یک تایمر ایجاد کنید که می توانیم: با استفاده از تلفن یا رایانه خود شروع ، مکث و تنظیم مجدد کنیم.

تدارکات

سخت افزار:

  • NodeMCU ESP 8266
  • نوار LED Adafruit NeoPixel

کتابخانه ها:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

دیگر:

اتصال وای فای مناسب

مرحله 1: بیایید یک خوراک در Adafruit ایجاد کنیم

بیایید یک خوراک در Adafruit ایجاد کنیم!
بیایید یک خوراک در Adafruit ایجاد کنیم!

اکنون که همه چیز مورد نیاز خود را تهیه کرده ایم ، آماده شروع ساخت و ساز هستیم! اول از همه ما باید یک خوراک در Adafruit ایجاد کنیم. Adafruit سرویسی است که ما را برای اتصال آردوینو به اینترنت و ایجاد ویژگی های مفید از راه دور بسیار آسان می کند. اگر قبلاً ثبت نام نکرده اید ، برای Adafruit ثبت نام کنید.

حالا بیایید یک فید جدید ایجاد کنیم

ما می توانیم نام خوراک خود را هر چیزی که می خواهیم بگذاریم ، من آن را "تایمر" می نامم.

کاری که یک فید انجام می دهد این است که همه کارهایی را که ما در داشبورد خود انجام می دهیم (که در عرض یک دقیقه ایجاد می کنیم) ثبت کرده و این داده ها را به برد ما ارسال می کند ، اما این چیزی است که ما در صورت داشتن داده ها برای ارسال به آن نگاه می کنیم.

مرحله 2: حالا بیایید یک داشبورد بسازیم

حالا بیایید یک داشبورد بسازیم
حالا بیایید یک داشبورد بسازیم
حالا بیایید یک داشبورد بسازیم
حالا بیایید یک داشبورد بسازیم
حالا بیایید یک داشبورد بسازیم
حالا بیایید یک داشبورد بسازیم

اکنون به همان روشی که یک فید ایجاد کردیم ، یک داشبورد جدید ایجاد می کنیم. داشبورد خود را "رابط تایمر" می نامم زیرا اساساً داشبورد ما این خواهد بود: رابطی با دکمه ها برای کنترل تایمر ما.

مرحله 3: کلید ما را دریافت کنید

کلید ما را دریافت کنید
کلید ما را دریافت کنید

اگر می خواهیم Arduino خود را به خوراک خود متصل کنیم ، باید کلید Adafruit خود را دریافت کنیم ، این رمز عبور مخفی شماست که مطمئن می شوید فقط شما می توانید به فیدهای خود متصل شوید.

می توانید کلید خود را با کلیک روی دکمه زرد AIO Key در سمت راست بالای صفحه خود در Adafruit دریافت کنید.

این کلید را در جایی ذخیره کنید ، بعداً به آن نیاز خواهیم داشت.

کلید خود را به اشتراک نگذارید! در غیر این صورت افرادی با نیت بد می توانند به فیدها و دستگاه های شما متصل شوند.

مرحله 4: مثال خواندن Feed را باز کنید

مثال خواندن Feed را باز کنید
مثال خواندن Feed را باز کنید

حالا بیایید Arduino IDE خود را باز کرده و فرآیند برنامه نویسی را آغاز کنیم. اول از همه ما باید کتابخانه Adafruit IO Arduino را نصب کنیم.

نمی دانید چگونه کتابخانه ها را نصب کنید؟ این یک راهنمای عالی از Adafruit: Arduino Libraries است

Adafruit نمونه های از پیش ساخته شده زیادی را برای استفاده و یادگیری از ما ارائه می دهد. یکی از این مثالها این است: adafruitio_21_feed_read. این مثال را می توانید در اینجا پیدا کنید: فایل - مثالها Adafruit IO Arduino adafruitio_21_feed_read

(رابط هلندی من را در تصویر ببخشید)

مرحله 5: بیایید اتصال خود را تنظیم کنیم

اگر طرح adafruitio_21_feed_read را با موفقیت باز کرده اید ، باید 2 زبانه در طرح خود مشاهده کنید: adafruitio_21_feed_read و config.h. این طرح به گونه ای ساخته شده است که بتوانیم به خوراکی که در مرحله 1 ساخته بودیم متصل شویم.

برای اتصال به این فید ، ما باید جزئیات مربوط به WiFi و حساب Adafruit خود را وارد کنیم ،

بیایید به config.h سفر کنیم ، در اینجا جزئیات زیر را پر می کنیم:

نام کاربری Adafruit شما:

#تعریف IO_USERNAME "joopert"

کلید Adafruit شما:

#تعریف IO_KEY "1234567890abcdefghijklmnop"

نام وای فای شما:

#تعریف WIFI_SSID "MyWifi"

و رمز وای فای شما:

#تعریف WIFI_PASS "aVerySecretPassword"

حالا بیایید به برگه adafruitio_21_feed_read برگردیم و موارد زیر را پر کنیم:

نام کاربری Adafruit شما… دوباره:

#تعریف FEED_OWNER "joopert"

و در نهایت نام فید شما (از فید که در مرحله 1 ایجاد کردیم):

AdafruitIO_Feed *sharedFeed = io.feed ("تایمر" ، FEED_OWNER) ؛

مرحله 6: اتصال به Adafruit IO را بررسی کنید

اتصال به Adafruit IO را بررسی کنید
اتصال به Adafruit IO را بررسی کنید

برای بررسی اینکه آیا مراحل قبل ما به درستی اجرا شده است یا خیر ، ما قصد داریم طرح خود را در NodeMCU بارگذاری کنیم. اگر مانیتور سریال خود را باز کنید ، باید شبیه تصویر بالا باشد. ابتدا مانیتور سریال به شما نشان می دهد که سعی دارد به WiFi شما و Adafruit متصل شود. اگر کامل است باید بگوید:

Adafruit IO متصل شد

این یک خبر عالی است! اکنون می توانیم عملکرد را به تایمر خود اضافه کنیم…

مرحله 7: اجازه دهید LED

اجازه می دهد LED
اجازه می دهد LED
اجازه می دهد LED
اجازه می دهد LED

اکنون وقت آن است که نوار LED را روشن کنیم!

نوار LED خود را به پین D5 وصل کنید (اگر D5 را پیدا نکردید آن را به یک پین دیگر وصل کنید و LED_PIN را در کد تغییر دهید).

نوار LED را تعریف کنید

کد زیر کتابخانه NeoPixel را اضافه می کند (در مورد این کتابخانه اینجا بیشتر بدانید: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) و مطمئن شوید که Arduino ما می داند نوار LED ما کجاست و چند چراغ دارد اگر نوار LED شما مشخصات متفاوتی دارد ، آن را در کد تغییر دهید.

کد زیر را در بالا (void setup) اضافه کنید:

// راه اندازی اتصال NeoPixel #شامل #ifdef _AVR_ #شامل #endif

#تعریف LED_PIN D5 // نوار LED به کجا متصل است؟

#تعریف LED_COUNT 30 // چند پیکسل دارد؟

#تعریف BRIGHTNESS 50 // روشنایی NeoPixel ، 0 (دقیقه) تا 255 (حداکثر)

نوار Adafruit_NeoPixel (LED_COUNT ، LED_PIN ، NEO_GRB + NEO_KHZ800) ؛

نوار LED را راه اندازی کنید

اکنون ما نوار LED خود را راه اندازی کرده و روشنایی را تنظیم می کنیم (روشنایی از 0 دقیقه به حداکثر 255 می رسد ، اما من توصیه می کنم 50… 255 واقعاً روشن است).

کد زیر را در تنظیمات void () اضافه کنید:

strip.begin ()؛ // INITIALIZE NeoPixel strip object (REQUIRED) strip.show ()؛ // خاموش کردن همه پیکسل ها ASAP strip.setBrightness (50) ؛ // روشنایی را روی حدود 1/5 تنظیم کنید (حداکثر = 255)

ledsOn ()؛ // با عملکرد تماس می گیرد تا هر LED را یکی یکی روشن کند

چراغ ها را روشن کنید

شاید قبلاً متوجه شده اید که ما یک تابع را فرا می خوانیم که هنوز وجود ندارد ، که قسمت بعدی برنامه نویسی ما خواهد بود. اگر می خواهیم چراغ های خود را روشن کنیم باید یک "برای حلقه" ایجاد کنیم که تک تک LED ها را یک به یک روشن می کند (نمی دانم حلقه for چیست؟ آن را اینجا ببینید: www.arduino.cc/reference/ fa/زبان/ساختار/کنترل-ساختار/برای/).

اکنون ما قصد داریم تابع را ایجاد کنیم: ledsOn ()؛

کد زیر را BOWOW void handleMessage () اضافه کنید:

void ledsOn () {for (int i = 0؛ i <strip.numPixels ()؛ i ++) {// برای هر پیکسل در نوار… strip.setPixelColor (i، 0، 0، 255)؛ // رنگ پیکسل را روی blue strip.show () تنظیم کنید؛ // نوار را برای مطابقت به روز کنید}}

بارگذاری

در حال حاضر بخش سرگرم کننده است ، اجازه دهید کد خود را در NodeMCU بارگذاری کنیم … اگر همه چیز درست کار می کند ، نوار LED شما اکنون باید کاملاً آبی شود!

آیا پیکسلی نمایش داده نمی شود ؟: آیا نوار را به پین سمت راست وصل کرده اید؟ یا شاید اتصال اینترنت شما قطع شده باشد.

آیا فقط برخی از پیکسل ها نشان داده نمی شوند ؟: بررسی کنید که آیا مقدار مناسب پیکسل را تنظیم کرده اید!

مرحله 8: زمان بندی را به تایمر اضافه کنید

اکنون ما مطمئن می شویم که زمان سنج ما در واقع … خوب … زمان ، چیزی است.

روش های مختلفی برای انجام زمان بندی با آردوینو وجود دارد ، یکی تأخیر است () ، این امر پردازش برد ما را برای مدت زمان معینی متوقف می کند. ما قصد نداریم از این استفاده کنیم زیرا آردوینو ما اساساً در طول تاخیر یخ می زند و ما می خواهیم تخته ما به طور مرتب به روز شود. بنابراین ما قصد داریم از Millis () استفاده کنیم ، این یک روش ظریف تر برای انجام زمان بندی در آردوینو است ، با Millis () ما هنوز می توانیم کد را بین فواصل اجرا کنیم.

اگر به نحوه عملکرد این برنامه علاقه دارید ، می توانید این مقاله را بررسی کنید:

بیایید کد Millis () را اضافه کنیم:

این کد را در بالای تنظیمات void قرار دهید ()

امضا نشده longMillis = 0؛ // آخرین باری که نوار LED به روز شد ذخیره می شود </ b> فاصله زمانی = 1000؛ // فاصله زمان سنج ما (میلی ثانیه)

و اجازه دهید این کد را در حلقه void () قرار دهیم:

جریان طولانی بدون امضا Millis = millis ()؛// شروع TIMER RYTHM ****************************************** ********* if (currentMillis - previousMillis> = فاصله) {previousMillis = currentMillis؛

// پایان TIMER RYTHM ****************************************** ************

کاری که ما انجام دادیم این بود که یک نوار LED برای خاموش کردن LED ها ایجاد کنیم ، در مرحله بعد ما کد را برای انجام این کار اضافه می کنیم.

مرحله 9: شمارش معکوس

در این مرحله: ما عملکردی را ایجاد می کنیم که مطمئن می شود هر ثانیه (یا هر بازه ای که تنظیم کرده اید) یک LED را در انتهای نوار خاموش می کنیم تا زمانی که همه LED های ما خاموش شوند.

ما یک "int" در بالا به نام "leds" ایجاد می کنیم. این بعداً به تایمر ما می گوید که چند led هنوز باید خاموش شود.

کد زیر را در بالا (void setup) اضافه کنید:

int leds = LED_COUNT-1؛ // تعداد پیکسل ها را روشن می کند

حالا بیایید تابع 'timer ()؛' را اضافه کنیم ، در این صورت هر ثانیه یک چراغ خاموش می شود

کد زیر را در زیر () void ledsOn () اضافه کنید:

void timer () {strip.setPixelColor (leds، 0، 0، 0)؛

if (leds> -1) {leds--؛ } else {blinkie ()؛ }}

ما می خواهیم بازخوردی به کاربر بدهیم که زمان سنج بعد از تمام شدن چراغ ها تمام شده است. با 'blinkie ()؛' پس از اتمام تایمر ، LED ها قرمز چشمک می زنند!

کد زیر را در بالا (void setup) اضافه کنید:

int blinkStatus = 1؛ // به blinkie () می گوید؛ عملکرد در شرایطی که چراغ باید روشن یا خاموش باشد

کد زیر را در زیر تایمر خلاء () اضافه کنید:

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

blinkStatus = 0؛ strip.clear ()؛ } else {blinkStatus = 1؛ برای (int i = 0؛ i <strip.numPixels ()؛ i ++) {// برای هر پیکسل در نوار… strip.setPixelColor (i، 255، 0، 0)؛ // تنظیم رنگ پیکسل (در RAM) strip.show ()؛ // نوار را برای مطابقت به روز کنید}}}}

سرانجام ما باید تابع را در حلقه void خود فراخوانی کنیم () ،،

TIMER RYTHM را که در مرحله 8 اضافه کردیم به خاطر دارید؟ در این دستور if ما تابع timer () ؛.

TIMER RYTHM اکنون باید شبیه این باشد:

// شروع TIMER RYTHM ****************************************** *********

if (currentMillis - previousMillis> = فاصله) {previousMillis = currentMillis ؛ تایمر ()؛ strip.show ()؛} // پایان TIMER RYTHM ************************************ *******************

حالا این کد را بارگذاری کنید!

در حال حاضر نوار LED شما باید 1 LED را در هر ثانیه خاموش کند و وقتی کار تمام شد قرمز چشمک می زند…

حالا بیایید این دوستدار مادر را از راه دور کنترل کنیم!

مرحله 10: آن را از راه دور کنترل کنید: قسمت اول

آن را از راه دور کنترل کنید: قسمت اول
آن را از راه دور کنترل کنید: قسمت اول
آن را از راه دور کنترل کنید: قسمت اول
آن را از راه دور کنترل کنید: قسمت اول

ما تایمر خود را داریم ، همه چیز خوب و عالی است ، اما من به شما قول دادم که می توانید آن را با تلفن خود کنترل کنید ، درست است؟ بیایید وارد آخرین مرحله پروژه خود شویم: کنترل از راه دور تایمر خود را.

هنوز برگه Adafruit شما باز است؟ بیایید به io.adafruit.com برگردیم و به داشبورد رابط تایمر خود برویم و یک بلوک جدید ایجاد کنیم: TOGGLE

  1. ضامن را به فید TIMER وصل کنید
  2. مقدار ON را روی: 1 تنظیم کنید
  3. مقدار OFF را روی: 0 تنظیم کنید

دلیل این امر این است که Adafruit داده های متنی را به NodeMCU ما ارسال نمی کند ، بلکه فقط شماره ها را ارسال می کند.

در صورت تمایل می توانید نامی را برای Toggle بگذارید ، شاید: "روشن/خاموش"

حالا بیایید به سراغ IDE آردوینو برویم

فقط برای اطمینان از به روز بودن کد ما ، بیایید یکبار دیگر کد خود را آپلود کنیم.

پس از اتمام بارگذاری ، مانیتور سریال را باز کنید و TOGGLE را در داشبورد Adafruit ما چند بار فشار دهید. اکنون باید چیزی شبیه به این را در مانیتور سریال خود مشاهده کنیم:

دریافت <- 0 دریافت <- 1 دریافت <- 0 دریافت <- 1 دریافت <- 1 دریافت <- 0

این بدان معناست که ما در واقع می توانیم کنترل ها را به NodeMCU خود ارسال کنیم!

اگر این پیام ها را دریافت نمی کنید ، بررسی کنید که آیا اطلاعات Adafruit شما در config.h هنوز صحیح است.

مرحله 11: آن را از راه دور کنترل کنید: قسمت دوم

اکنون تنها چیزی که باقی مانده این است که با کنترل های دریافتی ما کاری انجام دهیم.

برای انجام این کار باید دستور TIMER RYTHM if خود را در حلقه void () تغییر دهیم. کمی.

ما به NodeMCU خود می گوییم که فقط زمانی باید تایمر را شروع کنیم که "1" (که به معنی: روشن است) را از Adafruit دریافت کرده باشیم.

ابتدا اجازه دهید داده هایی را که Adafruit برای ما ارسال می کند ، جمع آوری کنیم

کد زیر را در بالا (void setup) اضافه کنید:

int adaData؛ // داده هایی را که AdaFruit برای ما ارسال می کند جمع آوری می کند

حالا بیایید در واقع آن داده ها را جمع آوری کنیم

کد زیر را INSIDE void handleMessage () اضافه کنید:

adaData = data-> toInt ()؛

حلقه خالی خود را تغییر دهیم ()؛

TIMER RYTHM اکنون باید شبیه این باشد:

// شروع TIMER RYTHM ****************************************** ********* if (currentMillis - previousMillis> = فاصله) {previousMillis = currentMillis؛ if (adaData == 0) {Serial.println ("در حال اجرا نیستم")؛ } else if (adaData == 1) {timer ()؛ } strip.show ()؛ } // پایان TIMER RYTHM ***************************************** *************

کد خود را آپلود کنید…

اکنون باید بتوانید با استفاده از سوئیچ در Adafruit تایمر را روشن و خاموش کنید!

مرحله 12: بازی در اطراف! ما تمام شدیم … یا داریم؟

در حال حاضر شما باید یک تایمر از راه دور کاملاً کارآمد داشته باشید! اگر این برای شما مناسب است ، از شما برای همراهی با این پروژه متشکرم!

اگر می خواهید کمی بیشتر ادامه دهید ، در چند مرحله بعدی ما یک دکمه RESET برای تایمر خود اضافه می کنیم!

مرحله 13: EXTRA: ایجاد دکمه لحظه ای

EXTRA: دکمه لحظه ای ایجاد کنید
EXTRA: دکمه لحظه ای ایجاد کنید

بیایید به داشبورد خود بازگردیم. حالا می خواهیم دوباره یک بلاک جدید بسازیم.

  1. یک دکمه Momentary ایجاد کنید
  2. آن را به فید "تایمر" وصل کنید
  3. مقدار مطبوعات را روی: 2 تنظیم کنید
  4. حذف مقدار انتشار
  5. رنگ زیبایی به آن بدهید!

به راحتی دکمه لحظه ای "Reset" نامیده می شود!

هنگامی که این بلوک را ایجاد کردید آن را آزمایش کنید ، اگر دریافت کنید دکمه کار می کند:

دریافت کرد <- 2

در مانیتور سریال شما

اگر این پیام را نمی بینید ، طرح را دوباره بارگذاری کنید

مرحله 14: EXTRA: عملکرد Reset را اضافه کنید

برای اینکه دکمه تنظیم مجدد هر کاری را انجام دهد ، باید عملکردی را اضافه کنیم که همه LED ها را به حالت اولیه بازگرداند.

کد زیر را در زیر () void blinkie () اضافه کنید:

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

اکنون تنها چیزی که باقی مانده این است که عملکرد ما را فراخوانی کنیم ، برای این کار باید آخرین بار TIMER RYTHM را تغییر دهیم

TIMER RYTHM اکنون باید شبیه این باشد:

// شروع TIMER RYTHM ****************************************** ********* if (currentMillis - previousMillis> = فاصله) {previousMillis = currentMillis if (adaData == 0) {Serial.println ("در حال اجرا نیستم") ؛ } else if (adaData == 1) {timer ()؛ } else if (adaData == 2) {rerun ()؛ } strip.show ()؛ } // پایان TIMER RYTHM ***************************************** *************

کد خود را آپلود کنید…

حالا شما همچنین باید بتوانید با فشار دادن دکمه تایمر را تنظیم مجدد کنید!

توصیه شده: