Հոդված այն մասին, թե ինչպես ստեղծել ծրագրավորվող տրամաբանական վերահսկիչ էժան չինական սարքից: Նման սարքն իր կիրառումը կգտնի ինչպես տան ավտոմատացման, այնպես էլ դպրոցական համակարգչային գիտության գործնական պարապմունքների մեջ:
Տեղեկատվության համար, լռելյայնորեն Sonoff Basic ծրագիրը աշխատում է բջջային հավելվածի հետ չինական ամպային ծառայության միջոցով, առաջարկվող փոփոխությունից հետո այս սարքի հետ հետագա բոլոր փոխգործակցությունը հնարավոր կլինի դիտարկիչում:
Բաժին I. Sonoff-ի միացում MGT24 ծառայությանը
Քայլ 1. Ստեղծեք կառավարման վահանակ
Գրանցվեք կայքում
Մուտք գործել
Նոր սարքի համար կառավարման վահանակ ստեղծելու համար սեղմեք «+» կոճակը:
Վահանակի ստեղծման օրինակ
Վահանակը ստեղծելուց հետո այն կհայտնվի ձեր վահանակների ցանկում:
Ստեղծված վահանակի «Կարգավորում» ներդիրում գտեք «Սարքի ID» և «Լիազորման բանալի» դաշտերը, ապագայում այս տեղեկատվությունը կպահանջվի Sonoff սարքը կարգավորելիս:
Ներդիրի օրինակ
Քայլ 2. Թարմացրեք սարքը
Օգտագործելով կոմունալ
Քայլ 3. Սարքի կարգավորում
Սարքի վրա հոսանք միացրեք, լուսադիոդը վառվելուց հետո սեղմեք կոճակը և սեղմած պահեք այն, մինչև LED-ը սկսի պարբերաբար հավասարաչափ բռնկվել:
Այս պահին կհայտնվի նոր wi-fi ցանց, որը կոչվում է «PLC Sonoff Basic», միացրեք ձեր համակարգիչը այս ցանցին:
LED ցուցիչի բացատրություն
LED ցուցում
Սարքի կարգավիճակը
պարբերական կրկնակի թարթում
կապ չկա երթուղիչի հետ
փայլում է անընդհատ
կապ հաստատված երթուղիչի հետ
պարբերական համազգեստի փայլատակում
wi-fi մուտքի կետի ռեժիմ
դուրս հանել
Էլեկտրաէներգիայի մատակարարում չկա
Բացեք ինտերնետ բրաուզերը և մուտքագրեք «192.168.4.1» տեքստը հասցեագոտում, գնացեք սարքի ցանցի կարգավորումների էջ:
Լրացրեք դաշտերը հետևյալ կերպ.
- «Ցանցի անուն» և «Գաղտնաբառ» (սարքը տան wi-fi երթուղիչին կապելու համար):
- «Սարքի ID» և «Լիցենզավորման բանալի» (սարքը MGT24 ծառայության վրա լիազորելու համար):
Սարքի ցանցի պարամետրերը սահմանելու օրինակ
Պահպանեք կարգավորումները և վերագործարկեք սարքը:
Այստեղ
Քայլ 4. Սենսորների միացում (ըստ ցանկության)
Ներկայիս որոնվածն աջակցում է մինչև չորս ds18b20 ջերմաստիճանի տվիչների: Այստեղ
Բաժին II. Տեսողական ծրագրավորում
Քայլ 1. Ստեղծեք սցենարներ
Օգտագործվում է որպես ծրագրավորման միջավայր
Ես ավելացրեցի մասնագիտացված բլոկներ սարքի պարամետրերը գրելու և կարդալու համար: Ցանկացած պարամետր հասանելի է անունով: Հեռավոր սարքերի պարամետրերի համար օգտագործվում են բարդ անվանումներ՝ «parameter@device»:
Ընտրանքների բացվող ցանկ
Բեռի ցիկլային միացման և անջատման օրինակ սցենար (1 Հց).
Երկու առանձին սարքերի աշխատանքը համաժամացնող սցենարի օրինակ: Մասնավորապես, թիրախային սարքի ռելեը կրկնում է հեռակառավարվող սարքի ռելեի աշխատանքը:
Սցենար թերմոստատի համար (առանց հիստերեզի).
Ավելի բարդ սկրիպտներ ստեղծելու համար կարող եք օգտագործել փոփոխականներ, հանգույցներ, ֆունկցիաներ (արգումենտներով) և այլ կառուցվածքներ։ Ես այս ամենը մանրամասն չեմ նկարագրի այստեղ, ցանցում արդեն բավականին շատ բան կա:
Քայլ 2. Սցենարների հերթականություն
Սցենարը շարունակաբար աշխատում է, և հենց որ հասնում է իր ավարտին, այն նորից սկսում է։ Այս դեպքում կա երկու բլոկ, որոնք կարող են ժամանակավորապես դադարեցնել սցենարը՝ «հետաձգել» և «դադարեցնել»:
«Հապաղման» բլոկը օգտագործվում է միլիվայրկյան կամ միկրովայրկյան ուշացումների համար: Այս բլոկը խստորեն պահպանում է ժամանակային միջակայքը՝ արգելափակելով ամբողջ սարքի աշխատանքը։
«Դադար» բլոկը օգտագործվում է երկրորդ (կամ ավելի քիչ) ուշացումների համար, և այն չի արգելափակում սարքում այլ գործընթացների կատարումը:
Եթե սցենարն ինքնին պարունակում է անսահման օղակ, որի մարմինը չի պարունակում «դադար», թարգմանիչը ինքնուրույն նախաձեռնում է կարճ դադար:
Եթե հատկացված հիշողության կույտը սպառված է, թարգմանիչը կդադարեցնի նման ուժային սկրիպտի կատարումը (զգույշ եղեք ռեկուրսիվ գործառույթների հետ):
Քայլ 3. Սկրիպտների վրիպազերծում
Սարքում արդեն բեռնված սկրիպտը վրիպազերծելու համար կարող եք քայլ առ քայլ գործարկել ծրագրի հետքը: Սա կարող է չափազանց օգտակար լինել, երբ սցենարի վարքագիծը տարբերվում է հեղինակի մտադրությունից: Այս դեպքում հետագծումը թույլ է տալիս հեղինակին արագ գտնել խնդրի աղբյուրը և ուղղել սցենարի սխալը։
Վրիպազերծման ռեժիմում գործոնը հաշվարկելու սցենար.
Վրիպազերծման գործիքը շատ պարզ է և բաղկացած է երեք հիմնական կոճակներից՝ «սկսել», «մեկ քայլ առաջ» և «դադարեցնել» (չմոռանանք նաև «մուտք» և «ելք» կարգաբերման ռեժիմների մասին): Բացի քայլ առ քայլ հետագծումից, ցանկացած բլոկի վրա կարող եք սահմանել ընդմիջման կետ (կտտացնելով բլոկի վրա):
Մոնիտորում պարամետրերի (սենսորներ, ռելեներ) ընթացիկ արժեքները ցուցադրելու համար օգտագործեք «տպել» բլոկը:
Այստեղ
Բաժին հետաքրքրասերների համար. Ի՞նչ կա գլխարկի տակ:
Որպեսզի սկրիպտները աշխատեն թիրախային սարքի վրա, մշակվել են բայթկոդերի թարգմանիչ և 38 հրահանգներով հավաքող։ Blockly-ի սկզբնական կոդը ունի մասնագիտացված կոդերի գեներատոր, որը ներկառուցված է, որը տեսողական բլոկները վերածում է հավաքման հրահանգների: Հետագայում այս assembler ծրագիրը վերածվում է բայթկոդի և փոխանցվում սարքին կատարման համար:
Այս վիրտուալ մեքենայի ճարտարապետությունը բավականին պարզ է, և առանձնահատուկ իմաստ չկա այն նկարագրելու համար, ինտերնետում դուք կգտնեք բազմաթիվ հոդվածներ ամենապարզ վիրտուալ մեքենաների նախագծման մասին:
Ես սովորաբար հատկացնում եմ 1000 բայթ իմ վիրտուալ մեքենայի կույտի համար, ինչը բավական է խնայելու համար: Իհարկե, խորը ռեկուրսիաները կարող են սպառել ցանկացած կույտ, բայց դժվար թե դրանք գործնական կիրառություն ունենան:
Ստացված բայթկոդը բավականին կոմպակտ է: Որպես օրինակ՝ նույն ֆակտորիալը հաշվարկելու բայթկոդն ընդամենը 49 բայթ է։ Սա նրա տեսողական ձևն է.
Եվ սա նրա assembler ծրագիրը.
shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret
Եթե ներկայացման հավաքման ձևը որևէ գործնական արժեք չունի, ապա «javascrit» ներդիրը, ընդհակառակը, ավելի ծանոթ տեսք է տալիս, քան տեսողական բլոկները.
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Կատարման վերաբերյալ. Երբ ես գործարկեցի ամենապարզ ֆլեշ սկրիպտը, ես ստացա 47 կՀց քառակուսի ալիք օսցիլոսկոպի էկրանին (80 ՄՀց պրոցեսորի ժամացույցի արագությամբ):
Կարծում եմ՝ սա լավ արդյունք է, համենայն դեպս այս արագությունը գրեթե տասն անգամ ավելի արագ է, քան
Եզրակացության եզրափակիչ մասը
Ամփոփելով, ես կասեմ, որ սկրիպտների օգտագործումը թույլ է տալիս ոչ միայն ծրագրավորել առանձին սարքի շահագործման տրամաբանությունը, այլև հնարավորություն է տալիս մի քանի սարքեր միացնել մեկ մեխանիզմի մեջ, որտեղ որոշ սարքեր ազդում են մյուսների վարքագծի վրա:
Ես նաև նշում եմ, որ սկրիպտները պահելու ընտրված մեթոդը (ուղղակիորեն իրենց սարքերում, և ոչ սերվերի վրա) պարզեցնում է արդեն աշխատող սարքերի անցումը այլ սերվերի, օրինակ՝ տան Raspberry-ի, այստեղ
Այսքանը, ուրախ կլինեմ լսել խորհուրդներ և կառուցողական քննադատություն:
Source: www.habr.com