Мазмуну:

NodeMCU менен алыстан башкарылуучу таймер: 14 кадам
NodeMCU менен алыстан башкарылуучу таймер: 14 кадам

Video: NodeMCU менен алыстан башкарылуучу таймер: 14 кадам

Video: NodeMCU менен алыстан башкарылуучу таймер: 14 кадам
Video: Введение в плату разработки NodeMCU ESP8266 WiFi с примером HTTP-клиента 2024, Июль
Anonim
NodeMCU менен алыстан башкарылуучу таймер
NodeMCU менен алыстан башкарылуучу таймер

Бул жерде биз NodeMCU жана Adafruit менен таймерди түзөбүз. Биз таймерди LED тилкеси менен көрсөтөбүз жана аны телефонуңуз же компьютериңиз аркылуу башкара алабыз!

Биздин максат:

LED тилкесин колдонуп, таймерди түзөбүз: биз телефонуңузду же компьютериңизди колдонуп баштай, токтотуп жана баштапкы абалга келтире аласыз.

Жабдуулар

Аппараттык:

  • Результ Аюбов.mp3 8266
  • Adafruit NeoPixel LED тилкеси

Китепканалар:

  • Adafruit_NeoPixel.h
  • AdafruitIO_WiFi.h

Башка:

Жакшы WiFi байланышы

1 -кадам: Келгиле, Adafruitте канал түзөбүз

Келгиле, Adafruitте канал түзөбүз!
Келгиле, Adafruitте канал түзөбүз!

Эми биз керектүү нерселердин баарын алдык, биз курулушту баштоого даярбыз! Биринчи кезекте биз Адафрутта тоют түзүшүбүз керек. Adafruit - бул биздин Arduino интернетке туташуубузду жана алыстан башкарылуучу пайдалуу функцияларды жасоону оңой кылган кызмат. Эгерде сизде жок болсо, Adafruitке катталыңыз.

Эми жаңы түрмөк түзөлү

Биз тоюбузга каалаган нерсебиздин атын бере алабыз, мен аны "таймер" деп атайм.

Түрмөктүн эмне кылганы - бул биздин панелибизде кылган нерселерибиздин бардыгын жазат (биз муну бир мүнөттө түзөбүз) жана бул маалыматты биздин тактабызга жөнөтөт, бирок биз жөнөтүлө турган маалымат болгондон кийин карайбыз.

2 -кадам: Эми куралдар тактасын түзөлү

Эми такта жасайлы
Эми такта жасайлы
Эми такта жасайлы
Эми такта жасайлы
Эми такта жасайлы
Эми такта жасайлы

Эми биз түрмөк жасагандай эле, биз жаңы тактаны түзөбүз. Мен панелиме: "таймер интерфейси" деп кайрылам, анткени бул биздин панелибиз негизинен ушундай болот: таймерибизди көзөмөлдөө үчүн баскычтары бар интерфейс.

3 -кадам: Биздин ачкычты алыңыз

Биздин ачкычты алыңыз
Биздин ачкычты алыңыз

Эгерде биз өзүбүздүн Arduino -ны каналыбызга туташтыргыбыз келсе, анда биз Adafruit ачкычын алышыбыз керек, бул сиздин жашыруун сырсөзүңүз, ал сиздин каналыңызга гана туташа алат.

Адафруттагы экраныңыздын жогорку оң жагындагы сары AIO ачкычын басуу менен ачкычыңызды ала аласыз.

Бул ачкычты бир жерге сактаңыз, кийинчерээк бизге керек болот.

Ачкычыңызды бөлүшпөңүз! Болбосо, жаман ниети бар адамдар сиздин түрмөктөрүңүзгө жана түзмөктөрүңүзгө туташа алышат.

4 -кадам: Түрмөктү окуу мисалын ачыңыз

Түрмөктү окуу мисалын ачыңыз
Түрмөктү окуу мисалын ачыңыз

Эми 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 аты:

#аныктоо WIFI_SSID "MyWifi"

Жана сиздин WiFi сырсөзүңүз:

#аныктоо WIFI_PASS "aVerySecretPassword"

Эми adafruitio_21_feed_read өтмөгүнө кайтып келип, толтуралы:

Сиздин Adafruit колдонуучу атыңыз… дагы:

