Programare vizuală pentru Sonoff Basic

Programare vizuală pentru Sonoff Basic
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 mgt24 (dacă nu sunteți deja înregistrat) și conectați-vă folosind contul dvs.
Login MembriProgramare vizuală pentru Sonoff Basic

Pentru a crea un panou de control pentru un dispozitiv nou, faceți clic pe butonul „+”.
Exemplu de creare a unui panouProgramare vizuală pentru Sonoff Basic

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

Pasul 2. Reflash dispozitivul

Folosind utilitarul XTCOM_UTIL descărcați firmware-ul PLC Sonoff Basic la dispozitiv, pentru aceasta veți avea nevoie de un convertor USB-TTL. Aici instrucție и Instrucțiuni video.

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

Salvați setările și reporniți dispozitivul.
Aici Instrucțiuni video.

Pasul 4. Conectarea senzorilor (opțional)

Firmware-ul actual acceptă până la patru senzori de temperatură ds18b20. Aici Instrucțiuni video pentru instalarea senzorilor. Aparent, acest pas va fi cel mai dificil, deoarece va necesita brațe drepte și un fier de lipit.

Secțiunea II. Programare vizuală

Pasul 1: Creați scripturi

Folosit ca mediu de programare Blockly, mediul este ușor de învățat, așa că nu trebuie să fii programator pentru a crea scripturi simple.

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

Exemplu de scenariu pentru pornirea și oprirea ciclică a sarcinii (1 Hz):
Programare vizuală pentru Sonoff Basic

Un exemplu de script care sincronizează funcționarea a două dispozitive separate. Și anume, releul dispozitivului țintă repetă funcționarea releului dispozitivului la distanță.
Programare vizuală pentru Sonoff Basic

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

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. material educațional despre Blockly.

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

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 video de prezentare generală despre utilizarea depanatorului.

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

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

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

Atâta tot, mă voi bucura să aud sfaturi și critici constructive.

Sursa: www.habr.com

Adauga un comentariu