
Un articol despre cum să transformi un dispozitiv chinezesc ieftin într-un controler logic programabil. Un astfel de dispozitiv își va găsi aplicația atât în automatizarea de acasă, cât și ca activitate educațională în cadrul orelor de informatică.
Ca informație, în mod implicit, programul Sonoff Basic funcționează cu aplicația mobilă prin intermediul serviciului cloud chinezesc; după modificarea propusă, toate interacțiunile ulterioare cu acest dispozitiv vor fi posibilă în browser.
Secțiunea I. Conectarea Sonoff la serviciul MGT24
Pasul 1. Crearea unui panou de control
Înregistrați-vă pe site-ul (dacă nu sunteți deja înregistrați) și conectați-vă la contul dumneavoastră.
Autentificare
Pentru a crea un panou de control pentru noul dispozitiv, apăsați butonul „+”.
Exemplu de creare a unui panou
După ce panoul va fi creat, acesta va apărea în lista panourilor dumneavoastră.
În tab-ul „Instalare” al panoului creat, căutați câmpurile „ID dispozitiv” și „Cheia de autorizare”; aceste informații vor fi necesare la configurarea dispozitivului Sonoff.
Exemplu de tab
Pasul 2. Reprogramarea dispozitivului
Utilizând utilitarul încărcați firmware-ul în dispozitiv; pentru aceasta, veți avea nevoie de un convertor USB-TTL. Aici și .
Pasul 3. Configurarea dispozitivului
Aplicați alimentarea la dispozitiv; după ce LED-ul s-a aprins, apăsați butonul și mențineți-l apăsat până când LED-ul începe să clipească uniform.
În acel moment, va apărea o nouă rețea wi-fi numită „PLC Sonoff Basic”; conectați computerul la această rețea.
Decodificarea indicației LED
Indicația LED
Starea dispozitivului
clipește de două ori periodic
fără conexiune la router
luminează continuu
conexiune stabilită cu router-ul
clipește uniform periodic
modul de acces point wi-fi
stins
fără alimentare
Deschideți un browser de internet și introduceți în bara de adrese textul „192.168.4.1”; accesați pagina de setări a parametrilor rețelei dispozitivului.
Completați câmpurile astfel:
- „Numele rețelei” și „Parola” (pentru a conecta dispozitivul la router-ul wi-fi de acasă).
- „ID dispozitiv” și „Cheia de autorizare” (pentru autorizarea dispozitivului pe serviciul MGT24).
Exemplu de setări ale parametrilor rețelei dispozitivului
Salvați setările și reporniți dispozitivul.
Aici .
Pasul 4. Conectarea senzorilor (opțional)
Firmware-ul curent suportă până la patru senzori de temperatură ds18b20. Aici găsiți informații despre montarea senzorilor. Se pare că acest pas va fi cel mai dificil, deoarece va necesita dexteritate manuală și un fier de lipit.
Partea II. Programarea vizuală
Pasul 1. Crearea scenariilor
Ca mediu de programare se folosește , mediu ușor de învățat, astfel încât pentru a crea scenarii simple nu este nevoie să fiți programator.
Am adăugat blocuri specializate pentru citirea și scrierea parametrilor dispozitivului. Accesul la orice parametru se face după nume. Pentru parametrii dispozitivelor la distanță se folosesc nume compuse: „parametru@dispozitiv”.
Lista derulantă a parametrilor
Exemplu de scenariu pentru activarea și dezactivarea ciclică a unei sarcini (1Hz):

Exemplu de scenariu care sincronizează funcționarea a două dispozitive separate. Anume, releul dispozitivului țintă replică activitatea releului dispozitivului la distanță.

Scenariul pentru termostat (fără histerezis):

