Programare vizuală pentru Sonoff Basic

Programare vizuală pentru Sonoff Basic
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 mgt24 (dacă nu sunteți deja înregistrați) și conectați-vă la contul dumneavoastră.
AutentificareProgramare vizuală pentru Sonoff Basic

Pentru a crea un panou de control pentru noul dispozitiv, apăsați butonul „+”.
Exemplu de creare a unui panouProgramare vizuală pentru Sonoff Basic

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 tabProgramare vizuală pentru Sonoff Basic

Pasul 2. Reprogramarea dispozitivului

Utilizând utilitarul XTCOM_UTIL încărcați firmware-ul PLC Sonoff Basic în dispozitiv; pentru aceasta, veți avea nevoie de un convertor USB-TTL. Aici instrucțiunea și un videoclip instrucțional.

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 dispozitivuluiProgramare vizuală pentru Sonoff Basic

Salvați setările și reporniți dispozitivul.
Aici un videoclip instrucțional.

Pasul 4. Conectarea senzorilor (opțional)

Firmware-ul curent suportă până la patru senzori de temperatură ds18b20. Aici un videoclip instrucțional 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 Blockly, 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 parametrilorProgramare vizuală pentru Sonoff Basic

Exemplu de scenariu pentru activarea și dezactivarea ciclică a unei sarcini (1Hz):
Programare vizuală pentru Sonoff Basic

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

Scenariul pentru termostat (fără histerezis):
Programare vizuală pentru Sonoff Basic

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 materiale educaționale despre Blockly.

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:
Programare vizuală pentru Sonoff Basic

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 video de prezentare 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:
Programare vizuală pentru Sonoff Basic

Ș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).
Programare vizuală pentru Sonoff BasicProgramare vizuală pentru Sonoff Basic
Consider că acesta este un rezultat bun, cel puțin această viteză este aproape de zece ori mai rapidă decât Lua și Espruino.

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 instrucțiunea.

Închei aici, aș fi bucuros să aud sugestii și critici constructive.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster