Un articulu nantu à cumu creà un controller logicu programmable da un dispositivu cinese economicu. Un tali dispusitivu truverà u so usu in l'automatizazione di a casa è cum'è classi pratiche in l'informatica scolastica.
Per riferimentu, per difettu, u prugramma Sonoff Basic funziona cù una applicazione mobile attraversu un serviziu di nuvola cinese; dopu a mudificazione pruposta, tutte l'interazzione ulteriore cù stu dispusitivu serà pussibule in u navigatore.
Sezzione I. Cunnette Sonoff à u serviziu MGT24
Passu 1: Crea un panel di cuntrollu
Registrate nantu à u situ
Login
Per creà un pannellu di cuntrollu per un novu dispositivu, cliccate nantu à u buttone "+".
Esempiu di creazione di un pannellu
Una volta u pannellu hè creatu, apparirà in a vostra lista di pannelli.
In a tabulazione "Setup" di u pannellu creatu, truvate i campi "Device ID" è "Authorization Key"; in u futuru, sta infurmazione serà necessaria quandu cunfigurà u dispositivu Sonoff.
Esempiu di tabulazione
Step 2. Reflash u dispusitivu
Utilizà l'utilità
Passu 3. Setup dispusitivu
Applicà u putere à u dispusitivu, dopu chì u LED si accende, appughjà u buttone è manteneu premutu finu à chì u LED cumencia à lampassi periodicamente in modu uniforme.
À questu mumentu, una nova rete wi-fi chjamata "PLC Sonoff Basic" apparirà, cunnette u vostru urdinatore à sta reta.
Spiegazione di l'indicazione LED
Indicazione LED
Status di u dispusitivu
doppia lampeggiante periodica
senza cunnessione cù u router
brilla continuamente
cunnessione stabilita cù u router
lampeggi uniformi periodici
Modu puntu di accessu Wi-Fi
spenti
Nisuna alimentazione elettrica
Aprite un navigatore Internet è inserite u testu "192.168.4.1" in a barra di indirizzu, andate à a pagina di paràmetri di a reta di u dispusitivu.
Riempite i campi cum'è seguita:
- "Nome di a rete" è "Password" (per ligà u dispusitivu à u vostru router wi-fi di casa).
- "Device ID" è "Authorization key" (per autorizà u dispusitivu nantu à u serviziu MGT24).
Esempiu di paràmetri di rete di u dispositivu
Salvà i paràmetri è reboot u dispusitivu.
hè
Passu 4. Cunnessu sensors (opcional)
U firmware attuale sustene finu à quattru sensori di temperatura ds18b20. Quì
Sezione II. prugrammazione visuale
Passu 1: Crea Scripts
Adupratu cum'è un ambiente di prugrammazione
Aghju aghjustatu blocchi specializati per scrive è leghje i paràmetri di u dispositivu. Ogni paràmetru hè accessu per nome. Per i paràmetri di i dispositi remoti, i nomi composti sò usati: "parameter@device".
Lista a tendina di opzioni
Esempiu di scenariu per accensione è spegnimentu ciclicu di a carica (1 Hz):
Un esempiu di un script chì sincroniza l'operazione di dui dispositi separati. Vale à dì, u relé di u dispusitivu di destinazione ripetiri u funziunamentu di u relé di u dispusitivu luntani.
Scenariu per u termostatu (senza isteresi):
Per creà scripts più cumplessi, pudete aduprà variàbili, loops, funzioni (cù argumenti) è altri custruzzioni. Ùn descriveraghju micca tuttu questu in dettagliu quì; ci hè digià assai in a reta.
Passu 2: Ordine di Scripts
U script corre continuamente, è appena ghjunghje à a so fine, principia di novu. In questu casu, ci sò dui blocchi chì ponu pause temporaneamente u script, "ritardu" è "pause".
U bloccu "ritardu" hè utilizatu per i ritardi di millisecondi o microsecondi. Stu bloccu mantene strettamente l'intervallu di tempu, bluccà u funziunamentu di tuttu u dispusitivu.
U bloccu "pausa" hè utilizatu per i secondi (o menu) ritardi, è ùn impedisce micca l'esekzione di altri prucessi in u dispusitivu.
Se u script stessu cuntene un ciclu infinitu, u corpu di quale ùn cuntene micca "pausa", l'interprete principia indipindente una pausa corta.
Se a pila di memoria attribuita hè esaurita, l'interprete cesserà di eseguisce un script cusì affamato di putere (attenzione à e funzioni recursive).
Passu 3: Debugging Scripts
Per debug un script chì hè digià stata caricata in u dispusitivu, pudete eseguisce una traccia di prugramma passu à passu. Questu pò esse estremamente utile quandu u cumpurtamentu di u script hè diventatu sfarente di ciò chì l'autore intendeva. In questu casu, a traccia permette à l'autore di truvà rapidamente a fonte di u prublema è corregge l'errore in u script.
Scenariu per u calculu factoriale in modu di debug:
U strumentu di debug hè assai simplice è hè custituitu di trè buttoni principali: "iniziu", "un passu avanti" è "stop" (ùn ci scurdemu ancu di "entra" è "esce" in u modu di debug. In più di u tracciamentu passu à passu, pudete stabilisce un puntu di ruptura in ogni blocu (cliccate nantu à u bloccu).
Per vede i valori attuali di i paràmetri (sensori, relè) in u monitor, utilizate u bloccu "stampa".
hè
Sezione per i curiosi. Chì ci hè sottu à u cappucciu ?
Per chì i scripts funzionanu nantu à u dispusitivu di destinazione, sò stati sviluppati un interprete di bytecode è un assembler cù 38 instructions. U codice fonte di Blockly hà un generatore di codice specializatu integratu chì converte i blocchi visuali in struzzioni di assemblea. In seguitu, stu prugramma assembler hè cunvertitu in bytecode è trasferitu à u dispusitivu per l'esekzione.
L'architettura di sta macchina virtuale hè abbastanza sèmplice è ùn ci hè micca un puntu particulare in a discrizzione; in Internet truverete assai articuli nantu à u disignu di e macchine virtuali più simplici.
Di solitu attribuite 1000 bytes per a pila di a mo macchina virtuale, chì hè abbastanza per risparmià. Di sicuru, i recursioni prufonde ponu esaurisce ogni stack, ma sò improbabile di avè qualchì usu praticu.
U bytecode risultante hè abbastanza compactu. Per esempiu, u bytecode per calculà u listessu fattoriale hè solu 49 bytes. Questa hè a so forma visuale:
È questu hè u so prugramma assembler:
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
Se a forma di rapprisintazioni di l'assemblea ùn hà micca un valore praticu, allora a tabulazione "javascrit", à u cuntrariu, dà un aspettu più familiar chì i blocchi visuali:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
In quantu à u rendiment. Quandu aghju eseguitu u script flasher più simplice, aghju avutu una onda quadra di 47 kHz nantu à a pantalla di l'oscilloscopiu (à una velocità di clock di processore di 80 MHz).
Pensu chì questu hè un bonu risultatu, almenu sta velocità hè quasi dece volte più veloce
Parte finale
Per riassume, diceraghju chì l'usu di scripts permette micca solu di programà a logica di u funziunamentu di un dispositivu separatu, ma ancu permette di cunnette parechji dispositi in un unicu mecanismu, induve certi dispositi influenzanu u cumpurtamentu di l'altri.
Aghju nutatu ancu chì u metudu sceltu per almacenà scripts (direttamente in i dispositi stessi, è micca in u servitore) simplificà u cambiamentu di i dispositi chì travaglianu à un altru servitore, per esempiu à una casa Raspberry, quì.
Hè tuttu, saraghju cuntentu di sente cunsiglii è critiche constructive.
Source: www.habr.com