Un articol despre cum să creați un controler logic programabil dintr-un dispozitiv chinezesc ieftin. Un astfel de dispozitiv își va găsi utilizarea atât în automatizarea locuinței, cât și ca ore practice în informatica școlară.
Pentru referință, programul Sonoff Basic funcționează implicit cu o aplicație mobilă printr-un serviciu cloud chinezesc; după modificarea propusă, orice interacțiune ulterioară cu acest dispozitiv va fi posibilă în browser.
Secțiunea I. Conectarea Sonoff la serviciul MGT24
Pasul 1: Creați un panou de control
Inregistreaza-te pe site
Login Membri
Pentru a crea un panou de control pentru un dispozitiv nou, faceți clic pe butonul „+”.
Exemplu de creare a unui panou
Odată creat panoul, acesta va apărea în lista dvs. de panouri.
În fila „Configurare” a panoului creat, găsiți câmpurile „ID dispozitiv” și „Cheie de autorizare”; în viitor, aceste informații vor fi necesare la configurarea dispozitivului Sonoff.
Exemplu de filă
Pasul 2. Reflash dispozitivul
Folosind utilitarul
Pasul 3. Configurarea dispozitivului
Aplicați alimentarea dispozitivului, după ce LED-ul se aprinde, apăsați butonul și țineți-l apăsat până când LED-ul începe să clipească periodic în mod uniform.
În acest moment, va apărea o nouă rețea wi-fi numită „PLC Sonoff Basic”, conectați computerul la această rețea.
Explicația indicației LED
Indicatie LED
Starea dispozitivului
intermitent dublu periodic
nicio conexiune la router
strălucește continuu
conexiunea stabilită cu routerul
intermitent uniform periodic
modul punct de acces wi-fi
stins
Fără alimentare
Deschideți un browser de internet și introduceți textul „192.168.4.1” în bara de adrese, accesați pagina de setări de rețea a dispozitivului.
Completați câmpurile după cum urmează:
- „Numele rețelei” și „Parola” (pentru a conecta dispozitivul la routerul Wi-Fi de acasă).
- „ID dispozitiv” și „Cheie de autorizare” (pentru a autoriza dispozitivul pe serviciul MGT24).
Exemplu de setare a parametrilor de rețea a dispozitivului
Salvați setările și reporniți dispozitivul.
Aici
Pasul 4. Conectarea senzorilor (opțional)
Firmware-ul actual acceptă până la patru senzori de temperatură ds18b20. Aici
Secțiunea II. Programare vizuală
Pasul 1: Creați scripturi
Folosit ca mediu de programare
Am adăugat blocuri specializate pentru scrierea și citirea parametrilor dispozitivului. Orice parametru este accesat după nume. Pentru parametrii dispozitivelor de la distanță se folosesc nume compuse: „parametru@dispozitiv”.
Listă derulantă de opțiuni
Exemplu de scenariu pentru pornirea și oprirea ciclică a sarcinii (1 Hz):
Un exemplu de script care sincronizează funcționarea a două dispozitive separate. Și anume, releul dispozitivului țintă repetă funcționarea releului dispozitivului la distanță.
Scenariu pentru termostat (fără histerezis):
Pentru a crea scripturi mai complexe, puteți utiliza variabile, bucle, funcții (cu argumente) și alte constructe. Nu voi descrie toate acestea în detaliu aici; sunt deja destul de multe pe net.
Pasul 2: Ordinea scripturilor
Scriptul rulează continuu și, de îndată ce ajunge la final, pornește din nou. În acest caz, există două blocuri care pot întrerupe temporar scriptul, „întârziere” și „pauză”.
Blocul „întârziere” este utilizat pentru întârzieri în milisecunde sau microsecunde. Acest bloc menține strict intervalul de timp, blocând funcționarea întregului dispozitiv.
Blocul „pauză” este utilizat pentru a doua (sau mai puțin) întârzieri și nu blochează execuția altor procese în dispozitiv.
Dacă scriptul în sine conține o buclă infinită, al cărei corp nu conține „pauză”, interpretul inițiază independent o scurtă pauză.
Dacă stiva de memorie alocată este epuizată, interpretul va înceta să execute un astfel de script consumator de energie (ai grijă cu funcțiile recursive).
Pasul 3: Depanarea scripturilor
Pentru a depana un script care a fost deja încărcat în dispozitiv, puteți rula un program de urmărire pas cu pas. Acest lucru poate fi extrem de util atunci când comportamentul scenariului s-a dovedit a fi diferit de ceea ce intenționa autorul. În acest caz, urmărirea permite autorului să găsească rapid sursa problemei și să corecteze eroarea din script.
Scenariu pentru calcularea factorialului în modul de depanare:
Instrumentul de depanare este foarte simplu și constă din trei butoane principale: „pornire”, „un pas înainte” și „oprire” (să nu uităm nici de modul de depanare „intrare” și „ieșire”). Pe lângă urmărirea pas cu pas, puteți seta un punct de întrerupere pentru orice bloc (făcând clic pe bloc).
Pentru a afișa valorile curente ale parametrilor (senzori, relee) în monitor, utilizați blocul „print”.
Aici
Secțiune pentru curioși. Ce este sub capotă?
Pentru ca scripturile să funcționeze pe dispozitivul țintă, au fost dezvoltate un interpret de bytecode și un asamblator cu 38 de instrucțiuni. Codul sursă al lui Blockly are încorporat un generator de cod specializat care convertește blocurile vizuale în instrucțiuni de asamblare. Ulterior, acest program de asamblare este convertit în bytecode și transferat pe dispozitiv pentru execuție.
Arhitectura acestei mașini virtuale este destul de simplă și nu are rost să o descriem; pe Internet veți găsi multe articole despre proiectarea celor mai simple mașini virtuale.
De obicei, aloca 1000 de octeți pentru stiva mașinii mele virtuale, ceea ce este suficient pentru a economisi. Desigur, recursiunile profunde pot epuiza orice stivă, dar este puțin probabil să aibă vreo utilizare practică.
Bytecode rezultat este destul de compact. De exemplu, codul de octeți pentru calcularea aceluiași factorial este de numai 49 de octeți. Aceasta este forma sa vizuală:
Și acesta este programul său de asamblare:
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
Dacă forma de asamblare de reprezentare nu are nicio valoare practică, atunci fila „javascrit”, dimpotrivă, oferă un aspect mai familiar decât blocurile vizuale:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
In ceea ce priveste performanta. Când am rulat cel mai simplu script flasher, am primit o undă pătrată de 47 kHz pe ecranul osciloscopului (la o viteză a procesorului de 80 MHz).
Cred că acesta este un rezultat bun, cel puțin această viteză este de aproape zece ori mai mare decât
Finală parte
Pentru a rezuma, voi spune că utilizarea scripturilor ne permite nu numai să programăm logica funcționării unui dispozitiv separat, ci face și posibilă conectarea mai multor dispozitive într-un singur mecanism, unde unele dispozitive influențează comportamentul altora.
De asemenea, observ că metoda aleasă de stocare a scripturilor (direct în dispozitivele în sine, și nu pe server) simplifică trecerea dispozitivelor deja funcționale pe un alt server, de exemplu la un Raspberry de acasă, aici
Atâta tot, mă voi bucura să aud sfaturi și critici constructive.
Sursa: www.habr.com