#define 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 PIN -ге туташтырыңыз (эгер D5ди таба албасаңыз, аны башка PIN -ге туташтырыңыз жана коддогу LED_PINди өзгөртүңүз).

LED тилкесин аныктоо

Төмөнкү код NeoPixel китепканасын кошот (бул китепкана жөнүндө көбүрөөк билүү үчүн бул жерден: https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-use) жана биздин Arduino биздин LED тилкебиздин кайда экенин билээрине ынангыла. анын канча жарыгы бар. Эгерде сиздин LED тилкесиңиздин өзгөчөлүктөрү ар башка болсо, аны коддон өзгөртүңүз.

Void setup () үстүндөгү төмөнкү кодду кошуңуз:

// NeoPixel байланышын орнотуу #камтыйт #ifdef _AVR_ #include #endif

#define LED_PIN D5 // LED тилкеси кайда туташкан?

#define 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 setup () ичине төмөнкү кодду кошуңуз:

strip.begin (); // INITIALIZE NeoPixel тилкесинин объектиси (КЕРЕКТҮҮ) strip.show (); // Бардык пикселдерди ASAP strip.setBrightness өчүрүү (50); // Жарыктыкты болжол менен 1/5ке коюңуз (макс = 255)

ledsOn (); // Ар бир LEDди бирден иштетүү үчүн функцияны чакырат

Жарыктарды күйгүзүңүз

Балким, сиз азырынча жок функцияны чакырып жатканыбызды байкадыңыз, бул биздин коддоонун кийинки бөлүгү болот. Эгерде биз чырактарыбызды күйгүзгүбүз келсе, ар бир жеке LEDди бирден күйгүзүүчү "for loop" түзүшүбүз керек (for loop эмне экенин билбеймиз? Бул жерден текшериңиз: www.arduino.cc/reference/ en/тил/структура/башкаруу-түзүлүш/үчүн/).

Эми биз функцияны түзөбүз: ledsOn ();

Төмөндөгү void handleMessage () кодун кошуңуз:

