Raksts par to, kā izveidot programmējamu loģisko kontrolieri no lētas ķīniešu ierīces. Šāda ierīce tiks izmantota gan mājas automatizācijā, gan kā praktiskās nodarbības skolas datorzinātnēs.
Uzziņai, pēc noklusējuma programma Sonoff Basic darbojas ar mobilo lietojumprogrammu, izmantojot Ķīnas mākoņpakalpojumu; pēc ierosinātās modifikācijas visa turpmākā mijiedarbība ar šo ierīci būs iespējama pārlūkprogrammā.
I sadaļa. Sonoff pievienošana pakalpojumam MGT24
1. darbība. Izveidojiet vadības paneli
Reģistrējieties vietnē
Pieslēgties
Lai izveidotu vadības paneli jaunai ierīcei, noklikšķiniet uz pogas “+”.
Paneļa izveides piemērs
Kad panelis ir izveidots, tas parādīsies jūsu paneļu sarakstā.
Izveidotā paneļa cilnē “Iestatīšana” atrodiet laukus “Ierīces ID” un “Autorizācijas atslēga”; turpmāk šī informācija būs nepieciešama, uzstādot Sonoff ierīci.
Cilnes piemērs
2. darbība. Atkārtoti uzzibešojiet ierīci
Lietojumprogrammas izmantošana
3. darbība. Ierīces iestatīšana
Ieslēdziet ierīci, pēc tam, kad iedegas LED, nospiediet pogu un turiet to nospiestu, līdz gaismas diode sāk periodiski vienmērīgi mirgot.
Šajā brīdī parādīsies jauns Wi-Fi tīkls ar nosaukumu “PLC Sonoff Basic”, savienojiet datoru ar šo tīklu.
LED indikācijas skaidrojums
LED indikācija
Ierīces statuss
periodiska dubultā mirgošana
nav savienojuma ar maršrutētāju
spīd nepārtraukti
izveidots savienojums ar maršrutētāju
periodiska vienota mirgošana
Wi-Fi piekļuves punkta režīms
dzēsts
Nav barošanas avota
Atveriet interneta pārlūkprogrammu un adreses joslā ievadiet tekstu “192.168.4.1”, dodieties uz ierīces tīkla iestatījumu lapu.
Aizpildiet laukus šādi:
- “Tīkla nosaukums” un “Parole” (lai saistītu ierīci ar mājas Wi-Fi maršrutētāju).
- “Ierīces ID” un “Autorizācijas atslēga” (lai autorizētu ierīci MGT24 pakalpojumā).
Ierīces tīkla parametru iestatīšanas piemērs
Saglabājiet iestatījumus un restartējiet ierīci.
Šeit
4. darbība. Sensoru pievienošana (pēc izvēles)
Pašreizējā programmaparatūra atbalsta līdz četriem ds18b20 temperatūras sensoriem. Šeit
II sadaļa. Vizuālā programmēšana
1. darbība. Izveidojiet skriptus
Izmanto kā programmēšanas vidi
Es pievienoju specializētus blokus ierīces parametru rakstīšanai un lasīšanai. Jebkuram parametram var piekļūt pēc nosaukuma. Attālināto ierīču parametriem tiek izmantoti salikti nosaukumi: “parameter@device”.
Nolaižamais opciju saraksts
Scenārija piemērs slodzes cikliskai ieslēgšanai un izslēgšanai (1 Hz):
Skripta piemērs, kas sinhronizē divu atsevišķu ierīču darbību. Proti, mērķa ierīces relejs atkārto attālās ierīces releja darbību.
Scenārijs termostatam (bez histerēzes):
Lai izveidotu sarežģītākus skriptus, varat izmantot mainīgos, cilpas, funkcijas (ar argumentiem) un citas konstrukcijas. Šeit es to visu sīkāk neaprakstīšu; tīklā jau ir diezgan daudz.
2. darbība: skriptu secība
Skripts darbojas nepārtraukti, un, tiklīdz tas sasniedz beigas, tas sākas no jauna. Šajā gadījumā ir divi bloki, kas var īslaicīgi apturēt skriptu: “aizkavēt” un “pauze”.
"Aizkaves" bloks tiek izmantots milisekundes vai mikrosekundes aizkavei. Šis bloks stingri uztur laika intervālu, bloķējot visas ierīces darbību.
“Pauzes” bloks tiek izmantots otrajai (vai mazākai) aizkavei, un tas nebloķē citu procesu izpildi ierīcē.
Ja pašā skriptā ir bezgalīga cilpa, kuras pamattekstā nav “pauzes”, tulks patstāvīgi ierosina īsu pauzi.
Ja piešķirtā atmiņas kaudze ir izsmelta, tulks pārtrauks izpildīt tik jaudas izsalkušu skriptu (esiet piesardzīgs ar rekursīvām funkcijām).
3. darbība: skriptu atkļūdošana
Lai atkļūdotu skriptu, kas jau ir ielādēts ierīcē, varat soli pa solim palaist programmas izsekošanu. Tas var būt ļoti noderīgi, ja skripta darbība atšķiras no autora iecerētā. Šajā gadījumā izsekošana ļauj autoram ātri atrast problēmas avotu un izlabot kļūdu skriptā.
Scenārijs faktoriāla aprēķināšanai atkļūdošanas režīmā:
Atkļūdošanas rīks ir ļoti vienkāršs un sastāv no trim galvenajām pogām: "sākt", "vienu soli uz priekšu" un "apturēt" (neaizmirsīsim arī par atkļūdošanas režīmu "ieiet" un "iziet"). Papildus soli pa solim izsekošanas varat iestatīt pārtraukuma punktu jebkuram blokam (noklikšķinot uz bloka).
Lai monitorā parādītu pašreizējās parametru (sensoru, releju) vērtības, izmantojiet bloku “drukāšana”.
Šeit
Sadaļa ziņkārīgajiem. Kas ir zem pārsega?
Lai skripti darbotos mērķa ierīcē, tika izstrādāts baitu koda tulks un montētājs ar 38 instrukcijām. Blockly pirmkodā ir iebūvēts specializēts koda ģenerators, kas vizuālos blokus pārvērš montāžas instrukcijās. Pēc tam šī montāžas programma tiek pārveidota par baitkodu un pārsūtīta uz ierīci izpildei.
Šīs virtuālās mašīnas arhitektūra ir diezgan vienkārša, un nav īpašas jēgas to aprakstīt, internetā jūs atradīsiet daudz rakstu par vienkāršāko virtuālo mašīnu projektēšanu.
Es parasti piešķiru 1000 baitus savas virtuālās mašīnas stekam, kas ir pietiekami, lai rezerves. Protams, dziļas rekursijas var izsmelt jebkuru kaudzi, taču maz ticams, ka tām būs praktiska izmantošana.
Iegūtais baitkods ir diezgan kompakts. Piemēram, baitu kods viena un tā paša faktoriāla aprēķināšanai ir tikai 49 baiti. Šī ir tā vizuālā forma:
Un šī ir viņa montāžas programma:
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
Ja attēlojuma montāžas formai nav praktiskas vērtības, cilne “javascrit”, gluži pretēji, piešķir pazīstamāku izskatu nekā vizuālie bloki:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Attiecībā uz veiktspēju. Palaižot visvienkāršāko mirgotāja skriptu, es saņēmu 47 kHz kvadrātveida vilni osciloskopa ekrānā (ar procesora takts frekvenci 80 MHz).
Es domāju, ka tas ir labs rezultāts, vismaz šis ātrums ir gandrīz desmit reizes lielāks nekā
Pēdējā daļa
Rezumējot, teikšu, ka skriptu izmantošana ļauj ne tikai programmēt atsevišķas ierīces darbības loģiku, bet arī ļauj savienot vairākas ierīces vienā mehānismā, kur dažas ierīces ietekmē citu uzvedību.
Es arī atzīmēju, ka izvēlētā skriptu glabāšanas metode (tieši pašās ierīcēs, nevis serverī) vienkāršo jau strādājošu ierīču pārslēgšanu uz citu serveri, piemēram, uz mājas Raspberry, šeit
Tas arī viss, priecāšos dzirdēt padomus un konstruktīvu kritiku.
Avots: www.habr.com