Pentru a crea scenarii mai complexe, se pot folosi variabile, bucle, funcții (cu argumente) și alte construcții. Nu voi detalia totul aici, pe internet sunt deja destule .
Pasul 2. Ordinea de executare a scenariilor
Scenariul funcționează în mod continuu, iar odată ce ajunge la final, se relansează. Există două blocuri care pot suspenda temporar funcționarea scenariului: „delay” și „pause”.
Blocul „delay” este folosit pentru întârzieri în milisecunde sau microsecunde. Acest bloc respectă strict intervalul de timp, blocând funcționarea întregului dispozitiv.
Blocul „pause” este folosit pentru întârzieri de câteva secunde (poate chiar mai puțin), și nu blochează executarea altor procese în dispozitiv.
Dacă scenariul conține un ciclu infinit, fără a include un „pause” în interiorul său, interpretul va iniția automat o mică pauză.
În cazul în care stiva de memorie alocată se epuizează, interpretul va opri executarea unui astfel de scenariu „foarte consumator” (fiți atenți cu funcțiile recursive).
Pasul 3. Depanarea scenariilor
Pentru depanarea unui script deja încărcat în dispozitiv, se poate porni urmărirea programului pas cu pas. Acest lucru este extrem de util atunci când comportamentul scriptului nu este așa cum a intenționat autorul. În acest caz, urmărirea permite autorului să găsească rapid sursa problemei și să corecteze eroarea din script.
Scriptul de calcul al factorialului în modul de depanare:

Instrumentul de depanare este foarte simplu și constă din trei butoane principale: «start», «un pas înainte» și «oprire» (să nu uităm de «intrare» și «ieșire» din modul de depanare). Pe lângă urmărirea pas cu pas, se poate stabili un punct de oprire pe orice bloc (clic pe bloc).
Pentru a afișa pe monitor valorile curente ale parametrilor (senzori, relee), utilizați blocul «print».
Aici despre utilizarea debugger-ului.
Secțiune pentru curioși. Ce se află sub capotă?
Pentru ca scripturile să funcționeze pe dispozitivul țintă, a fost dezvoltat un interpret de bytecode și un asamblor cu 38 de instrucțiuni. În codul sursă blockly a fost integrat un generator de cod specializat care convertește blocurile vizuale în instrucțiuni de asamblare. Ulterior, acest program de asamblare este transformat în bytecode și trimis dispozitivului pentru execuție.
Arhitectura acestei mașini virtuale este destul de simplă și nu are sens să o descriem în detaliu, pe internet veți găsi multe articole despre proiectarea celor mai simple mașini virtuale.
Pentru stiva mașinii mele virtuale, obisnuiesc să aloc 1000 de bytes, ceea ce este suficient. Desigur, recursiile profunde pot epuiza orice stivă, dar este puțin probabil să aibă vreo aplicabilitate practică.
Bytecode-ul final este destul de compact. Ca exemplu, bytecode-ul pentru calculul aceluiași factorial este de doar 49 de bytes. Aceasta este forma sa vizuală de prezentare:

Și aceasta 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 nu are o valoare practică, atunci tab-ul «javascript», dimpotrivă, oferă o formă mai familiară decât blocurile vizuale:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
În ceea ce privește performanța. Când am rulat cel mai simplu scenariu al luminii intermitente, pe ecranul osciloscopului am obținut un meandru de 47 kHz (la o frecvență de ceas a procesorului de 80 MHz).


Consider că acesta este un rezultat bun, cel puțin această viteză este aproape de zece ori mai rapidă decât și .
Partea finală
În concluzie, aș spune că utilizarea scenariilor ne permite nu doar să programăm logica de funcționare a unui dispozitiv individual, ci și să conectăm mai multe dispozitive într-un singur mecanism, unde unele dispozitive influențează comportamentul altora.
De asemenea, voi menționa că metoda aleasă de stocare a scenariilor (direct în dispozitive, nu pe server) facilitează trecerea dispozitivelor funcționând deja pe un alt server, de exemplu, pe un Raspberry acasă, aici .
Închei aici, aș fi bucuros să aud sugestii și critici constructive.
Sursa: habr.com