void ledsOn () {for (int i = 0; i <strip.numPixels (); i ++) {// Stripтеги ар бир пиксел үчүн… strip.setPixelColor (i, 0, 0, 255); // Пикселдин түсүн көк тилкеге коюңуз.show (); // Тасманы дал келтирүү үчүн жаңыртыңыз}}

Жүктөө

Эми кызыктуу бөлүгү, кодубузду NodeMCUго жүктөп берели … Эгерде баары туура иштесе, сиздин LED тилкесиңиз эми толугу менен көк болуп кетиши керек!

Пикселдер көрүнбөйбү ?: сиз тилкени туура PINге туташтырдыңызбы? Же, балким, интернет байланышы үзүлгөн.

Кээ бир пикселдер көрүнбөй жатабы ?: пикселдин туура өлчөмүн койгонуңузду текшериңиз!

8 -кадам: Таймерге Убакытты кошуу

Эми биз таймерибиздин чындыгында … жакшы… убакыт, бир нерсе экенине ынанабыз.

Arduino менен убакытты өткөрүүнүн ар кандай жолдору бар, бирин кечиктирүү (), бул тактайыбыздын иштөөсүн белгилүү бир убакытка токтотот. Биз муну колдонбойбуз, анткени биздин Arduino кечигүү учурунда тоңуп калат жана тактайыбыз дайыма жаңыртылып турушун каалайбыз. Ошентип, биз Millis () колдонмокчубуз, бул Ардуинодо убакытты жасоонун эң көрктүү жолу, Millis () менен биз дагы коддорду интервалдардын ортосунда иштете алабыз.

Эгер сиз бул иштөөнү кызыктырсаңыз, бул макаланы текшере аласыз:

Милис () кодун кошолу:

Бул кодду үстүдөгү боштукту коюңуз ()

unsigned long previousMillis = 0; // LED тилкеси акыркы жолу сакталып калат интервал = 1000; // биздин таймердин интервалы (миллисекунд)

Жана бул кодду void loop () ичине коёлу:

белгисиз узак currentMillis = millis ();// TIMER RYTHM баштоо ***************************************** ********* if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis;

// тайм ритминин аягы ***************************************** ***********

Биз эмне кылганыбыз, биздин LED тилкесибиздин светодиоддорду өчүрүү үчүн ритмди түзүү болчу, кийинки кадамда биз муну аткаруу үчүн кодду кошобуз.

9 -кадам: Артка саноо

Бул кадамда: биз ар бир секундда (же сиз койгон аралыктагы) тилкенин аягындагы БИР Светодиодду, биздин бардык светодиоддорубуз өчмөйүнчө, өчүрө тургандыгыбызды текшере турган функцияны жасайбыз.

Биз "leds" деп аталган "int" түзөбүз. Бул кийинчерээк таймерибизге дагы канча ледди өчүрүү керектигин айтат.

Void setup () үстүндөгү төмөнкү кодду кошуңуз:

int leds = LED_COUNT-1; // канча пиксель күйгүзүлүшү керек экенин айтат

Эми 'timer ();' функциясын кошолу, бул секунд сайын жарыкты өчүрүп коёт

Төмөндөгү veds ledsOn () кодун кошуңуз:

жараксыз таймер () {strip.setPixelColor (leds, 0, 0, 0);

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

Биз колдонуучуга таймер бардык чырактар күйүп бүткөндөн кийин жасалат деген пикир билдиргибиз келет. 'Blinkie ();' менен таймер бүткөндөн кийин светодиоддор кызыл түстө өчүп калат!

Void setup () үстүндөгү төмөнкү кодду кошуңуз:

int blinkStatus = 1; // блинкиге айтат (); жарыктын иштеши же өчүшү керек

Төмөндөгү кодду кошуу void timer ():

боштук blinkie () {if (blinkStatus == 1) {

blinkStatus = 0; strip.clear (); } else {blinkStatus = 1; for (int i = 0; i <strip.numPixels (); i ++) {// Stripтеги ар бир пиксел үчүн… strip.setPixelColor (i, 255, 0, 0); // Пикселдин түсүн коюңуз (RAM менен) strip.show (); // Тасманы дал келтирүү үчүн жаңыртыңыз}}}}

Акыры биз боштук циклибиздеги функцияны чакырышыбыз керек ();, Биз 8 -кадамга кошкон TIMER RYTHM эсиңиздеби? Бул if операторунда биз timer () функциясын чакырабыз.

TIMER RYTHM эми мындай болушу керек:

// TIMER RYTHM баштоо ***************************************** *********

if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis; таймер (); strip.show ();} // TIMER RYTHM аяктоо ************************************ ******************

Эми бул кодду жүктөңүз!

Учурда сиздин LED тилкесиңиз секундасына 1 жарык диодун өчүрүп, ал бүткөндө кызыл күйүп турушу керек…

Эми бул эненин сүйүүсүн пульт менен башкаралы!

10 -кадам: Алыстан башкарылуучу кылыңыз: I бөлүк

Алыстан башкарылуучу кылыңыз: I бөлүк
Алыстан башкарылуучу кылыңыз: I бөлүк
Аны алыстан башкарылуучу кылыңыз: I бөлүк
Аны алыстан башкарылуучу кылыңыз: I бөлүк

Бизде таймер бар, баары сонун жана бирок мен сизге телефонуңуз менен башкара аласыз деп убада бергем? Долбоорубуздун акыркы этабына кирели: таймерибизди алыстан башкаруучу кылуу.

Adafruit өтмөгүңүз дагы эле ачыкпы? Келгиле, кайра io.adafruit.com сайтына баралы жана таймер интерфейсинин тактасына өтүп, жаңы блок түзөлү: TOGGLE

  1. Өткөргүчтү TIMER түрмөгүнө туташтырыңыз
  2. КҮЙГҮЗҮҮ маанисин төмөнкүгө коюңуз: 1
  3. ӨЧҮРҮҮ маанисин коюңуз: 0

Мунун себеби, Adafruit биздин NodeMCUга текст маалыматын жөнөтпөйт, болгону сандар.

Кааласаңыз, Toggleге ат бере аласыз, балким: 'On/Off switch'

Эми кайра Arduino IDEге кайрылалы

Биздин код жаңырганына ынануу үчүн, кодубузду дагы бир жолу ЖҮКТӨП алалы.

СЕРИЯ МОНИТОРУН АЧЫҢЫЗ, ал жүктөлүп бүткөндөн кийин жана биздин Адафрут тактасына TOGGLE баскыла. Биз азыр сериялык мониторубузда ушундай нерсени көрүшүбүз керек:

алынды <- 0 алынды <- 1 алынды <- 0 алынды <- 1 алынды <- 0

Бул биздин NodeMCUго көзөмөлдү жөнөтө алабыз дегенди билдирет!

Эгерде сиз бул билдирүүлөрдү албай жатсаңыз, config.h ичиндеги Adafruit маалыматтарыңыздын туура экендигин текшериңиз.

11 -кадам: Алыстан башкарылуучу кылыңыз: II бөлүк

Эми калган көзөмөлүбүз менен бир нерсе кылуу калды.

Бул үчүн биз vimal loop () ичиндеги TIMER RYTHM if операторун өзгөртүшүбүз керек; бир аз.

Биз NodeMCUга таймерди Adafruitтен '1' (башкача айтканда: ON) алгандан кийин гана башташы керектигин айтабыз.

Алгач Adafruit бизге жөнөткөн маалыматтарды чогулталы

Void setup () үстүндөгү төмөнкү кодду кошуңуз:

int adaData; // AdaFruit бизге жөнөткөн маалыматтарды чогултат

Эми чындыгында ошол маалыматтарды чогулталы

Void handleMessage () ичине төмөнкү кодду кошуңуз:

adaData = data-> toInt ();

Келгиле, боштук циклибизди өзгөртөлү ();

TIMER RYTHM эми мындай болушу керек:

// TIMER RYTHM баштоо ***************************************** ********* if (currentMillis - previousMillis> = интервал) {previousMillis = currentMillis; if (adaData == 0) {Serial.println ("мен иштебейм"); } else if (adaData == 1) {таймер (); } strip.show (); } // end TIMER RYTHM ****************************************** ************

Кодуңузду ЖҮКТӨҢҮЗ…

Эми сиз таймерди Adafruitтеги которгучту колдонуу менен күйгүзүп жана өчүрө алышыңыз керек!

12 -кадам: Around Play! Биз бүттүк… же бизби?

Азыр сизде толук иштей турган алыскы таймер болушу керек! Эгер бул сиз үчүн болсо, анда бул долбоор менен бирге келгениңиз үчүн рахмат!

Эгер сиз дагы бир аз уланткыңыз келсе, кийинки бир нече кадамдарда биз таймерибизге RESET баскычын кошобуз!

13 -кадам: ЭКСТРА: Көз ирмемдик баскычты түзүү

EXTRA: Көз ирмемдик баскычты түзүү
EXTRA: Көз ирмемдик баскычты түзүү

Келгиле, биздин тактага кайтып келели. Эми биз кайрадан жаңы блокту түзгүбүз келет.

  1. Бир көз ирмем баскычын түзүү
  2. Аны "таймер" түрмөгүнө туташтырыңыз
  3. Пресстин маанисин төмөнкүгө коюңуз: 2
  4. Чыгаруу маанисин алып салуу
  5. Жакшы түс бер!

Ыңгайлуу учурдагы баскыч "Reset" деп аталат!

Бул блокту түзгөнүңүздөн кийин, аны сынап көрүңүз, эгерде сиз алсаңыз, баскыч иштейт:

алынган <- 2

Сиздин сериялык мониторуңузда.

Эгер бул билдирүүнү көрө албасаңыз, эскизди кайра жүктөп көрүңүз

Step 14: EXTRA: Reset Function кошуу

Баштапкы абалга келтирүү баскычын жасоо үчүн, биз бардык светодиоддорду баштапкы абалына кайтаруучу функцияны кошушубуз керек.

Void blinkie () астына төмөнкү кодду кошуңуз:

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

Эми биздин функцияны чакыруу калды, ал үчүн биз TIMER RYTHMди акыркы жолу алмаштырышыбыз керек

TIMER RYTHM эми мындай болушу керек:

// TIMER RYTHM баштоо ***************************************** ********* if (currentMillis - previousMillis> = интервал) {мурункуMillis = currentMillis if (adaData == 0) {Serial.println ("мен иштебей жатам"); } else if (adaData == 1) {таймер (); } else if (adaData == 2) {rerun (); } strip.show (); } // end TIMER RYTHM ****************************************** ************

Кодуңузду ЖҮКТӨҢҮЗ…

Эми сиз баскычты басуу менен таймерди баштапкы абалга келтиришиңиз керек!

Сунушталууда: